Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2011, 16:10   #1
fredwriter
Форумчанин
 
Регистрация: 06.10.2009
Сообщений: 121
По умолчанию Рисование в OnPaint

Здравствуйте, перед вопросом, выложу, например, вот такой код:
Код:
var
  Form1: TForm1;
  Rect_Ozero, P_Rect_Ozero: TRect;
  Picture_Ozero: TBitmap;
  a, b, c, d: integer;
 
procedure TForm1.FormPaint(Sender: TObject);
begin
  Form1.Canvas.Brush.Color := clred;
  Rect_Ozero := Rect(a, b, c, d);
  Form1.Canvas.FillRect(Rect_Ozero);
 
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  a := a + 10;
  c := c + 10;
  Rorm1.Repaint;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  a := 10;
  b := 10;
  c := 100;
  d := 100;
end;

Как сделать, что бы нарисованный ранее кубик не стирался, но что бы не рисовать его в OnPaint по старым координатам заново, а сохранить где-нибудь, например, в Bitmap'е каком-нибудь, и вывести и так сохранять всё нарисованное ранее.
Как перерисовывать по тому-же алгоритму в OnPaint я знаю, нужно просто рисовать кубик меняя координаты в цикле, и при нажатии на кнопку, просто давать новую, измененную N, но мне нужно именно сохранять то, что нарисовано ранее. И по нажатии на кнопку дорисовывать.
Ищущий да обрящет
fredwriter вне форума Ответить с цитированием
Старый 05.12.2011, 08:22   #2
<- DelpHIFanat ->
Пользователь
 
Аватар для <- DelpHIFanat ->
 
Регистрация: 07.11.2011
Сообщений: 58
По умолчанию

Честно говоря, не совсем понял задачу, но, вот написал, чтоб сохранялось в Bitmap и рисовалось.
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  a := 10;
  b := 10;
  c := 100;
  d := 100;

  Picture_Ozero:=TBitmap.Create;
  Picture_Ozero.Canvas.Pen.Style:=psClear;
  Picture_Ozero.Canvas.Brush.Color:=clRed;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Picture_Ozero.Width:=c-a;
  Picture_Ozero.Height:=d-b;
  Picture_Ozero.Canvas.FillRect(Rect(0, 0, c-a, d-b));

  c := c + 10;
  Form1.Repaint;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  Form1.Canvas.Draw(a, b, Picture_Ozero);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Picture_Ozero.Free;
end;
Лучше вообще не иметь знаний о чём-то, чем иметь неправильные знания об этом!..
<- DelpHIFanat -> вне форума Ответить с цитированием
Старый 05.12.2011, 09:24   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и вывести и так сохранять всё нарисованное ранее.
Ты делаешь свою рисовалку? Мол народ будет мышкой рисовать ченить, прога сохранять и открывать сохраненное?
Ибо если нет то смысла в сохранении никакого - все равно при подгрузке из файла ты проводишь отрисовку того же кубика.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.12.2011, 23:20   #4
fredwriter
Форумчанин
 
Регистрация: 06.10.2009
Сообщений: 121
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ты делаешь свою рисовалку?
Нет, я не делаю рисовалку, этот код я привёл для примера, что бы объяснить на нём, что мне нужно: рисую что-то на канве, сохраняю куда-то. В OnPaint рисую то, что сохранил, и еще дорисовываю дальше. Потом опять, всё что нарисовал в OnPaint, сохраняю куда-то, в OnPaint рисую это и опять дорисовываю дальше, что-бы в OnPaint не повторять по алгоритму всю прорисовку, а рисовать из сохранённого, и лишь дорисовывать. А в коде, который я привел всё, что нарисовано раньше - стирается.
Цитата:
при подгрузке из файла ты проводишь отрисовку того же кубика.
Мне нужно сохранить всё, что я уже нарисовал, это будет не кубик, а уже прямоугольник, и этот прямоугольник будет расти, типа след оставляет.
Ищущий да обрящет

Последний раз редактировалось fredwriter; 05.12.2011 в 23:29.
fredwriter вне форума Ответить с цитированием
Старый 05.12.2011, 23:39   #5
viron
Форумчанин
 
Аватар для viron
 
Регистрация: 02.12.2011
Сообщений: 110
По умолчанию

Может вот эта процедура тебе нужна?
Form1.Canvas.CopyRect(Dest: TRect; SourceCanvas: TCanvas; Source: TRect);
Копирует кусок (Source) из SourceCanvas на форму в координаты Dest
viron вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование в C++ taralesh Помощь студентам 2 15.04.2011 01:11
Рисование !) Weyner Помощь студентам 0 23.10.2010 09:20
OnPaint Juffin Общие вопросы Delphi 1 12.05.2009 15:44
добавление обработчика OnPaint в TPanel Mixasik Общие вопросы Delphi 2 23.07.2008 17:36
Рисование... HunterMan Win Api 10 30.04.2008 23:46