![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Странный зависон приложения :( [D7, XP]
b/@. © (2009-06-17 10:20:00)Сделал форму для показа информации о программе и выводе версии.
Эта форма имеет такие особенности:
BorderStyle = bsNone
FormStyle = fsStayOnTop
также имеется таймер, для закрытия формы по интервалу
procedure TAbout.TimerTimer(Sender: TObject);
begin
Button.Click();
end;
procedure TAbout.ButtonClick(Sender: TObject);
begin
Release();
end;
и так как форма не имеет заголовка, то сделан обработчик для того, чтобы форму можно было двигать
procedure TAbout.WMNCHitTest(var Message: TWMNCHitTest);
begin
Message.Result := HTCAPTION;
end;
Но вот в чём загвоздка, когда я вывожу формуTAboutпоShowModal();и ничего не нажимаю, или нажимаю только на кнопку, то всё отрабатывает нормально.
Но если после показа модальной формы я начинаю интенсивно таскать её мышкой по экрану, то получаю ексепшн
AV at address 00000000. Read of address 00000000.
и при этом главная форма висит и не принимает фокус, хотя часть сообщений, в часности WM_PAINT отрабатывает.
Складывается такое ощущение, что модальная форма исчезла с экрана, но тем не менее еще не закрыта.
Интуиция подсказала мне, что нужно применитьReleaseCapture();в обработчике таймера.
При этом AV исчезло, но может нужно использовать что-то другое ?
b/@. (2009-06-17 11:09:00) [21]
> Плохиш © (17.06.09 10:50) [3]
> Интересно, и чем Close не угодило?
> Нат © (17.06.09 10:56) [5]
> procedure TMyForm.FormClose(Sender: TObject; var Action:
> TCloseAction);
> begin
> Action:=caFree;
> end;
Это роли не играет. После показа форма мне не нужна, так почему бы не мучать и не удалить :)
Ega23 (2009-06-17 10:59:00) [22]
> Нат © (17.06.09 10:56) [5]
>
> procedure TMyForm.FormClose(Sender: TObject; var Action:
> TCloseAction);
> begin
> Action:=caFree;
> end;
Спорное утверждение. Сильно зависит от того, каким образом вызывается форма.
Нат (2009-06-17 10:56:00) [23]procedure TMyForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;
b/@. (2009-06-17 10:52:00) [24]
> Сергей М. © (17.06.09 10:39) [1]
> > FormStyle = fsStayOnTop
> А это-то зачем, если форма будет визуализироваться тобой искл-но модально?
В этом случае модально, но не всегда...
> Ega23 © (17.06.09 10:47) [2]
> procedure TAbout.ButtonClick(Sender: TObject);
> begin
> ModalResult := mr....; // Например, mrOK
> end;
Эту штуку пробовал, тем более у Button и так высталено mrOk.
Плохиш (2009-06-17 10:50:00) [25]
> procedure TAbout.ButtonClick(Sender: TObject);
> begin
> Release();
> end;
>
Интересно, и чемCloseне угодило?
Ega23 (2009-06-17 10:47:00) [26]
procedure TAbout.ButtonClick(Sender: TObject);
begin
ModalResult := mr....; // Например, mrOK
end;
Сергей М. (2009-06-17 10:39:00) [27]
> FormStyle = fsStayOnTop
А это-то зачем, если форма будет визуализироваться тобой искл-но модально ?