Форум: "Основная";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];
ВнизОбработчик событий в другом модуле. Как сделать? Найти похожие ветки
← →
Новенький в Делфи (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c