Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

Как закрыть форму из ее же метода ?   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.038 c
4-1128553402
П7
2005-10-06 03:03
2005.12.11
WinProc = метод класса. Как?


5-1116325152
Rep
2005-05-17 14:19
2005.12.11
Компонент для работы с базами данных DataSet или DataSource?


2-1133163208
312Kbps
2005-11-28 10:33
2005.12.11
idHTTP , Помогите новичку ))))


11-1113674934
Dot
2005-04-16 22:08
2005.12.11
VCL, KOLForm & uses mirror


2-1133180011
Oni
2005-11-28 15:13
2005.12.11
Вызов функции из модуля, в TurboPascal e





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский