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

> ВНИМАНИЕ!

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

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


Новичок
*

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

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


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

Программу еще не начал, код писать не прошу, необходима консультация в том, какие элементы выбрать для разработки, TPaintBox или TImage и т.д. и как лучше всё это отрисовывать, может кто может дать совет?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
RussoTuristo
сообщение 4.02.2011 10:51
Сообщение #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 - 4.02.2011 10:54


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

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


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

 



- Текстовая версия 7.07.2025 12:54
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"