![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Графика
vain © (2006-09-23 21:36:00)Можно ли завести свой Canvas, не отображая его на форме, а прорисовывать его только в отдельных случаях и как?
Делаю так:
type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
Picture: TPicture;
public
end;
var
Form1: TForm1;
implementation
procedure TForm1.FormCreate(Sender: TObject);
var
GIF: TGIFImage;
begin
GIF:= TGIFImage.Create;
Picture:=TPicture.Create;
GIF.LoadFromFile(ResourcePath+IntToStr(i)+'.gif');
Picture.Bitmap.Canvas.Draw(0,0,GIF);
GIF.Free;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Self.Canvas.Draw(0,0,Picture.Bitmap.Canvas);
end;
Не работает - почему?
ProgRAMmer Dimonych (2006-09-24 00:07:00) [1]Был рад помочь...
vain (2006-09-24 00:01:00) [2]
> Вообще, если надо только прорисовать картинку на форме,
> то можно не использовать никаких TPicture и TBitmap. Берём
> TJPEGImage или TGIFImage, создаём (в нужный момент или,
> если он понадобится не один и не два раза, то при создании
> формы). Затем, когда нужна прорисовка, пишем:
>
> FormName.Canvas.Draw(X,Y,ImageName);
> где FormName - имя формы, X и Y - координаты левого верхнего
> угла картинки на форме, ImageName - объект-наследник TGraphic,
> в котором находится картинка.
>
Это я и так знал. Мне было интересно узнать способ хранения канвы.
> Надо сказать, в который раз я уже попадаюсь на одной и той
> же ошибке. У меня сразу тоже не получилось. Прикол здесь
> вот в чём. Канва битмапа обрезается до размера битмапа..
> . А сразу после создания битмап имеет Width и Height равные
> 0. Поэтому Bitmap'чик-то прорисовывается, а вот загружается
> не весь. Придётся битмаповым Width и Height присваивать
> значения сответствующих свойств TJPEGImage или TGIFImage
> (я подозреваю, что у него они тоже есть) до копирования
> изображения в битмап.
>
А вот за это огромное(!) спасибо! Поэтому и не отображалось, что битмап был 0x0.
ProgRAMmer Dimonych (2006-09-23 23:50:00) [3]Собственно, готово.
Вообще, если надо только прорисовать картинку на форме, то можно не использовать никаких TPicture и TBitmap. Берём TJPEGImage или TGIFImage, создаём ( в нужный моментили, если он понадобится не один и не два раза, то при создании формы). Затем, когда нужна прорисовка, пишем:
FormName.Canvas.Draw(X,Y,ImageName);
где FormName - имя формы, X и Y - координаты левого верхнего угла картинки на форме, ImageName - объект-наследник TGraphic, в котором находится картинка.
Вместо FormName можно использовать любой контрол, у которого есть канва.
***********************
Если нужна ещё и обработка
***********************
Надо сказать, в который раз я уже попадаюсь на одной и той же ошибке. У меня сразу тоже не получилось. Прикол здесь вот в чём. Канва битмапа обрезается до размера битмапа... А сразу после создания битмап имеет Width и Height равные 0. Поэтому Bitmap'чик-то прорисовывается, а вот загружается не весь. Придётся битмаповым Width и Height присваивать значения сответствующих свойств TJPEGImage или TGIFImage (я подозреваю, что у него они тоже есть) докопирования изображения в битмап.
vain (2006-09-23 23:18:00) [4]
> ProgRAMmer Dimonych
RxGIF из библиотеки RxLib. Да с JPEGImage тоже самое. Был бы очень благодарен, если бы вы привели пример с Jpge'ом.
ProgRAMmer Dimonych (2006-09-23 22:33:00) [5]Хотел попробовать сделать что-то похожее сам, но не получилось... В каком модуле находится TGIFImage?
vain (2006-09-23 21:54:00) [6]
> ProgRAMmer Dimonych (23.09.06 21:44) [1]
Переделал на:
procedure TForm1.FormCreate(Sender: TObject);
var
GIF: TGIFImage;
begin
GIF:= TGIFImage.Create;
Bitmap:= TBitmap.Create;
GIF.LoadFromFile(ResourcePath+'1.gif');
Bitmap.Canvas.Draw(0,0,GIF);
GIF.Free;
end;
procedure TForm1.FormPaint(Sender: TObject);
var
Rect: TRect;
begin
Rect.Left:= 0; Rect.Top:= 0;
Rect.Right:= 600; Rect.Bottom:= 450;
Self.Canvas.CopyRect(Rect, Bitmap.Canvas, Rect);
end;
Не рботает.
А как использовать TBitmap именно из Graphics?
ProgRAMmer Dimonych (2006-09-23 21:44:00) [7]Предлагаю завести TBitmap и рисовать на TBitmap.Canvas. Потом копируем на канву формы или ещё чего. Только надо быть осторожным: TBitmap есть в модулях Graphics и Windows, но они там совсем разные. В данном случае нужен TBitmap из Graphics.