Вниз
Скачать: CL | DM;

Уход модальных форм на задний план   Найти похожие ветки 

← →
Sam Stone ©   (2006-12-25 19:10) [0]

Немного корявенькое название, но все же ) Периодически вылезает такой глюк - модальная формочка или ShowMessage "проваливается" за форму. Возникает предположительно при больших тормозах компа в общем (пример: нажатие на кнопку б1 на форме Ф1 вызывает модальное окно Ф2. Нажимаем на кнопку и тут же тыкаем по Ф1 и при наличии тормозов модальная форма может уйти "назад", в результате Ф1 задисейблена и ничего сделать нельзя), и если программа чего-нибудь много считает :). Вытащить форму/сообщение можно альт-табом на другую программу - по возвращении модал.форма вылезает наверх. Собсна как бы такой гадости избежать?


← →
Правильный Вася   (2006-12-26 15:27) [1]

у меня та же фигня
как ее бороть?


← →
novill ©   (2006-12-26 16:30) [2]

+1
похоже никто не знает (


← →
Sam Stone ©   (2006-12-26 18:46) [3]

коллективным разумом на работе решили, что это багоглюка вцл ) Но лечить все-таки надо )


← →
ors_archangel ©   (2006-12-26 19:32) [4]

Не получилось повторить, но может

 enabled := false;
 showmessage("modal");
 enabled := true;

поможет, скажите, если да


← →
EvChul ©   (2006-12-27 09:55) [5]

Вдобавок, похоже, что в момент глюка, поверх этих форм должно находится окно другого приложения. Глюк редкий и трудновоспроизводимый.

Кац предлагает сдаться (с)


← →
Darvin ©   (2006-12-27 10:59) [6]

Иногда бывает такое. Обычно перезапуск программы спасает.


← →
EvChul ©   (2006-12-27 11:39) [7]

> [6] Darvin ©   (27.12.06 10:59)

Зачем перезапуск? Alt + Tab и все дела.


← →
cr3at0r   (2006-12-27 14:46) [8]

Не проверял, но думается должно помочь


procedure TfrmModal.FormShow(Sender: TObject);
begin
   BringToFront;
end;  


← →
Правильный Вася   (2006-12-27 15:24) [9]

cr3at0r   (27.12.06 14:46) [8]
И где ты это вопхнешь в MessageDlg?


← →
Sam Stone ©   (2006-12-27 18:45) [10]

> [7] EvChul ©   (27.12.06 11:39)

Ага...
Заказчик: а че это форма недоступна/где диалоговое окошко?
Программист: да это глюк, модальная форма провалилась, вы альт-табнитесь на другое окно, потом обратно - и вам будет счастье.


← →
Yozch1   (2006-12-27 22:02) [11]

+1
Мдас,  тоже хотелось бы просечь в чем-таки фишка....


← →
easy ©   (2006-12-28 12:42) [12]

воспроизведение глюка
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;
const
WM_MSGBOX  = WM_USER + 1;
type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
   procedure msgBoxShow(var msg: TMessage); message WM_MSGBOX;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 PostMessage(handle, WM_MSGBOX, 0, 0);
 showmessage("modal");
end;

procedure TForm1.msgBoxShow(var msg: TMessage);
begin
 SetForegroundWindow(handle);
end;

end.


← →
easy ©   (2006-12-28 12:43) [13]

возможно, так вылечится -
procedure TForm1.msgBoxShow(var msg: TMessage);
var
 msgbHandle: HWND;
begin
 msgbHandle := GetActiveWindow;
 if msgbHandle <> 0 then
   SetForegroundWindow(msgbHandle);
end;


← →
Sam Stone ©   (2006-12-28 14:04) [14]

> [13] easy ©   (28.12.06 12:43)

это получается надо делать PostMessage перед ShowMessage?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.029 c
1-1166876720
i-am-vladko
2006-12-23 15:25
2007.02.18
кодировка


2-1170317335
-John-Doe-
2007-02-01 11:08
2007.02.18
Как удалить секцию из ini- файла?


2-1169891947
Muchacho123
2007-01-27 12:59
2007.02.18
MultiSelect в OpenDialog


15-1169943912
MikePetrichenko
2007-01-28 03:25
2007.02.18
И снова о плагиате


3-1164260869
ValexWeb
2006-11-23 08:47
2007.02.18
Как с помощью компоненты TABLE узнать номер текущей отображаемой




   Наверх