Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
3-97958
PAVELSIN
2002-09-08 19:17
2002.09.30
Имеются клиперовские файлы DBaseIII+ c индексами.


3-97986
Openfire
2002-09-03 09:57
2002.09.30
Как автоматически подставить пароль при логине к БД Paradox?


3-97981
User_OKA2
2002-09-09 14:45
2002.09.30
Имена таблиц или полей как параметры


14-98340
*****
2002-09-03 10:23
2002.09.30
HelpScrible


1-98102
kex86
2002-09-16 02:31
2002.09.30
Ни у кого нет алгоритма поиска в RichEdit е так, чтобы с учетом в





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский