Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Странный зависон приложения :( [D7, XP]


Страницы:   1 2

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


А это-то зачем, если форма будет визуализироваться тобой искл-но модально ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо