Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
ВнизЗакрытие модальной формы. Найти похожие ветки
← →
CTAPbIi (2004-07-14 15:32) [0]Из основной формы приложения я открываю модальную форму по методу
Form2.ShowModal. В событии OnActivate модальной формы я запускаю некий процесс (получение файлов по FTP), по окончании которого форма должна закрываться без вмешательства пользователя. Но использование Form2.Close не приводит к закрытию формы. Я вышел из положения, поставив на форму таймер, включив его по окончании моего процесса и в событии OnTimer закрываю форму. Однако, скорее всего есть более простое и нормальное решение вопроса. Подскажите, если есть. Спасибо
← →
Reindeer Moss Eater © (2004-07-14 15:33) [1]ModalResult := mr....;
← →
KSergey © (2004-07-14 15:49) [2]> CTAPbIi (14.07.04 15:32)
> Но использование Form2.Close не приводит к закрытию формы.
Чета обман какой-то.. код, плиз
← →
CTAPbIi (2004-07-14 15:52) [3]Не помогает, писал я ModalResult := mrOk. Но ничего не происходит. Форма остается открытой
← →
CTAPbIi (2004-07-14 15:53) [4]
procedure TForm2.FormActivate(Sender: TObject);
begin
.....
Form2.Close;
end;
← →
Reindeer Moss Eater © (2004-07-14 15:55) [5]Опять нагромождение взаимозависимых обработчиков событий и других подпорок там, где нужен линейный алгоритм безо всяких событий.
← →
CTAPbIi (2004-07-14 15:58) [6]
> Reindeer Moss Eater © (14.07.04 15:55) [5]
> Опять нагромождение взаимозависимых обработчиков событий
> и других подпорок там, где нужен линейный алгоритм безо
> всяких событий.
А можно, пожалуйста, немного поконретнее, что не так и как нужно сделать
← →
KSergey © (2004-07-14 16:01) [7]А, ну это да
В FormActivate это дело не срабатывает
Советую сделать так (я так всегда делаю; в коде могут быть очепятки):interface
TForm2 = class(TForm)
...
procedure WMUser (var Msg: TMessage); message WM_USER;
...
end;
implementation
procedure TForm2.WMUser (var Msg: TMessage);
begin
// собственно код, который выполняется после отображения формы
...
// ну и закрыть форму по окончании
Close; // никакое Form2 тут уже не надо!!)
end;
procedure TForm2.FormActivate (...);
begin
// покласть в конец очереди себе сообщение для старта собственного действия
PostMessage (Handle, WM_USER, 0, 0);
end;
← →
Reindeer Moss Eater © (2004-07-14 16:02) [8]А можно, пожалуйста, немного поконретнее, что не так и как нужно сделать
не нужно пытаться закрыть форму пока FTP синхронно качает файл.
нужно после того.
← →
CTAPbIi (2004-07-14 16:08) [9]> Reindeer Moss Eater © (14.07.04 16:02) [8]
Я и так закрывал форму после этого. И FTP тут не причем. Так как не срабатывает и без всякого FTP.
> KSergey © (14.07.04 16:01) [7]
Спасибо, все сработало. А то, что Form2 не надо писать, это я знаю. :-) (Но оно и не мешает)
← →
VMcL © (2004-07-14 16:30) [10]>>KSergey © (14.07.04 16:01) [7]
Зачем WM_USER? Можно сразуPostMessage (Handle, WM_CLOSE, 0, 0)
, если не ошибаюсь.
← →
CTAPbIi (2004-07-14 16:46) [11]Да, можно и сразу. Спасибо
← →
CTAPbIi (2004-07-14 16:49) [12]Кстати, а как объяснить, что Close не закрывает форму (немодальную закрывает), и надо действовать через PostMessage?
← →
KSergey © (2004-07-14 18:10) [13]> [10] VMcL © (14.07.04 16:30)
> >>KSergey © (14.07.04 16:01) [7]
>
> Зачем WM_USER? Можно сразу PostMessage (Handle, WM_CLOSE,
> 0, 0), если не ошибаюсь.
В принципе оно конечно да. Вначале я так и зхотел написать.
Однако, а вдруг вызовем пресловутое ProcessMessages? Я, правда, не совсем уверен, закроет ли это форму или WM_CLOSE просто пропадет из очереди (а может и вообще все пройдет гладко, если в ProcessMessages WM_CLOSE не прокидывается), проверять надо.
Но мне мой вариант нравится больше, как-то однозначнее все... Однако аргументировать не смогу, если только с WM_CLOSE не возникет каких-либо проблем в случае применения ProcessMessages.
← →
KSergey © (2004-07-14 18:12) [14]> [12] CTAPbIi (14.07.04 16:49)
> Кстати, а как объяснить, что Close не закрывает форму (немодальную
> закрывает),
Закрывает, отменно
Но не в FormCreate и не в FormActivate, и не в FormShow.
Короче только после прогона всех сообщений, характерных для создания виндовского окна.
← →
Piter © (2004-07-14 22:38) [15]Странно что никто не заметил...
Я вот че подумал... какого хрена автору топика нужна такая форма? Она не успевает появится на экран как тут же зависает (ясен пень, что прием у него реализован с помощью блокирующих сокетов), а как только отвиснет - тут же закрывается... и нафига такая красивая форма нужна? :)
← →
KSergey © (2004-07-15 09:50) [16]> [15] Piter © (14.07.04 22:38)
Обычная заставка "Не мешайте... программа выполняет важную работу..."
← →
Piter © (2004-07-15 14:21) [17]KSergey © (15.07.04 9:50) [16]
ни фига. Пересылка то осуществляется в блокирующем режиме, значит, не будет времени даже обработать WM_PAINT, то есть форма просто зависнет. Ты не увидешь на ней ничего... так, может быть очертания формы максимум...
← →
Anatoly Podgoretsky © (2004-07-15 14:24) [18]А что тут форма то делает?
← →
CTAPbIi (2004-07-15 14:44) [19]Ничего не зависает. На форме отображается статус пересылки файлов по FTP. Но поскольку команда на это выдается из основной формы, то соединение и передачу информации я поместил в Activate модальной формы. Сейчас все работает, все отображается и ничего не зависает
← →
CTAPbIi (2004-07-15 14:47) [20]То есть, действительно, визульно форма выполняет роль заставки (правда не статической, а динамической). Но между событием Activate и закрытием формы выполняются FTP операции.
← →
Piter © (2004-07-18 20:49) [21]CTAPbIi (15.07.04 14:44) [19]
На форме отображается статус пересылки файлов по FTP. Но поскольку команда на это выдается из основной формы, то соединение и передачу информации я поместил в Activate модальной формы. Сейчас все работает, все отображается и ничего не зависает
чего-то ты не то говоришь. Недоговариваешь. Если ты поместил передачу информации в OnActivate и выполнение кода не выходит за пределы данной процедуры - то значит сокеты блокирующие и никакого обновления статуса не будет.
В общем, приведи код, который у тебя в OnActivate - с этого вообще надо было начинать, а не страдать фигней с postmessage
← →
Piter © (2004-07-21 01:04) [22]Ну так что? :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.038 c