Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.042 c
9-1136079048
Тем
2006-01-01 04:30
2006.10.08
Как сделать выделение треугольников с учётом видимости?


2-1158399969
stfu
2006-09-16 13:46
2006.10.08
Поиск по имени и столбцу в StringGrid..


2-1159109758
Серый
2006-09-24 18:55
2006.10.08
Поля Edit


15-1158407995
cyborg
2006-09-16 15:59
2006.10.08
В упор не найду TabSet в компонентах


1-1156276603
ronyn
2006-08-22 23:56
2006.10.08
QueryInput





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский