Рисование на канве

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
qwerqwer
Сообщения: 10
Зарегистрирован: 08 апр 2005, 23:59

Если нужно организовать процедуру для рисования фигуры на произвольной канве.
Как это можно сделать, если не известо от какого именно объекта происходит вызов процедуры, т.е. sender заранее не известен.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Если процедуру планируется использовать внутри одной программы, то можно заранее посмотреть, какие именно на каких именно канвасах она может использоваться.

Код: Выделить всё

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;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
qwerqwer
Сообщения: 10
Зарегистрирован: 08 апр 2005, 23:59

Нет это-то понятно, а нельзя ли как-либо реализовать без перебора всех возможных обьектов.
Dr.Grizzly
Сообщения: 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;
Изображение
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

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

блин, робяты, а что Delphi Help уже отменили? ;) Кликаем на панели инструментов любой контрол - давим F1, выбираем Properties и листам окно вниз до слова Canvas (или ещё какого) и читаем название класса. :)
Изображение
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

Канвас можно "присобачить" всем, у кого есть 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...
qwerqwer
Сообщения: 10
Зарегистрирован: 08 апр 2005, 23:59

Спасибо БОЛЬШОЕ, я теперь уловил, как делать!!!
Ответить