Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.03 c