Текущий архив: 2005.12.11;
Скачать: CL | DM;
ВнизКак закрыть форму из ее же метода ? Найти похожие ветки
← →
Juice © (2005-11-22 10:04) [0]Как это правильно сделать, и возможно ли правильно это сделать ? При вызове Self.Close вызывается PostMessage(Handle, CM_RELEASE, 0, 0), и получается, что если до выхода из метода где был вызван Close поток отвечающий за очередь сообщений прочитает эту очередь то произойдет сбой. Как выйти из этой ситуации ? Есть у меня на уме варианты через "Ж", типа таймер положить на другую форму и тому подобное. Может что-то подскажите ?
← →
Digitman © (2005-11-22 10:14) [1]см. TCustomForm.Release
← →
evvcom © (2005-11-22 10:21) [2]
> что если до выхода из метода где был вызван Close поток
> отвечающий за очередь сообщений прочитает эту очередь
А ты еще и в другом потоке Close вызываешь? Так, прекращай работу в этом постороннем потоке.
← →
Juice © (2005-11-22 10:28) [3]
> см. TCustomForm.Release
Сказки они там в хэлпе пишут. Во-первых метод Close как раз и вызывает внутри себя Release, а тот в свою очередь постит сообщение CM_RELEASE.
Вот такой код приводит к Access violation после ProcessMessages:
begin
...
Self.Release;
Application.ProcessMessages;
end;
Вот такой код работает нормально:
begin
...
Self.Release;
...До конца метода ProcessMessages не вызывается...
end;
Наверное этого не избежать. Спасибо за ответ.
← →
Juice © (2005-11-22 10:31) [4]
> > что если до выхода из метода где был вызван Close поток
>
> > отвечающий за очередь сообщений прочитает эту очередь
>
>
> А ты еще и в другом потоке Close вызываешь? Так, прекращай
> работу в этом постороннем потоке.
Поток один, точне их много но в этой кухне учавствует только главный.
← →
Digitman © (2005-11-22 10:39) [5]
> Вот такой код приводит к Access violation после ProcessMessages
ну на кой ляд ProcessMessages-то вызывать в данном контексте ? поясни свою глубокую мысль ..
← →
Плохиш © (2005-11-22 11:03) [6]
> Juice © (22.11.05 10:28) [3]
>
> > см. TCustomForm.Release
>
> Сказки они там в хэлпе пишут.
Всё там правильно пишут, просто некоторые читать не умеют.
> Вот такой код приводит к Access violation после ProcessMessages
И этот случай описан. Слово "before" перевести?
← →
Anatoly Podgoretsky © (2005-11-22 11:07) [7]Метод Release не является заменителем метода Close
← →
Juice © (2005-11-22 11:35) [8]
> ну на кой ляд ProcessMessages-то вызывать в данном контексте
> ? поясни свою глубокую мысль ..
Мысль глубокая, согласен :) В метода формы1 я создаю форму2 (вдвоем они образуют диалог - т.е. сначала одна видна, потом вторая), создав ее выполняю длительные манипулции с интерфейсом - порядка двух секунд. В это время отображается прогрессбар. Вот в этом эпизоде чтобы юзер увидел не два зависших окна а бегущий прогрессбар мне нужно обрабатывать очередь сообщений. Это аргумент ? Да, конечно ведь никто не мешает сделать вызов Self.Close после инициации второй формы, что я и сделал, но в конертной ситуации (ест еще несколько моментов) было бы удобнее сделать сам вызов до этого.
> Плохиш © (22.11.05 11:03) [6]
Release returns immediately to the caller. It does not wait for the form to be freed before returning.
Больше слова before не встречал. Какое это отношение к теме имеет ? В хэлпе по сабжу толком нефига не сказано.
← →
Juice © (2005-11-22 11:36) [9]
> Anatoly Podgoretsky © (22.11.05 11:07) [7]
> Метод Release не является заменителем метода Close
Самое точное высказывание, давайте на нем остановимся.
← →
Плохиш © (2005-11-22 11:40) [10]
> Juice © (22.11.05 11:35) [8]
> Больше слова before не встречал.
Я не знаю как в твоей версии хелпа, а в моей написано, что будут выполнены все сообщения, находящиеся в очереди сообщений до вызова release. А как этот текст в твоём хелпе выглядит мне глубоко фиолетово.
> было бы удобнее сделать сам вызов до этого
Представляешь, тебе отрезали язык, а потом заставили петь.
← →
Juice © (2005-11-22 11:47) [11]
> Я не знаю как в твоей версии хелпа, а в моей написано, что
> будут выполнены все сообщения, находящиеся в очереди сообщений
> до вызова release. А как этот текст в твоём хелпе выглядит
> мне глубоко фиолетово.
Ну и правильно что фиолетово, не хватало чтобы ты еще моим хэлпом грузился :) Самое главное что мне тоже фиолетово, причем фиолетово не как у тебя написано а как у меня, ибо к теме вопроса это совершенно не имеет никакого отношения.
> Представляешь, тебе отрезали язык, а потом заставили петь.
Представь, тебе отрезали кое-что другое, а потом заставили ...
← →
Digitman © (2005-11-22 12:03) [12]
> чтобы юзер увидел не два зависших окна а бегущий прогрессбар
> мне нужно обрабатывать очередь сообщений. Это аргумент ?
>
нет, не аргумент.
для обновления прогресс-бара достаточно вызвать его метод Update
Страницы: 1 вся ветка
Текущий архив: 2005.12.11;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.044 c