Страница 1 из 1
Рисование на канве
Добавлено: 10 апр 2005, 02:38
qwerqwer
Если нужно организовать процедуру для рисования фигуры на произвольной канве.
Как это можно сделать, если не известо от какого именно объекта происходит вызов процедуры, т.е. sender заранее не известен.
Добавлено: 10 апр 2005, 17:53
Хыиуду
Если процедуру планируется использовать внутри одной программы, то можно заранее посмотреть, какие именно на каких именно канвасах она может использоваться.
Код: Выделить всё
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;
Добавлено: 11 апр 2005, 01:32
qwerqwer
Нет это-то понятно, а нельзя ли как-либо реализовать без перебора всех возможных обьектов.
Добавлено: 11 апр 2005, 08:33
Dr.Grizzly
Например нарисовать что-то на экране по координатам x,y где MAX(X)=1024, MAX(y)=768

Например так? Можно же не на окне рисоваться а прям на рабочем столе так скажем.
Добавлено: 11 апр 2005, 11:47
Игорь Акопян
Свойство Canvas определено в классе TGraphicControl, поэтому достаточно проверить:
Код: Выделить всё
if Sender is TGraphicControl then
begin
MyCanvas := (Sender as TGraphicControl).Canvas;
// и далее обращаться к ней
end;
Добавлено: 11 апр 2005, 17:55
Хыиуду
Игорь Акопян писал(а):Свойство Canvas определено в классе TGraphicControl
Вот! Именно это я и пытался вспомнить: где же определяется канвас. Так и не вспомнил. Спасибо, Игорь!
Добавлено: 12 апр 2005, 00:36
Игорь Акопян
блин, робяты, а что Delphi Help уже отменили?

Кликаем на панели инструментов любой контрол - давим F1, выбираем Properties и листам окно вниз до слова Canvas (или ещё какого) и читаем название класса.

Добавлено: 12 апр 2005, 08:23
LAngel
Канвас можно "присобачить" всем, у кого есть 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;
Только о периресовке этого канваса надо заботиться самостаятельно.
Добавлено: 12 апр 2005, 17:42
qwerqwer
Спасибо БОЛЬШОЕ, я теперь уловил, как делать!!!