Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 := ....


Наверх

Титульная страница Поиск, карта сайта Написать письмо