Рисование на канве
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Если нужно организовать процедуру для рисования фигуры на произвольной канве.
Как это можно сделать, если не известо от какого именно объекта происходит вызов процедуры, т.е. sender заранее не известен.
Как это можно сделать, если не известо от какого именно объекта происходит вызов процедуры, т.е. sender заранее не известен.
Если процедуру планируется использовать внутри одной программы, то можно заранее посмотреть, какие именно на каких именно канвасах она может использоваться.
Код: Выделить всё
procedure figura(var cnv:TCanvas);
begin
{Тут рисование фигуры или чего там еще}
end;
procedure drawoncanvas(sender:TObject);
begin
if sender is TForm
then figura((sender as TForm).canvas)
else if sender is TImage
then figura((sender as TImage).canvas)
else if sender is TMyComponent
then figura((sender as TMyComponent).canvas);
{Все это прописывается для нужного количества компонентов}
end;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Нет это-то понятно, а нельзя ли как-либо реализовать без перебора всех возможных обьектов.
-
- Сообщения: 50
- Зарегистрирован: 09 мар 2005, 13:57
- Контактная информация:
Например нарисовать что-то на экране по координатам x,y где MAX(X)=1024, MAX(y)=768
Например так? Можно же не на окне рисоваться а прям на рабочем столе так скажем.

- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
Свойство Canvas определено в классе TGraphicControl, поэтому достаточно проверить:
Код: Выделить всё
if Sender is TGraphicControl then
begin
MyCanvas := (Sender as TGraphicControl).Canvas;
// и далее обращаться к ней
end;

Вот! Именно это я и пытался вспомнить: где же определяется канвас. Так и не вспомнил. Спасибо, Игорь!Игорь Акопян писал(а):Свойство Canvas определено в классе TGraphicControl
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
блин, робяты, а что Delphi Help уже отменили?
Кликаем на панели инструментов любой контрол - давим F1, выбираем Properties и листам окно вниз до слова Canvas (или ещё какого) и читаем название класса. 



Канвас можно "присобачить" всем, у кого есть Handle. Хоть на кнопку...
))
Только о периресовке этого канваса надо заботиться самостаятельно.

Код: Выделить всё
procedure something(sender: TObject);
var
C: TCanvas;
begin
if (Sender is TWinControl) then
begin
C := TCanvas.Create;
try
C.Handle := GetDC((Sender as TWinControl).Handle);
C.Rectangle(5,5,20,20);
ReleaseDC(0, C.Handle);
finally
C.Free;
end;
end;
end;
С уважением, Lost Angel...
Спасибо БОЛЬШОЕ, я теперь уловил, как делать!!!