Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.032 c
2-1133023023
komsomolec
2005-11-26 19:37
2005.12.11
Как проиграть звук определённой частоты


2-1132814923
tytus
2005-11-24 09:48
2005.12.11
Снова Paskal


14-1132696208
Separator
2005-11-23 00:50
2005.12.11
Интересное мнение о форуме


14-1132162975
Knight
2005-11-16 20:42
2005.12.11
Вопрос к владельцам Nokia 6100... у кого есть прошивка?


8-1121002140
Дмитрий Белькевич
2005-07-10 17:29
2005.12.11
Быстрый сдвиг массива точек на дробное значение точек.