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

Вниз

Showmodal   Найти похожие ветки 

 
Vilux   (2004-07-21 07:41) [0]

Такая проблема - вызываю форму методом Showmodal, чтобы она постоянна была активна, в методе OnActivate этой формы делаю некоторые операции, но потом не могу закрыть форму. Т.е.

procedure TWaitF.FormActivate(Sender: TObject);
begin
 ...
 ...
 ...
 Close;
end;

не работает :( форма все-равно висит на экране, Close не срабатывает. Как быть?


 
Alx2 ©   (2004-07-21 07:55) [1]

ModalResult := ....


 
Vilux   (2004-07-21 08:17) [2]

пробовал  даже так...
procedure TWaitF.FormActivate(Sender: TObject);
begin
 modalresult:=mrOk;
 close;
end;
Не работает... форма не закрывается.


 
Alx2 ©   (2004-07-21 08:22) [3]

В Activate не получится


 
HanIP   (2004-07-21 08:24) [4]

Напиши что ты пишешь в теле
procedure TWaitF.FormActivate(Sender: TObject);
begin
...
...
...
Close;
end;


 
Reindeer Moss Eater ©   (2004-07-21 08:28) [5]

не закрывай форму в OnActivate


 
Anatoly Podgoretsky ©   (2004-07-21 08:55) [6]

Vilux   (21.07.04 07:41)  
Тебе вообще не нужна форма


 
Vilux   (2004-07-21 08:55) [7]

Да в теле  я могу вообще ничего не писать, как указал выше, даже просто Close не работает. Тогда вопрос, а где мне это писать? Чтобы и форма показалась окончательно и закрылась потом? На форме нет никаких кнопок, она просто должна показывать индикатор прогресаа,а когда вычисления закончатся, она должна закрыться. Вместо ... как раз идут вычисления, а на форме отображается прогресс, но потом форма не закрывается. В каком событии тогда ее закрывать?


 
Vilux ©   (2004-07-21 09:07) [8]

Anatoly Podgoretsky, как это не нужна? Там индикатор процесса отображается...


 
Reindeer Moss Eater ©   (2004-07-21 09:07) [9]

даже просто Close не работает

не закрывай форму в OnActivate


 
Anatoly Podgoretsky ©   (2004-07-21 09:11) [10]

Vilux   (21.07.04 08:55) [7]
Чтобы форма показалась, требуются что бы до конца отработали обработчики событий OnActivate/OnShow - это можно обеспечить двумя путями
1. поставить на форму таймер с небольшой задержкой и в его обработчике выполнить необходимые расчеты и индикацию
2. послать самому себе сообщение функцией PostMesssge и в его обработчики выполнить всю работы.

В однои из выше указаных обработчив можешь последним действием закрыть форму. А вот насчет кнопок это не совсем верно, может произойти какая либо проблема и форма останется подвисшей и будет снимать задачу комбинацией из трех пальцев.


 
Vilux ©   (2004-07-21 09:14) [11]

Народ, да я понял, что не надо закрывать в OnActivate, но где тогда? В OnShow тоже не работает Close... Может тогда посоветуете, как мне сделать, чтобы форма висела поверх главной формы, чтобы на ней можно было менять индикатор прогресса, а когда надо - закрыть...и чтобы в этот момент, пока она висит, была только она активна.


 
Vilux ©   (2004-07-21 09:27) [12]

Спасибо, реализовал через PostMessage, вроде то, что надо...


 
Space Hunter   (2004-07-21 11:53) [13]

Делай всю обработку в главной форме. Вот пример:

procedure MainForm.Processing;
begin
 ProgressForm := TProgressForm.Create(Self);
 try
   ProgressForm.Show;
   // Здесь делаем обработку, периодически обращаясь к
   // ПрогрессБару:
   ProgressForm.ProgressBar.Position := xx;
   ProgressForm.ProcessMessages;
   ...
 finally
   ProgressForm.Free;
 end;
end;

Еще на ProgressForm можна (и даже нужно) разместить кнопку с возможностью прерывания процесса пользователем.

Ну что-то типа того...


 
CTAPbIi   (2004-07-21 12:09) [14]

http://delphimaster.net/view/1-1089804769/



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

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

Наверх




Память: 0.49 MB
Время: 0.044 c
4-1087385868
Regis
2004-06-16 15:37
2004.08.01
LPT в Win2k


14-1089373794
_DS
2004-07-09 15:49
2004.08.01
Библиотека


1-1090223846
DDDeN
2004-07-19 11:57
2004.08.01
Сложение даты/времени


1-1089955222
BillyJeans
2004-07-16 09:20
2004.08.01
Рамка вокруг TEdit....


14-1089444972
Inkognito
2004-07-10 11:36
2004.08.01
сертификация на Brainbench