Текущий архив: 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