Форум: "Основная";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
ВнизПроблема с модальными окнами! Найти похожие ветки
← →
kull (2003-10-17 14:35) [0]Есть главная форма, на ней кнопка, вот обработчик:
procedure TForm1.Button1Click(Sender: TObject);
begin
Sleep(20000);
Application.MessageBox("test","test",MB_OK);
end;
Если, после нажатия на эту кнопку попытаться свернуть главное окно, то после долгих усилий оно сворачивается.
Но когда появляется MessageBox, то он не модальный.
Причем это наблюдалось на WinXP и Win2000.
Если после долгой обработки чего-либо надо вывести модальное окно, то полная лажа получается.
Кто подскажет, как с этим бороться?
← →
Song (2003-10-17 14:46) [1]А почему собственно окно после MessageBox() должно стать модальным ?
← →
kull (2003-10-17 15:09) [2]
> Song © (17.10.03 14:46) [1]
Где у меня слово "После"?
Не главное окно, а MessageBox не модальное!
← →
Song (2003-10-17 15:13) [3]Читай хэлп, дорогой товарисч, там всё есть.
← →
Wizard_Ex (2003-10-17 15:20) [4]Кстати, такая ерунда бывает в XP,
Такое бывает когда в XP включены визуальные стили и происходят длительные операции.
Такое впечатление диалог становиться модальным относительно чего-то другого или иногда он появляется, НО только под формой.
Как побороть не знаю
← →
kull (2003-10-17 15:26) [5]
> Song © (17.10.03 15:13) [3]
Или ты меня не понял "дорогой товарисч", или одно из двух.
Если не в лом, то попробуй примерчик:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
Sleep(20000);//В это время пытаемся свернуть окно
//окно сообщения не модальное!
Application.MessageBox("test","test",MB_OK);
end;
end.
И ты будешь сильно удивлен...
← →
Song (2003-10-17 15:28) [6]Ты мне скажи почему ты решил что в данном случае MessageBox() должен быть модельным ?
← →
kull (2003-10-17 15:37) [7]
> Song © (17.10.03 15:28) [6]
А если главная форма не может получить фокус пока не нажата кнопка Ok на MessageBox, и функиция MessageBox() не возвращает управления пока не нажата кнопка Ok, то какое по твоему окно сообщения?
← →
Song (2003-10-17 15:42) [8]Ты не догоняешь.
А почему ты решил, что MessageBox должен быть модальнм ?
Модальным - по отношению к остальным окнам или по отношению к себе?
К остальным окнам - это когда не можешь перейти к другим окнам, в т.ч. к окнам других приложений пока не нажмёшь Ок. Модальным по отношению к себе - это когда выполнение программы не продолжится, пока не нажмёшь Ок. Какой вариант тебя интересует?
Если второй, то это получается что MessageBox() не вызывается вообще.
← →
Василиск (2003-10-17 15:44) [9]MessageBox надо вызывать относительно формы, а не Application:
MessageBox(Form.Handle, .......);
← →
kull (2003-10-17 15:50) [10]
> Song © (17.10.03 15:42) [8]
Ну вот упрямые люди какие... Вы вообще заметили строку
Sleep(20000)?
Если без нее то MessageBox - почему-то модальное окно.
Я же не конкретно про MesageBox а вообще про модальные окна.
Следующий код приводит к аналогичному эффекту:
procedure TForm1.Button1Click(Sender: TObject);
begin
Sleep(20000);
With TForm1.Create(Application) do
begin
ShowModal;
Free;
end;
end;
Нус....
← →
kull (2003-10-17 15:52) [11]Message Box - МОДАЛЬНОЕ ПО ОТНОШЕНИЮ К ГЛАВНОЙ ФОРМЕ ПРИЛОЖЕНИЯ (Form1 - если кто не понял).
← →
kull (2003-10-17 17:58) [12]Все, решил проблему!
Василиск был близок к истине.
Просто в реализации метода Application.MessageBox в WinAPI-шную функцию MessageBox передается Application.Handle
А если вызвать
Windows.MessageBox(Handle, "test","test",0);
здесь Handle - это хэндл формы.
PS: И почему когда люди получают ярлычек мастера, они начинают думать что все знают?...
← →
Mikhail (2003-10-17 18:16) [13]Ставлю всем пять :))
← →
Song (2003-10-19 23:03) [14]2kull
Ну так ты бы объяснил чего да как, а то твой вопрос можно был понять, почему именно мой MessageBox и именно в этом месте программы немодален. Давно бы привёл пример с TForm и давно была бы помощь.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c