Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

определение произошедшего события [D6, XP]


Страницы:   1 2

f2d ©   (2007-03-11 22:57:00) 

есть:

procedure BtnProc(Sender:TObject);
begin
....
end;

procedure form1.xxx
var
b:TButton;
begin
...
b.onClick:=BtnProc;
end;


можно ли как-нибудь абстрагировать метод BtnProc чтобы он работал не только для события onClick, но и для других событий кнопки? Мною задумано так, что BtnProc будет загружать и выполнять скрипт.
то есть на нужное нам событие(onClick, onMouseMove,...) мы назначаем BtnProc, а далее, при выполнении процедуры BtnProc она по параметрам, или каким-либо другим образом(свойствам sender'a) определяет что за событие её вызвало и производит соответствующие действия. например если нажали на Button1 то BtnProc должна вызвать скрипт с именем Button1.onClick.scr, если навели на Button2, Button2.onMouseMove.scr.
не могу понять как определить в следствии какого события была вызвана процедура. первое что пришло в голову это то что надо как-то переопределять метод обработки сообщений. поскажите как? или где можно про это почитать.
заранее спасибо.


Knight   (2007-03-12 00:14:00) [21]

И прикола я чё-то всё-равно не понял... почему нельзя всем onClick назначить обработчик из которого вызывать скрипт обработки клика.. а из общего обработчика OnMouseMove вызывать скрипт обработки мува... и т.д... %(


Юрий Зотов   (2007-03-12 00:05:00) [22]

Попробовал заюзать дефолтные параметры:

procedure TForm1.ButtonHandler(Sender: TObject; Shift: TShiftState = []; X: Integer = 0; Y: Integer = 0);

Не пущает, ругается (D7).


Юрий Зотов   (2007-03-11 23:48:00) [23]

> f2d ©   (11.03.07 23:29) [8]

> "можно ли как-нибудь абстрагировать метод BtnProc чтобы он работал не
> только для события onClick, но и для других событий кнопки?"

Для событий с одинаковыми параметрами - легко. Просто назначить.

Для событий с разными параметрами - еще раз: каким образом Вы собираетесь написать одинметод с двумяразными наборами параметров?

Вот напишите его прямо здесь.

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   procedure FormCreate(Sender: TObject);
 public
   procedure ButtonHandler(Sender: TObject); overload;
   procedure ButtonHandler(Sender: TObject; Shift: TShiftState; X, Y: Integer); overload;
 end;

procedure TForm1.ButtonHandler(Sender: TObject);
begin
 ShowMessage('')
end;

procedure TForm1.ButtonHandler(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 ShowMessage('')
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Button1.OnClick := ButtonHandler;
 Button2.OnMouseMove := ButtonHandler;
end;

Этот код работает. Но, как видите, в нем не один , а два метода. Хотя и с одинаковыми именами , но все равно два .

Вы же собираетесь запихнуть два разных набора параметров в один метод. Спрашивается - каким образом?

Допустим, что компилятор такой умный, что пропустит и нормально скомпилирует любой заголовок метода. Но попробуйте его вообще написать. Вот прямо здесь и сейчас.


Palladin   (2007-03-11 23:39:00) [24]


> Юрий Зотов ©   (11.03.07 23:27) [7]

:) очень просто, нырнуть в исходники RemObjects Pascal Script и разнюхать


> f2d ©   (11.03.07 23:29) [8]

короче есть два путя:

либо как я уже сказал нырнуть туда и разнюхать, бо он позволяет в скрипте создавать объекты и устанавливать свойства-методы, это долгий путь, врядли тебе в короткие сроки удасться

либо регистрировать существующие объекты движку через SetVarInstance и "дописывать" программно скрипт кодом назначения этим объектам свойств


Knight   (2007-03-11 23:39:00) [25]


> [8] f2d ©   (11.03.07 23:29)
> к тому я и спрашиваю - "можно ли как-нибудь абстрагировать
> метод BtnProc

Можно... написать свой компонент баттон у которого будет на все события один единственный обработчик :)


DrPass   (2007-03-11 23:36:00) [26]


> f2d ©   (11.03.07 23:29) [8]

Сказали ж уже - нельзя.


f2d   (2007-03-11 23:29:00) [27]


> Юрий Зотов ©  

к тому я и спрашиваю - "можно ли как-нибудь абстрагироватьметод BtnProc чтобы он работал не только для события onClick, но и для других событий кнопки?"


> Palladin ©  

горит блин) не могу сидеть и ничего не делать :)


Юрий Зотов   (2007-03-11 23:27:00) [28]

> f2d ©   (11.03.07 23:17) [2]

Обработчики событий OnClick и OnMouseMove имеют разные наборы параметров.

Каким образом Вы собираетесь написать один метод с двумя разными наборами параметров?


Knight   (2007-03-11 23:26:00) [29]

А почему бы не сделать два обработчика
ButtonsOnClick(...) и ButtonsOnMouseMove(...;...;...)
И присваивать нужным кнопкам... А в них вызывать BtnProc или разбить BtnProc на пару частей, если они объединены искуственно...

Или подождать Паладина и он что-нить придумает :)


Palladin   (2007-03-11 23:23:00) [30]


> f2d ©   (11.03.07 23:18) [3]

до когда тебе это вообще нужно?


Palladin   (2007-03-11 23:22:00) [31]


> f2d ©   (11.03.07 22:57)

Да подожди ты до понедельника :) протрезвею напишу :)


f2d   (2007-03-11 23:18:00) [32]

если конечно я правильно понял, вы предлагали в обработчиках событий вызывать BtnProc с разными параметрами...


f2d   (2007-03-11 23:17:00) [33]

проблема в том что кнопки создаются динамически и создавать все события которыми может обладать кнопка вручную не совсем удобно.
кусок кода
b.onClick:=BtnProc;
я тоже хочу засунуть в отдельный скрипт, чтобы при создании кнопки этот скрипт выполнялся, а уже в нем было бы определено какие события этой кнопки нам нужны. если это батон1, то на него нам нужно только кликать, и в скрипте будет только

begin
button1.onClick:=BtnProc;
end.

если это батон2, то только наводить

begin
button2.onMouseMove:=BtnProc;
end.

и тд...


Knight   (2007-03-11 23:03:00) [34]

Имхо.. нельзя.. типы процедур разные...
Самое простое, сделать общую процедуру, в которую отправлять Сендера и условный код операции.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо