у компонента PaintBox хочу процедуру вызываваемую по событию OnPaint заменить на свою процедуру описанную в собственном классе. как это сделать?
Автор: volvo 14.12.2008 16:52
Наследуй свой класс от TPaintBox и переопределяй (override) процедуру Paint.
Автор: F0b0s 14.12.2008 17:04
Цитата(volvo @ 14.12.2008 12:52)
Наследуй свой класс от TPaintBox и переопределяй (override) процедуру Paint.
а если без наследования? делегированием...то есть вызовом метода одного класса через объект другова...ну как то так... =) в инете смотрел про делегирование событий кроме вот этой непонятной( по содержанию) ссылки ни чё путного нет http://www.delphisources.ru/pages/faq/base/event_delegation.html
Автор: volvo 14.12.2008 17:12
Цитата
то есть вызовом метода одного класса через объект другова
А теперь подумай, метод какого класса ты будешь вызывать, и через объект какого класса? Ничего, что для реализации придется залезть в исходники VCL, поскольку ты хочешь вызывать СВОЙ метод через TPaintBox, для чего тебе в любом случае придется править именно TPaintBox?
Автор: F0b0s 14.12.2008 17:19
процедура вызываемая по событию OnPaint: procedure PaintBoxPaint(Sender: TObject) является методом класса TForm1 наследника TForm. поэтому я ка бы думаю что надо будет поправить не TPaintBox а TForm1...я не прав?
Автор: volvo 14.12.2008 17:41
А попробуй вот это:
Procedure TForm1.myPaint(Sender: TObject); begin // тут твоя отрисовка end;
procedure TForm1.FormCreate(Sender: TObject); begin PaintBox1.OnPaint := Form1.myPaint; // Возможно потребуется @PaintBox1.OnPaint := @Form1.myPaint; end;
Это тебе подойдет? Или обязательно извратиться с делегированием?
Автор: F0b0s 14.12.2008 18:05
желательно извратится с делегированием =) но и на том спасибо!
Автор: F0b0s 14.12.2008 22:52
Вообщем сделал вот так:
Код
TForm1 = class(TForm) .... procedure PaintBox1Paint(Sender: TObject); end; TMyProc = Procedure (Sender:TObject) of object; TMyClass = class FMyProc: TMyProc; .... end; procedure TForm1.PaintBox1Paint(Sender: TObject); begin // код рисования end; procedure TForm1.FormCreate(Sender: TObject); begin MyClass:=TMyClass.Create; MyClass.FMyProc:= Form1.PaintBox1Paint; PaintBox1.OnPaint:=MyClass.FMyProc; end;