Главная страница
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.018 c
7-98367
SerVS
2002-07-18 23:12
2002.09.30
Адрессная книга Outlook Express


1-98080
Борис
2002-09-19 15:07
2002.09.30
Помогите обратится к компоненту, расположенному на другой форме!


4-98392
oduvan
2002-08-13 17:20
2002.09.30
Не работает посылка сообщения в другую прогу!!!


3-98018
nomshar
2002-09-09 00:01
2002.09.30
Проблемы с TADOQuery.SQL


3-97970
Kolyan!
2002-09-09 10:47
2002.09.30
Можно ли работать с dBase через dbExpress?