IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Делегирование
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +


у компонента PaintBox хочу процедуру вызываваемую по событию OnPaint заменить на свою процедуру описанную в собственном классе.
как это сделать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Наследуй свой класс от TPaintBox и переопределяй (override) процедуру Paint.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 14.12.2008 12:52) *

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

а если без наследования? делегированием...то есть вызовом метода одного класса через объект другова...ну как то так... =) в инете смотрел про делегирование событий кроме вот этой непонятной( по содержанию) ссылки ни чё путного нет delphisourse
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
то есть вызовом метода одного класса через объект другова
А теперь подумай, метод какого класса ты будешь вызывать, и через объект какого класса? Ничего, что для реализации придется залезть в исходники VCL, поскольку ты хочешь вызывать СВОЙ метод через TPaintBox, для чего тебе в любом случае придется править именно TPaintBox?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +


процедура вызываемая по событию OnPaint: procedure PaintBoxPaint(Sender: TObject) является методом класса TForm1 наследника TForm. поэтому я ка бы думаю что надо будет поправить не TPaintBox а TForm1...я не прав?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






А попробуй вот это:

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

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

Это тебе подойдет? Или обязательно извратиться с делегированием?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +


желательно извратится с делегированием =) но и на том спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской

Репутация: -  0  +


Вообщем сделал вот так:
Код

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 думаете сойдет за делегирование?

Сообщение отредактировано: F0b0s -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.04.2024 16:08
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name