• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы Dock1100
  • Дата начала
D

Dock1100

Пишу компонент, он должен рисовать на своем и чужом канвасе. Так вот как компоненту передать чужой Canvas компоненту?
 
E

etc

Вы больше про компонент расскажите. По ним DimaBr специалист, правда он лет семь тут не появлялся, но если вдруг его заинтересует, он подскажет как правильно.
 
E

etc

Правильнее, скорее всего, это через свойство(а) делать. Пусть пользователь сам укажет где чего рисовать.
 
D

Dock1100

Правильнее, скорее всего, это через свойство(а) делать. Пусть пользователь сам укажет где чего рисовать.
Это понятно, но как прописать само свойство?
Код:
property OtherCanvas: TCanvas read fothercanvsa write fothercanvas;
Выдаст ошибку поскоку Canvas only read
Пробовал вместо кавас Handle использовать но не рисует
 
E

etc

На сколько я понимаю, тут нужен редактор свойства. И в нем показываете все контролы, на которых можно рисовать, т.е. есть канва.
Человек просто выбирает тот который нужен, и в свойство прописывается имя того того контрола.
Ну а при рисовании по имени определять контрол и его канву.

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

Добавлено: Если вы делаете компонент, то это подразумевает что его свойства можно редактировать и в дизайн-тайм. Можно конечно и нет...
 
D

Dock1100

ТАДА!:
Код:
fdc := GetWindowDC(FOtherWindow); //FOtherWindow - Handle нужного окна(не канвы)
bitblt(fdc,50,50,width,height,fbmp_draw.Canvas.Handle,0,0,srccopy);
ReleaseDC(fotherWindow, fdc);
 
E

EdgarWine

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

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!