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

Вниз

MDI. Несколько копий одной формы. Как обрабатывать события?   Найти похожие ветки 

 
Leech   (2004-03-09 19:07) [0]

В общем, имеется MDI-приложение. Запущено несколько копий одной формы. Допутим, у меня происходит какое-либо событие у какого-либо экземпляра формы, и я пытаюсь получить Caption этой формы... Но я получу Caption последней созданной формы, а не той, на которой произошло событие... Как правильно справиться с этой проблемой?
Заранее спасибо...


 
Тимохов ©   (2004-03-09 19:09) [1]


> Но я получу Caption последней созданной формы

откуда такая уверенность.

Как получаете caption?


 
Плохиш   (2004-03-09 19:12) [2]

Больше интересует вопрос: Куда получает?


 
Gero ©   (2004-03-09 19:14) [3]

В обработчике события: TForm(Sender).Caption


 
Тимохов ©   (2004-03-09 19:15) [4]


>
> Gero ©   (09.03.04 19:14) [3]

А почему просто caption нельзя использовать? На фига sender?


 
Leech   (2004-03-09 19:17) [5]

2 Тимохов ©
 Странный вопрос... проверял, естессно...

Пробовал сделать чё-нидь типа ShowMessage(MyForm.Caption);

На самом деле разобрался - нужно вызывать ShowMessage(Caption);

Но чудеса с таймером творяться... Я так понял, что работает ОДИН таймер на ВСЕ формы, а не на каждой - свой...


 
Тимохов ©   (2004-03-09 19:18) [6]


> Но чудеса с таймером творяться... Я так понял, что работает
> ОДИН таймер на ВСЕ формы, а не на каждой - свой...

ерунда


 
Gero ©   (2004-03-09 19:21) [7]

Тимохов ©   (09.03.04 19:15) [4]

Это смотря где находится обработчик.
Может это метод главной формы.


 
Тимохов ©   (2004-03-09 19:26) [8]


> Gero ©   (09.03.04 19:21) [7]

Вопрос был про копии одной формы...


 
Leech   (2004-03-09 19:29) [9]

2 Gero ©
 Нет, на той же форме...

Хорошо, попробую привести код...

type
 TMyAction = record
   GlobalTimer  :Word;
   WhatAction   :string[250];
 end;
...

procedure SomeProcedure (событие формы)
begin
...
 MyAction.WhatAction := "Close";
 MyAction.GlobalTimer := 5;
...
end;

procedure TFormTransport.Timer1Timer(Sender: TObject);
begin
// нужно, чтобы форма закрывалась не сразу, а через 5 сек.
 if MyAction.WhatAction = "Close" then
   begin
     dec(MyAction.GlobalTimer);
     if MyAction.GlobalTimer = 0 then
       begin
         ...
         Close;
       end;
   end;
end;


ПОЧТИ всё в порядке, но дело в том, что на других экземплярах формы тоже срабатываем таймер, только отсчет идет не с 5 сек., а с максимального значения переменной типа Word...


 
Плохиш   (2004-03-09 19:34) [10]

>Leech   (09.03.04 19:29) [9]

Ну дык, таймер надо параметрировать и запускать при нажатии на кнопку


 
Leech   (2004-03-09 19:37) [11]

Неа, не так.. я разобрался...
Я объявление     MyAction :TMyAction; вставил после VAR, перед implementation... А нужно было в приват:

 private
   { Private declarations }
   MyAction      :TMyAction;


 
Юрий Зотов ©   (2004-03-09 20:35) [12]

> Leech

Естественно. У Вас же таймер получился на каждой форме свой, а вот переменная MyAction - обшая для всех. Отсюда и взаимное влияние.

Эту переменную тоже надо сделать своей для каждой формы. То есть - полем формы.



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

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

Наверх




Память: 0.49 MB
Время: 0.025 c
11-1057512455
Ajax
2003-07-06 21:27
2004.03.28
Смена языка интерфейса


8-1069395228
Коляныччч
2003-11-21 09:13
2004.03.28
DelphiX AlphaDraw


8-1068910424
Artur
2003-11-15 18:33
2004.03.28
Image. (Rotate)


1-1079003717
3asys
2004-03-11 14:15
2004.03.28
Определение компонента, над которым находится курсор мыши.


9-1062764173
cyborg
2003-09-05 16:16
2004.03.28
Гамма