Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

Создание модального окна   Найти похожие ветки 

 
Andery   (2004-04-05 13:39) [0]

Здравствуйте!
Мне нужно создать диалоговое модальное окно, которое спросит что-то там у польователя и потом функция, с помощью которой вызвали это окно вернет то, что ответи пользователь.
Вот у меня такой код:

unit InputBox;

interface

uses
 Windows, Messages;

function ShowInputDlg(const Wnd: HWnd; const Title, Prompt: String): String;

implementation

var
 WC: PWndClassEx;
 Res: Integer;

const
 DLG_CLASS = "INPUTDLG_FORM";

function WndProc(Wnd: HWnd; Msg: Cardinal; wParam, lParam: LongInt): LongInt; stdcall;
begin
 Result := 0;
 case Msg of
   WM_DESTROY, WM_CLOSE: Res := 1;
   else Result := DefWindowProc(Wnd, Msg, wParam, lParam);
 end
end;

function CreateClass: Boolean;
begin
 WC := New(PWndClassEx);
 WC^.cbSize := SizeOf(TWndClassEx);
 WC^.Style := CS_DBLCLKS or CS_SAVEBITS or CS_BYTEALIGNWINDOW;
 WC^.lpfnWndProc := @WndProc;
 WC^.cbClsExtra := 0;
 WC^.cbWndExtra := 0;
 WC^.hInstance := HInstance;
 WC^.hIcon := 0;
 WC^.hCursor := LoadCursor(0, IDC_ARROW);
 WC^.hbrBackground := COLOR_BTNFACE + 1;
 WC^.lpszMenuName := nil;
 WC^.lpszClassName := DLG_CLASS;
 WC^.hIconSm := 0;
 Result := RegisterClassEx(WC^) <> 0;
 Dispose(WC)
end;

function ShowInputDlg(const Wnd: HWnd; const Title, Prompt: String): String;
var
 InputDlg: HWnd;
 Msg: TMsg;
const
 FWidth = 244;
 FHeight = 88;
begin
 Res := 0;
 if not CreateClass then Exit;
 InputDlg := CreateWindowEx(WS_EX_DLGMODALFRAME or WS_EX_WINDOWEDGE,
   DLG_CLASS, PChar(ACaption),
   WS_POPUP or WS_CAPTION or WS_OVERLAPPED or WS_SYSMENU or WS_VISIBLE,
   (GetSystemMetrics(SM_CXSCREEN) - FWidth) div 2,
   (GetSystemMetrics(SM_CYSCREEN) - FHeight) div 2,
   FWidth, FHeight, Wnd, 0, HInstance, nil);

 // Тут дожидаемся, пока окно открыто. Так будет правильно?
 repeat
   GetMessage(Msg, 0, 0, 0);
   TranslateMessage(Msg);
   DispatchMessage(Msg)
 until Res <> 0;

 DestroyWindow(InputDlg);
 UnregisterClass(DLG_CLASS, HInstance);
end;

end.


Как сделать окно модальным, т.е. чтобы первое окно, открывшее это, было недоступным. И как правильно сделать, чтобы функция дождалась закрытия окна?
И все ли я тут правильно сделал?
Заранее спасибо.


 
VMcL ©   (2004-04-05 13:42) [1]

CreateDialog*()
?


 
Suntechnic ©   (2004-04-05 18:56) [2]

>VMcL ©
CreateDialog создает немодальное окно.

>Andery
Обычно так не создают диалоговые окна на Win API. Для этих целей, как правило, используют шаблоны из ресурсов.
Чтобы создать модальное окно по шаблону из ресурса используют DialogBox


 
VMcL ©   (2004-04-05 20:13) [3]

>>>Suntechnic ©  (05.04.04 18:56) [2]

Да. Ошибся.



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

Форум: "WinAPI";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.037 c
14-1083837700
syte_ser78
2004-05-06 14:01
2004.05.23
Исходник текстового окна со скротол


4-1081225444
Sirus
2004-04-06 08:24
2004.05.23
Вызов модальной формы в DLL из DLL...


3-1083316895
Курдль
2004-04-30 13:21
2004.05.23
Апологетам "MS SQL Server" - что там с блокировками записей?


14-1083592275
Piter
2004-05-03 17:51
2004.05.23
Система 2dl.ru


1-1083758373
Дмитрий
2004-05-05 15:59
2004.05.23
Как удалить файл с диска и сохранить в его в корзине?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский