Передача канваса формы компоненту

09.11.2009
665
1
#1
Пишу компонент, он должен рисовать на своем и чужом канвасе. Так вот как компоненту передать чужой Canvas компоненту?
 
E
#2
Вы больше про компонент расскажите. По ним DimaBr специалист, правда он лет семь тут не появлялся, но если вдруг его заинтересует, он подскажет как правильно.
 
E
#3
Правильнее, скорее всего, это через свойство(а) делать. Пусть пользователь сам укажет где чего рисовать.
 
09.11.2009
665
1
#4
Правильнее, скорее всего, это через свойство(а) делать. Пусть пользователь сам укажет где чего рисовать.
Это понятно, но как прописать само свойство?
Код:
property OtherCanvas: TCanvas read fothercanvsa write fothercanvas;
Выдаст ошибку поскоку Canvas only read
Пробовал вместо кавас Handle использовать но не рисует
 
E
#5
На сколько я понимаю, тут нужен редактор свойства. И в нем показываете все контролы, на которых можно рисовать, т.е. есть канва.
Человек просто выбирает тот который нужен, и в свойство прописывается имя того того контрола.
Ну а при рисовании по имени определять контрол и его канву.

примерно так, ... может чего можно и по хитрее

Добавлено: Если вы делаете компонент, то это подразумевает что его свойства можно редактировать и в дизайн-тайм. Можно конечно и нет...
 
09.11.2009
665
1
#6
ТАДА!:
Код:
fdc := GetWindowDC(FOtherWindow); //FOtherWindow - Handle нужного окна(не канвы)
bitblt(fdc,50,50,width,height,fbmp_draw.Canvas.Handle,0,0,srccopy);
ReleaseDC(fotherWindow, fdc);
 
E

EdgarWine

#7
Канва (Canvas) - это VCL-ская обёртка просто... =\\

Form1.Handle - это HWND окна
Form1.Canvas.Handle - это HDC окна
fdc:=GetDC(Form1.Handle) - тоже самое что и Form1.Canvas.Handle...
fdc:=GetWindowDC(Form1.Handle) - примерно тоже самое что и Form1.Canvas.Handle, только включая рамку окна...

И не надо делать GetDC лишний раз... Просто помнить старый, а при изменении переполучать его...
Ну а перед рисованием проверять существование его...