Форум: "Основная";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
ВнизУход модальных форм на задний план Найти похожие ветки
← →
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 вся ветка
Форум: "Основная";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.038 c