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

> ВНИМАНИЕ!

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

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

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


Новичок
*

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

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


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

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


Пионер
**

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

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


Действительно, ошибок не выдает, но это не значит, что работает... думаю я не в том месте его указываю(хотя пробовал в разных) или аргументы не те, посмотрите, пожалуйста, может какие замечания будут по стилю или применению функций, новичок в этом деле, готов учиться на своих ошибках...
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i,j:integer;
a1,a2,buf1,buf2:real;
MyRect:TRect;
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:=1 to 100 do
begin
if (StringGrid1.Cells[0, i]<>'') and (StringGrid1.Cells[1, i]<>'') then begin
a1:=StrToInt(StringGrid1.Cells[0, i]);
a2:=StrToInt(StringGrid1.Cells[1, i]);
ar1[1,i+1]:=10+Round((l-a1)/2);
ar1[2,i+1]:=10+a2;
ar2[1,i+1]:=10+Round((l-a1)/2)+a1;
ar2[2,i+1]:=10+a2;
end;
end;
//Сортируем массивы по высоте
for i:=1 to 100 do
for j:=1 to 100 do
if ar1[2,i]<ar1[2,j] then begin
buf1:=ar1[1,j];
buf2:=ar1[2,j];
ar1[1,j]:=ar1[1,i];
ar1[2,j]:=ar1[2,i];
ar1[1,i]:=buf1;
ar1[2,i]:=buf2;
end;
for i:=1 to 100 do
for j:=1 to 100 do
if ar2[2,i]<ar2[2,j] then begin
buf1:=ar2[1,j];
buf2:=ar2[2,j];
ar2[1,j]:=ar2[1,i];
ar2[2,j]:=ar2[2,i];
ar2[1,i]:=buf1;
ar2[2,i]:=buf2;
end;
//Печать того, что получилось
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+l,10);
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+h);
img.Canvas.LineTo(10+l,10+h);
//Перевод изображения из буфера
MyRect := Rect(0,0,Image1.ClientWidth,Image1.ClientHeight);
Image1.Canvas.StretchDraw(MyRect, Image1.Picture.Graphic);
Image1.Canvas.CopyRect(bounds(0,0,img.Width,img.Height),
img.Canvas,bounds(0,0,img.Width,img.Height));
end;


Без StretchDraw никак, а он не пашет...
 Оффлайн  Профиль  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 15:10
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name