IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Графический редактор в Delphi
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской
Реальное имя: Серёга

Репутация: -  0  +


Добрый день! Необходимо написать графический редактор следующего вида:
Окно разбито на 2 части, в левой вводятся параметры фигуры, в правой она отрисовывается. Например: для начала задан прямоугольник высотой 50 и шириной 100. Указываем высоту - 25, на ней ширина 50 и фигура должна преобразоваться, приняв форму песочных часов и далее в этом духе. Надеюсь нормально объяснил...

Программу еще не начал, код писать не прошу, необходима консультация в том, какие элементы выбрать для разработки, TPaintBox или TImage и т.д. и как лучше всё это отрисовывать, может кто может дать совет?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 80
Пол: Мужской

Репутация: -  0  +


Извините, придется заходить не под собой, мой профиль исчез куда-то))))
Навоял что-то, но работает оно совсем не так... Отрисовывается что-то непонятное, а из-за того, что изображение строю в буфере, отследить по шагам не удается... Может я что не так делаю? Подскажите, пожалуйста...
Код:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids, ExtCtrls;

type
TForm1 = class(TForm)
Panel1: TPanel;
PaintBox1: TPaintBox;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
StringGrid1: TStringGrid;
BitBtn1: TBitBtn;
Label3: TLabel;
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
img, buffer: TBitmap;
pol:array[1..100] of TPoint;
ar1,ar2: array[1..2,1..100] of real;
l,h:integer;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:='Ширина';
StringGrid1.Cells[1,0]:='Высота';
StringGrid1.Cells[0,1]:='70';
StringGrid1.Cells[1,1]:='200';
StringGrid1.Cells[0,2]:='120';
StringGrid1.Cells[1,2]:='300';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Img:=TBitmap.Create;
buffer:=TBitmap.Create;
img.Width:=PaintBox1.ClientWidth;
buffer.Width:=PaintBox1.ClientWidth;
img.Height:=PaintBox1.ClientHeight;
buffer.Height:=PaintBox1.ClientHeight;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
i:integer;
a1,a2:real;
begin
//ar1 и ar2-содержат точки аттриума(1-левая грань,2-правая)
img.Canvas.Pen.Color:=clBlack;
l:=StrtoInt(edit1.text);
h:=StrtoInt(edit2.text);
//Начальная фигура -прямоугольник(зададим углы)
ar1[1,1]:=10; ar1[2,1]:=10;
ar1[1,100]:=10; ar1[2,100]:=10+h;
ar2[1,1]:=10+l; ar2[2,1]:=10;
ar2[1,100]:=10+l; ar2[2,100]:=10+h;
//заполним массивы точками из таблицы
for i:=2 to 100 do
begin
if (StringGrid1.Cells[1, i]<>'') and (StringGrid1.Cells[2, i]<>'') then begin
a1:=StrToInt(StringGrid1.Cells[1, i]);
a2:=StrToInt(StringGrid1.Cells[2, i]);
ar1[1,i]:=10+Round((h-a1)/2);
ar1[2,i]:=10+a2;
ar2[1,i]:=10+Round((h-a1)/2)+a1;
ar2[2,i]:=10+a2;
end;
end;
//Тут надо отсортировать массивы ar1 и ar2 по высоте

//Печать того, что получилось
img.Canvas.MoveTo(10,10);
for i:=1 to 100 do begin
if (ar1[1, i]<>0) and (ar1[2, i]<>0) then begin
img.Canvas.LineTo(Round(ar1[1,i]),Round(ar1[2,i]));
end;
end;
img.Canvas.MoveTo(10,10+l);
for i:=1 to 100 do begin
if (ar2[1, i]<>0) and (ar2[2, i]<>0) then begin
img.Canvas.LineTo(Round(ar2[1,i]),Round(ar2[2,i]));
end;
end;

//Отрисовка верхней и нижней граней
img.Canvas.MoveTo(10,10);
img.Canvas.LineTo(10+l,10);
img.Canvas.MoveTo(10,10+l);
img.Canvas.LineTo(10+h,10+l);
//Перевод изображения из буфера
paintbox1.Canvas.CopyRect(bounds(0,0,img.Width,img.Height),
img.Canvas,bounds(0,0,img.Width,img.Height));
end;

end.


Массивы ar1 и ar2 из StringGrid по-моему он не заполняет... или потом не считывает....

Сообщение отредактировано: RussoTuristo -


Прикрепленные файлы
Прикрепленный файл  1.rar ( 9.06 килобайт ) Кол-во скачиваний: 325
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
SeregaR1Val   Графический редактор в Delphi   21.01.2011 21:30
TarasBer   Что-то я пока не очень понял. Если мы можем только…   21.01.2011 22:30
Гость   Да, только такой, возможно надо будет сругленные у…   21.01.2011 23:51
TarasBer   То есть все инструкции определяются только двумя п…   22.01.2011 0:38
RussoTuristo   Извините, придется заходить не под собой, мой проф…   4.02.2011 14:51
TarasBer   > StringGrid1.Cells[0,0]:='Ширина'; …   4.02.2011 15:17
RussoTuristo   Что-то до меня не доходит... В строке 0 - заголово…   4.02.2011 15:25
TarasBer   Я тебе привёл 2 фрагмента. В одном ты берёшь 1й ин…   4.02.2011 15:30
RussoTuristo   В одном ты берёшь 1й индекс 0 и 1 В другом ты берё…   4.02.2011 15:52
TarasBer   Ещё раз. Вот тебе два куска твоего кода: String…   4.02.2011 16:03
RussoTuristo   Спасибо, понял, что с индексами не так!   4.02.2011 16:11
volvo   Ничего не исчезло. Посмотри первое сообщение. Если…   4.02.2011 16:36
RussoTuristo   Ничего не исчезло. Посмотри первое сообщение. Есл…   4.02.2011 16:46
TarasBer   Просто пишешь BitBtn1Click(Sender);   4.02.2011 17:00
RussoTuristo   Помогите, пожалуйста, еще с одной вещью: как прави…   4.02.2011 17:40
TarasBer   Надо так: buf1:=ar1j]; buf2:=ar1[2,[b…   4.02.2011 17:48
RussoTuristo   Спасибо! Невнимательность моя... вроде могу со…   4.02.2011 18:32
TarasBer   PaintBox1.Canvas.StretchDraw(какие-то параметры, н…   4.02.2011 18:37
RussoTuristo   StretchDraw не подойдет на сколько я понимаю.... P…   7.02.2011 12:45
volvo   У тебя какой-то "неправильный мёд" (С) …   7.02.2011 13:11
RussoTuristo   Извините за Canvas, действительно пропустил, но Pa…   7.02.2011 13:26
volvo   TPaintBox так устроен, что не хранит изображение, …   7.02.2011 13:49
RussoTuristo   Спасибо за разъяснение, запомню и переделаю, в при…   7.02.2011 13:56
TarasBer   > Извините за Canvas, действительно пропустил, …   7.02.2011 14:29
RussoTuristo   Вместо Paintbox взял Image, всё отрисовывается хор…   7.02.2011 20:37
TarasBer   А ты задай MyRect побольше (или поменьше) раз в 10…   7.02.2011 20:57
RussoTuristo   Действительно, ошибок не выдает, но это не значит,…   7.02.2011 21:19
TarasBer   Кто так сортировку пишет? У тебя она неправильно с…   7.02.2011 21:46
RussoTuristo   Насчет изображения понял... Почему-то такие глобал…   7.02.2011 22:00
RussoTuristo   Помогите, пожалуйста, с удалением изображения, Img…   8.02.2011 12:54
TarasBer   Create-Free, а не Create-Destroy. Опять невнимате…   8.02.2011 14:27
RussoTuristo   Free тоже самое выдает, я пробовал....   8.02.2011 14:51
TarasBer   Покажи, как ты этот Free вызываешь?   8.02.2011 15:13
RussoTuristo   img.free; первым делом при нажатии кнопки... Пробо…   8.02.2011 15:32
TarasBer   Ты создаёшь img при создании формы, а уничтожаешь …   8.02.2011 15:38
RussoTuristo   Форма-то заново не создается и не уничтожается, де…   9.02.2011 14:06
TarasBer   > Без ошибок и без результатов. Какой результа…   9.02.2011 15:02
RussoTuristo   Чтобы при нажатии кнопки BitBtn1 старое изображен…   11.02.2011 15:37
TarasBer   > Чтобы при нажатии кнопки BitBtn1 старое изобр…   11.02.2011 15:44
RussoTuristo   Я так понимаю, речь идёт об этой строке, но изобр…   11.02.2011 15:50
TarasBer   > Я так понимаю, речь идёт об этой строке, но и…   11.02.2011 16:08
RussoTuristo   Вроде доработал все, изображение строится, сжимает…   12.02.2011 21:08
-TarasBer-   > о при расчете вылетает ошибка: "EConverE…   12.02.2011 21:25
RussoTuristo   В поля text у Edit3, Edit4 и Edit7 введены значени…   12.02.2011 21:51
-TarasBer-   > В поля text у Edit3, Edit4 и Edit7 Ты хоть с…   12.02.2011 22:24
RussoTuristo   http://delphi-manual.ru/edit.php А что с text не т…   12.02.2011 23:02
volvo   Значит, где-то в обработчиках чего-то лишнего пона…   13.02.2011 0:16
RussoTuristo   Вот проект без ЕХЕшников: Заранее спасибо.   13.02.2011 0:37
volvo   OMG... :blink: А ничего, что Edit3 и Form1.Edit…   13.02.2011 0:49
RussoTuristo   Спасибо, уверен был, что там косяк, но не знал куд…   13.02.2011 11:52
RussoTuristo   Снова здравствуйте, в процессе работы программы мн…   20.02.2011 16:36
RussoTuristo   Помогите, пожалуйста с кое-чем: Рассматривается оп…   21.02.2011 22:11
-TarasBer-   > 2)Вычисляем по формуле производную и получаем…   21.02.2011 22:54
RussoTuristo   По формуле производной, хотя уже сомнения закралис…   21.02.2011 23:01
-TarasBer-   > -dy/dt=2y/5+(2/5+7) > -dy/dt=2y/5 А чё, 2…   22.02.2011 0:03
RussoTuristo   Школу давно закончил, но с математикой всегда были…   22.02.2011 15:56
TarasBer   > Пытаюсь разобраться, но чёто везде примеры ле…   22.02.2011 16:29
RussoTuristo   Добрый вечер! Снова нужна помощь форума, помог…   2.05.2011 0:16
IUnknown   Проходи в одной процедуре по всем компонентам, и п…   2.05.2011 1:33
RussoTuristo   Спасибо. сохранение и загрузка происходит, только …   2.05.2011 15:10
IUnknown   Перед тем, как очищать память, надо знать, как эта…   2.05.2011 17:16
TarasBer   > если выделял конструктором какого-то класса -…   2.05.2011 19:22
IUnknown   Ну, что есть - то есть... По мне - так лучше я рук…   2.05.2011 19:30
TarasBer   > По мне - так лучше я руками соберу там, где э…   2.05.2011 20:21
IUnknown   Если б я хотел сказать shared_ptr, я бы сказал …   2.05.2011 20:30
RussoTuristo   Извините, код громоздкий, но всё же выложу, не пон…   2.05.2011 20:45
IUnknown   Ты б лучше запаковал весь проект и выложил сюда, а…   2.05.2011 21:06
RussoTuristo   Код программы прикрепил, удалить то длинное сообще…   2.05.2011 21:10
IUnknown   Это уже вопрос не ко мне... А в программе у тебя …   2.05.2011 21:24
RussoTuristo   У меня такое сообщение вылетает, когда я раза 3-4 …   2.05.2011 21:36
IUnknown   Так... Во-первых, Buffer типа TImage, можно убрать…   2.05.2011 21:57
RussoTuristo   Спасибо большое, понял в чем ошибка с графиками, 2…   2.05.2011 22:30
-TarasBer-   Нет. Буферу надо выделять память только один раз. …   2.05.2011 22:57
IUnknown   Нужно, а не можно. Очистить. Значит, не везде поп…   2.05.2011 22:58
RussoTuristo   Спасибо большое, графики отображаются, сейчас займ…   2.05.2011 23:09
IUnknown   RussoTuristo, ты не думал никогда над тем, что чем…   3.05.2011 15:02
RussoTuristo   Дельные замечания, поработаю над исправлением, в б…   4.05.2011 17:32
TarasBer   edit15... Хм, что бы это могло быть... Наверное, э…   4.05.2011 18:01
IUnknown   То, что Дельфи останавливается на строке с edit15.…   4.05.2011 18:05
RussoTuristo   Спасибо, исправил, теперь сохраняется и загружаетс…   4.05.2011 18:11
RussoTuristo   Пишу функцию, чтобы в поля нельзя было вводить нед…   4.05.2011 19:46
TarasBer   Нафига ты используешь with, если внутри него всё р…   4.05.2011 19:59
IUnknown   function Tf_main.Vvod_dannih : boolean; var i, …   4.05.2011 20:02
RussoTuristo   Спасибо, DecimalSeparator видел в интернете, но че…   4.05.2011 20:04
IUnknown   С чего бы? Ты хочешь оставить фокус в том Edit-е, …   4.05.2011 20:25
RussoTuristo   Первая понял в чем - я не все Editы просматривал, …   4.05.2011 20:31
IUnknown   Не совсем. Первая - это то, что у тебя есть другое…   4.05.2011 20:55
TarasBer   Я бы делал проверку на корректность содержимого не…   4.05.2011 20:56
IUnknown   Не льсти себе, я твой пост не перебивал. Я даже не…   4.05.2011 21:02
RussoTuristo   Добрый день! Подскажите, пожалуйста, а можно л…   8.05.2011 16:00
-TarasBer-   В тестовый? Нет. На то он и текстовый. Можно в во…   8.05.2011 16:12
IUnknown   Выше уже сказали, что в текстовый - нет. А просто …   8.05.2011 16:44
RussoTuristo   А как сохранить Chart и Image в вордовский фал, мо…   8.05.2011 19:49
IUnknown   У приложения Word есть коллекция InlineShapes, к к…   8.05.2011 20:22
IUnknown   Хотя... Что тебе надо делать с этим изображением? …   8.05.2011 20:49
RussoTuristo   Мне надо вывести отчет о задымленности в файл, то …   10.05.2011 10:22
TarasBer   > AddOLEObject(ClassType:='Paint.Picture…   10.05.2011 14:13
IUnknown   С чего бы? Я ж ясно написал: Или удалить надо было…   10.05.2011 15:16
TarasBer   > Или удалить надо было до сохранения? Или надо…   10.05.2011 15:22
IUnknown   Ну, как-то вот так (набираю прямо здесь, так что г…   10.05.2011 16:00
2 страниц V  1 2 >


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 2.05.2024 7:35
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name