Рисования в Lazarus

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Рисования в Lazarus

Сообщение kolian2000 » 18.01.2013 21:57:38

Вижу мне некто не поможет
kolian2000
новенький
 
Сообщения: 11
Зарегистрирован: 22.12.2012 19:04:31

Re: Рисования в Lazarus

Сообщение Vadim » 19.01.2013 10:43:44

kolian2000
А где в Вашем коде красный кружок рисуется после клика мышкой по изображению?

Добавлено спустя 15 минут 2 секунды:
Если я правильно понял Ваш НЕкомментированный код ( ;) ), то Вы постоянно всё стираете:
Код: Выделить всё
Image1.Canvas.FillRect(0,0,511,511);

Из-за этого у Вас и ничего не получается. Стирание уберите, а вместо него, чтобы убрать изображение стада тараканов, рисуете их на том же месте, только режим пера поставьте pmXor (или pmNotXor - я забыл, какой иенно, проверьте сами). При этом получится, что второе рисование тем же цветом на том же самом месте просто восстанавливает цвет фона, а старые изображения в другом месте стираться не будут.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Рисования в Lazarus

Сообщение vladimir76 » 12.05.2016 23:14:38

А как без прямоугольника закрасить область рисования белым цветом? Без этого рисуется чёрный квадрат. Я так понял, что этот эффект из глубин WinAPI. Но ни там, ни в Delphi с Lazarus не удаётся избавится от него без квадрата.

Кстати, не подскажете, как изменить размер холста с сохранением нарисованного, и закрашиванием новой области белым цветом? Или может подскажете, как сохранить нарисованное, а после увеличения размера холста вернуть обратно, разместив по-центру?

Версия Lazarus 1.4.4
vladimir76
незнакомец
 
Сообщения: 4
Зарегистрирован: 30.01.2016 13:00:16

Re: Рисования в Lazarus

Сообщение Sharfik » 13.05.2016 00:28:07

возьми лист бумаги, нарисуй на нем, потом возьми лист побольше и пролей на него кровь конкурентов, а потом нарисуй на нем то что нарисовано на первом листе.
Так же и с программой, только конкуренты остаются без царапин.

Это не прямоугольник, это функция которая выполняет действие по самой простой форме. Если не нравится можно каждому пикселю давать цвет индивидуально через цикл, функция там же рядом лежит.
Можно копировать одну канву в другую "временную". Изменять первую и вставлять временную по нужным координатам в первую.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30

Re: Рисования в Lazarus

Сообщение vladimir76 » 19.05.2016 15:02:18

Sharfik писал(а):Можно копировать одну канву в другую "временную". Изменять первую и вставлять временную по нужным координатам в первую.
Где взять эту временную канву? Пробовал использовать BitMap... Нарисованное сохраняется, но размер холста не увеличивается. Объясните подробнее. Когда и куда копировать. Когда возвращать.
vladimir76
незнакомец
 
Сообщения: 4
Зарегистрирован: 30.01.2016 13:00:16

Re: Рисования в Lazarus

Сообщение Sharfik » 19.05.2016 23:50:16

vladimir76 писал(а):Где взять эту временную канву? Пробовал использовать BitMap... Нарисованное сохраняется, но размер холста не увеличивается. Объясните подробнее. Когда и куда копировать. Когда возвращать.


Создаешь пустой проект, кидаешь на форму два компонента PaintBox.
И дальше на них тренируешься, вот код. Поиграйся с координатами, и функцией CopyRect.
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
  A,B:TRect;
begin
  PaintBox1.Canvas.Brush.Color:=clRed;
  PaintBox1.Canvas.FillRect(25,25,50,50);
  PaintBox2.Canvas.Brush.Color:=clBlue;
  PaintBox2.Canvas.FillRect(150,150,250,250);
  A:=Rect(20,20,60,60);
  B:=Rect(180,180,200,200);
  PaintBox2.canvas.CopyRect(B,PaintBox1.canvas,A);
  //PaintBox2.canvas.Draw(); Или так.
end;


Когда разберешься что к чему, тогда начинай работать с TBitmap. Создаешь два экземпляра на основе этого класса и так же как с PaintBox работаешь, а потом результат через тот же CopyRect, Draw, Assign можно вывести на форму, TImage, TPaintBox и т.д. Нужно только созданному виртуально объекту через свойства ширины и высоты задать размеры холста.

PS1:Берешь нужный тебе объект и ставишь после него точку, ждем появления выпадающего списка подсказки и смотрим какие функции нам доступны. Ищешь по смыслу нужные тебе.
PS2: d C:\Lazarus\examples\canvas_test есть примеры кодов использования канвы.
PS3: Yandex=Delphi+Canvas+Bitmap+Faq, но лучше книжку купить Архангельского.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30

Re: Рисования в Lazarus

Сообщение vladimir76 » 20.05.2016 01:18:04

Спасибо! Буду экспериментировать.
vladimir76
незнакомец
 
Сообщения: 4
Зарегистрирован: 30.01.2016 13:00:16

Re: Рисования в Lazarus

Сообщение vladimir76 » 03.06.2016 12:45:13

Здравствуйте! Возникла ещё одна проблема. На форме слева ScrollBox с Image внутри. Справа GroupBox с полями и кнопками. При изменении размера формы ScrollBox тоже меняет размеры, а GroupBox сохраняет своё положение у правого края формы. Проблема вот в чём. При изменении размера холста у Image через битмап, во время изменения размера появляется чёрная полоска между GroupBox и правой границей формы. Такая же полоска и над нижней границей формы. Её размер зависит от степени отставания GroupBox-а и ScrollBox-а от правой и нижней границы формы, при её перемещении. При завершении изменения размера эта полоска пропадает. Если при изменении размера формы не менять размера холста Image, то чёрной полоски не появляется. Хотя отставание GroupBox-а и ScrollBox-а ни куда не девается.

Может кто что посоветует.
vladimir76
незнакомец
 
Сообщения: 4
Зарегистрирован: 30.01.2016 13:00:16

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 241

Рейтинг@Mail.ru