Главная страница
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.021 c
3-1077783340
Mamed
2004-02-26 11:15
2004.03.28
SQL Transaction(SQlServer 2000)


1-1078587931
mak_other_user
2004-03-06 18:45
2004.03.28
Форматирование тектового файла.


4-1073657446
txt
2004-01-09 17:10
2004.03.28
Не перерисовывается график! в Bitmap


1-1078828862
Ozone
2004-03-09 13:41
2004.03.28
Странное поведение программы


14-1077808466
Mentov
2004-02-26 18:14
2004.03.28
Формат передачи логина/пароля в прокси HTTP