Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.08;
Скачать: CL | DM;

Вниз

Графика   Найти похожие ветки 

 
vain ©   (2006-09-23 21:36) [0]

Можно ли завести свой 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-23 21:44) [1]

Предлагаю завести TBitmap и рисовать на TBitmap.Canvas. Потом копируем на канву формы или ещё чего. Только надо быть осторожным: TBitmap есть в модулях Graphics и Windows, но они там совсем разные. В данном случае нужен TBitmap из Graphics.


 
vain ©   (2006-09-23 21:54) [2]


> 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 22:33) [3]

Хотел попробовать сделать что-то похожее сам, но не получилось... В каком модуле находится TGIFImage?


 
vain ©   (2006-09-23 23:18) [4]


> ProgRAMmer Dimonych

RxGIF из библиотеки RxLib. Да с JPEGImage тоже самое. Был бы очень благодарен, если бы вы привели пример с Jpge"ом.


 
ProgRAMmer Dimonych   (2006-09-23 23:50) [5]

Собственно, готово.

Вообще, если надо только прорисовать картинку на форме, то можно не использовать никаких 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-24 00:01) [6]


> Вообще, если надо только прорисовать картинку на форме,
> то можно не использовать никаких 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-24 00:07) [7]

Был рад помочь...



Страницы: 1 вся ветка

Текущий архив: 2006.10.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.087 c
15-1158300245
Ega23
2006-09-15 10:04
2006.10.08
Специалисты по MySQL, отзовитесь!


2-1158577906
Emik
2006-09-18 15:11
2006.10.08
ProgressBar1


3-1154686580
APXi
2006-08-04 14:16
2006.10.08
Как реализовать табличную часть?


3-1154852835
slaviq
2006-08-06 12:27
2006.10.08
Delphi+Paradox запуск приложения c CD


2-1159086452
Axis_of_Evil
2006-09-24 12:27
2006.10.08
работа с WideString