Главная страница
    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.036 c
3-1083135076
AVP_opck
2004-04-28 10:51
2004.05.23
как из TDBGridEh выгрузить данные в текстовый файл.


4-1080457228
Navi
2004-03-28 11:00
2004.05.23
Извлечь иконку по расширению


1-1084260941
Mameluke
2004-05-11 11:35
2004.05.23
Управление работой MS Word из Delphi


8-1079027238
max003
2004-03-11 20:47
2004.05.23
Подскажите как можно просмотреть этот файл...


1-1083417556
Lena19
2004-05-01 17:19
2004.05.23
текст разными цветами и шрифтом + bitmap





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский