Фоновый рисунок формы

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

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

Ответить
nalex
незнакомец
Сообщения: 7
Зарегистрирован: 23.06.2007 19:31:11
Откуда: Новосибирск
Контактная информация:

Фоновый рисунок формы

Сообщение nalex »

Как наложить на форму фоновый рисунок?
Logo
постоялец
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Сообщение Logo »

На событие OnPaint

Код: Выделить всё

procedure TForm1.FormPaint(Sender: TObject);
begin
     Canvas.Draw(0,0, Image1.Picture.Graphic);
end;
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

nalex
При создании формы:

Код: Выделить всё

procedure TForm1.Form1Create(Sender: TObject);
Var
  gr: TGraphic;
Begin
  gr:=TGraphic.Create;
  gr.LoadFromFile('Название_файла');
  form1.Canvas.Draw(0,0, gr);
  gr.Free;
End;
Последний раз редактировалось Vadim 14.03.2009 14:50:05, всего редактировалось 1 раз.
wavebvg
постоялец
Сообщения: 355
Зарегистрирован: 28.02.2008 03:57:35

Сообщение wavebvg »

А мона ещё и растянуть...
Andreich
постоялец
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Сообщение Andreich »

to Vadim
У меня это вариан почему-то не захотел работать... ругается 'SIGSEGV' на строчку gr.Create.

И еще, предложенные варианты насколько я понимаю "наклеивают" рисунок на форму как есть, если изображение меньше, то на форме останутся непрокрашенные места. Можно поступить немного по другому, для случая когда необходимо затекстурировать форму (например под камень или метал).

Код: Выделить всё

procedure TForm1.FormPaint(Sender: TObject);
var bitmap: TBitmap;
begin
  bitmap:=TBitmap.Create;
  bitmap.LoadFromFile('image.bmp');
  Form1.Canvas.Brush.Bitmap:=bitmap;
  Form1.Canvas.Rectangle(0,0,Width,Height);
  bitmap.Free;
end;   
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Andreich писал(а):У меня это вариан почему-то не захотел работать...

Ой, я немного неправильно написал. :) Нужно так:

Код: Выделить всё

gr:=TGraphic.Create;
Logo
постоялец
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Сообщение Logo »

Vadim, а если сделать немножко ресайз формы, - картинка не пропадает?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Logo
Пропадёт. :) Потому что всего один раз рисуется. Если форма предполагает изменение размеров, тогда в OnPaint надо засовывать Draw(). Правда это отчётливо замедляет процесс перерисовки формы при ресайзе. Даже на глаз становится видно, как сначала отрисовывается форма, а потом, с некоторой задержкой, сверху накладывается рисунок. :) Я, поэтому, фоновые рисунки не применяю. Их можно, в принципе, накладывать на форму с фиксированными размерами, тогда этот "дефект" не заметен. :)
Аватара пользователя
Slavikk
постоялец
Сообщения: 208
Зарегистрирован: 15.01.2007 21:34:52
Откуда: Из лесов...
Контактная информация:

Сообщение Slavikk »

храните рисунок в памяти и перерисовывайте при каждом OnPaint:
Form1.Canvas.Brush.Bitmap:=bitmap;
Form1.Canvas.Rectangle(0,0,Width,Height);
Ответить