Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.30;
Скачать: CL | DM;

Вниз

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

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

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


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

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


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

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 09:48) [3]

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

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


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

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


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

> 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. Больше ничего не потребуется, все пишете, как обычно.


 
Cobalt ©   (2002-09-18 12:56) [6]


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

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2002.09.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
14-98340
*****
2002-09-03 10:23
2002.09.30
HelpScrible


3-97959
maxim2
2002-09-09 09:54
2002.09.30
Как поставить фильтр


3-97991
Spooky
2002-09-09 12:54
2002.09.30
SQL-запрос из двух БД


14-98315
ArtArt
2002-09-04 19:10
2002.09.30
HELP!!!


14-98269
Esu
2002-09-03 13:57
2002.09.30
.NET forever ;)