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

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

Обработчик событий в другом модуле. Как сделать?


Новенький в Делфи ©   (2002-09-18 00:07:00) 

Допустим button1 описывается в unit1, хочу что бы OnClick обрабатывался в unit2.


Cobalt   (2002-09-18 12:56:00) [1]


> Юрий Зотов © (18.09.02 11:08)
> > Cobalt © (18.09.02 09:48)
>
> > Form2.Show(Sender); Вы это имели в виду?

Извините, обознался.

> Сами свой совет пробовали?

нет, т.к. видел мельком, и не задумывался о практическом применении.


Юрий Зотов   (2002-09-18 11:08:00) [2]

> Cobalt © (18.09.02 09:48)

> Form2.Show(Sender); Вы это имели в виду?

Нет, не это. Метод Show класса TForm не имеет параметров, поэтому Ваш Sender, мягко говоря, непонятен. Я имел в виду то, что написал. Точно это и только это.

> однако, если в обработчике обращаются к Form2, то...

То произойдет обращение к Form2, не более и не менее. И ничего другого не произойдет. Вызов Form2.Show - это УЖЕ обращение к Form2. Просто Form2 к этому моменту должна быть уже создана, вот и все. Например, через AutoCreate (как у меня и было). Или любым другим способом.

=============================

> Cobalt © (18.09.02 00:55)

> Попробуй вызывать из обработчика события процедуру из unit2.
> Хотя, тогда не будет доступа к полям формы...

Будет, если использовать глобальную переменную или передать ссылку на форму в параметрах этой процедуры.

> Можно (по-моему) объявить одиночную процедуру of class
> (т.е. метод класса без самого класса)

Без самого класса можно объявить ТИП метода класса (только of object, а не of class). Именно ТИП, но не сам метод.

> и при создании установить ее как обработчик

Нельзя. Даже не откомпилируется. Одиночные процедуры обработчиками событий служить не могут, поскольку одиночные процедуры и методы класса - вещи разные. Задумайтесь - откуда в методах класса берется Self и почему его нет в обычных процедурах?

Сами свой совет пробовали?

=============================

> Новенький в Делфи (18.09.02 09:51)

Для подключения дополнительных файлов можно использовать не uses, а директивы $INCLUDE. Больше ничего не потребуется, все пишете, как обычно.


Новенький в Делфи   (2002-09-18 09:51:00) [3]

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


Cobalt   (2002-09-18 09:48:00) [4]

>Юрий Зотов © (18.09.02 01:07)
procedure TForm1.FormShow(Sender: TObject);
begin
Form2.Show (Sender);
Вы это имели в виду? тогда пойдет, однако, если в обработчике обращаются к Form2, то ...

В общем, Новенький в Делфи, цель уточните.


Юрий Зотов   (2002-09-18 01:07:00) [5]

unit Unit1;

interface

uses
...

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormShow(Sender: TObject); // Событие OnShow.
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

uses
Unit2;

procedure TForm1.FormShow(Sender: TObject);
begin
Form2.Show;
Button1.OnClick := Form2.MyHandler
end;

end.

===============================================

unit Unit2;

interface

uses
...

type
TForm2 = class(TForm)
public
procedure MyHandler(Sender: TObject); // Написать ручками.
end;

var
Form2: TForm2;

implementation

{$R *.DFM}

{ TForm2 }

procedure TForm2.MyHandler(Sender: TObject);
begin
if Color = clRed then Color := clGreen else Color := clRed
end;

end.


Cobalt   (2002-09-18 00:55:00) [6]

Попробуй вызывать из обработчика события процедуру из unit2.
Хотя, тогда не будет доступа к полям формы...
А, обращайся к компонентам через экземпляр формы (напр. Form1.Button1.Caption:="Стоп";)
А вообще-то, в чем разница, в каком модуле? Можно (по-моему) объявить одиночную процедуру of class (т.е. метод класса без самого класса)(или что-то в этом роде - видел как-то в хелпе) и при создании установить ее как обработчик


Наверх

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