![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Showmodal [D7, WinXP]
Vilux © (2004-07-21 07:41:00)Такая проблема - вызываю форму методом Showmodal, чтобы она постоянна была активна, в методе OnActivate этой формы делаю некоторые операции, но потом не могу закрыть форму. Т.е.
procedure TWaitF.FormActivate(Sender: TObject);
begin
...
...
...
Close;
end;
не работает :( форма все-равно висит на экране, Close не срабатывает. Как быть?
CTAPbIi (2004-07-21 12:09:00) [1]http://www.delphimaster.ru/cgi-bin/forum.pl?id=1089804769&n=0
Space Hunter (2004-07-21 11:53:00) [2]Делай всю обработку в главной форме. Вот пример:
procedure MainForm.Processing;
begin
ProgressForm := TProgressForm.Create(Self);
try
ProgressForm.Show;
// Здесь делаем обработку, периодически обращаясь к
// ПрогрессБару:
ProgressForm.ProgressBar.Position := xx;
ProgressForm.ProcessMessages;
...
finally
ProgressForm.Free;
end;
end;
Еще на ProgressForm можна (и даже нужно) разместить кнопку с возможностью прерывания процесса пользователем.
Ну что-то типа того...
Vilux (2004-07-21 09:27:00) [3]Спасибо, реализовал через PostMessage, вроде то, что надо...
Vilux (2004-07-21 09:14:00) [4]Народ, да я понял, что не надо закрывать в OnActivate, но где тогда? В OnShow тоже не работает Close... Может тогда посоветуете, как мне сделать, чтобы форма висела поверх главной формы, чтобы на ней можно было менять индикатор прогресса, а когда надо - закрыть...и чтобы в этот момент, пока она висит, была только она активна.
Anatoly Podgoretsky (2004-07-21 09:11:00) [5]Vilux (21.07.04 08:55) [7]
Чтобы форма показалась, требуются что бы до конца отработали обработчики событий OnActivate/OnShow - это можно обеспечить двумя путями
1. поставить на форму таймер с небольшой задержкой и в его обработчике выполнить необходимые расчеты и индикацию
2. послать самому себе сообщение функцией PostMesssge и в его обработчики выполнить всю работы.
В однои из выше указаных обработчив можешь последним действием закрыть форму. А вот насчет кнопок это не совсем верно, может произойти какая либо проблема и форма останется подвисшей и будет снимать задачу комбинацией из трех пальцев.
Vilux (2004-07-21 09:07:00) [6]Anatoly Podgoretsky, как это не нужна? Там индикатор процесса отображается...
Reindeer Moss Eater (2004-07-21 09:07:00) [7]даже просто Close не работает
не закрывай форму в OnActivate
Anatoly Podgoretsky (2004-07-21 08:55:00) [8]Vilux (21.07.04 07:41)
Тебе вообще не нужна форма
Vilux (2004-07-21 08:55:00) [9]Да в теле я могу вообще ничего не писать, как указал выше, даже просто Close не работает. Тогда вопрос, а где мне это писать? Чтобы и форма показалась окончательно и закрылась потом? На форме нет никаких кнопок, она просто должна показывать индикатор прогресаа,а когда вычисления закончатся, она должна закрыться. Вместо ... как раз идут вычисления, а на форме отображается прогресс, но потом форма не закрывается. В каком событии тогда ее закрывать?
Reindeer Moss Eater (2004-07-21 08:28:00) [10]не закрывай форму в OnActivate
HanIP (2004-07-21 08:24:00) [11]Напиши что ты пишешь в теле
procedure TWaitF.FormActivate(Sender: TObject);
begin
...
...
...
Close;
end;
Alx2 (2004-07-21 08:22:00) [12]В Activate не получится
Vilux (2004-07-21 08:17:00) [13]пробовал даже так...
procedure TWaitF.FormActivate(Sender: TObject);
begin
modalresult:=mrOk;
close;
end;
Не работает... форма не закрывается.
Alx2 (2004-07-21 07:55:00) [14]ModalResult := ....