Помощь - Поиск - Пользователи - Календарь
Полная версия: Делегирование
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
F0b0s
у компонента PaintBox хочу процедуру вызываваемую по событию OnPaint заменить на свою процедуру описанную в собственном классе.
как это сделать?
volvo
Наследуй свой класс от TPaintBox и переопределяй (override) процедуру Paint.
F0b0s
Цитата(volvo @ 14.12.2008 12:52) *

Наследуй свой класс от TPaintBox и переопределяй (override) процедуру Paint.

а если без наследования? делегированием...то есть вызовом метода одного класса через объект другова...ну как то так... =) в инете смотрел про делегирование событий кроме вот этой непонятной( по содержанию) ссылки ни чё путного нет delphisourse
volvo
Цитата
то есть вызовом метода одного класса через объект другова
А теперь подумай, метод какого класса ты будешь вызывать, и через объект какого класса? Ничего, что для реализации придется залезть в исходники VCL, поскольку ты хочешь вызывать СВОЙ метод через TPaintBox, для чего тебе в любом случае придется править именно TPaintBox?
F0b0s
процедура вызываемая по событию OnPaint: procedure PaintBoxPaint(Sender: TObject) является методом класса TForm1 наследника TForm. поэтому я ка бы думаю что надо будет поправить не TPaintBox а TForm1...я не прав?
volvo
А попробуй вот это:

Procedure TForm1.myPaint(Sender: TObject);
begin
// тут твоя отрисовка
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
PaintBox1.OnPaint := Form1.myPaint; // Возможно потребуется @PaintBox1.OnPaint := @Form1.myPaint;
end;

Это тебе подойдет? Или обязательно извратиться с делегированием?
F0b0s
желательно извратится с делегированием =) но и на том спасибо!
F0b0s
Вообщем сделал вот так:
Код

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;

lol.gif думаете сойдет за делегирование?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.