Registriert seit: 1. Feb 2018
3.691 Beiträge
Delphi 11 Alexandria
|
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
26. Mai 2018, 03:21
So ist es dann der letzte Vorgang im alten Fenster danach passiert ja nichts mehr und du hast alles abgearbeitet.
Ich habe da so eine berühmte Vcl Weisheit im Kopf "ein deaktiviertes Fenster kann nicht den Fokus erhalten".
Von daher glaube ich schon das im WM_CREATE des zweiten Window das erste Window erst deaktiviert werden müsste oder irre ich mich da? Das war es als ich meinte das es Sinn ergibt, nun machst Du meine heile Welt kaputt *schmunzel*
Das ist jetzt mein momenter Template Hauptteil, muss nur noch Positionen der Buttons anpassen.
Delphi-Quellcode:
{Fensterfunktion für Fenster 1}
function Wnd1Proc(hWnd1: HWND; uMsg: UINT; wParam: wParam; lParam: LParam):
lresult; stdcall;
var
x, y : integer;
begin
Result := 0;
case uMsg of
WM_CREATE:
begin
{Fenster zentrieren}
x := GetSystemMetrics(SM_CXSCREEN);
y := GetSystemMetrics(SM_CYSCREEN);
MoveWindow(hWnd1, (x div 2) - (Window1Width div 2),
(y div 2) - (Window1Height div 2),
Window1Width, Window1Height, true);
hwndBtnExit := CreateWindowEx(0, 'BUTTON', 'Beenden',
WS_CHILD or WS_VISIBLE, 200, 300,
100, 25, hWnd1, IDC_BTNEXIT, hInstance, nil);
hwndBtnAbout := CreateWindowEx(0, 'BUTTON', 'Über',
WS_CHILD or WS_VISIBLE, 200, 160,
100, 25, hWnd1, IDC_BTNABOUT, hInstance, nil);
end;
WM_COMMAND:
begin
if HiWord(wParam) = BN_CLICKED then
case LoWord(wParam) of
IDC_BTNEXIT: SendMessage(hWnd1, WM_CLOSE, 0, 0);
IDC_BTNABOUT:
{Fenster 2 erzeugen und anzeigen}
begin
hWndAbout := CreateWindowEx(0, ClassName2, Window2Name,
WS_OVERLAPPEDWINDOW or WS_VISIBLE, 40, 10,
300, 200, hWnd1, 0, hInstance, nil);
end;
end;
end;
WM_DESTROY:
begin
PostQuitMessage(0);
end;
else
Result := DefWindowProc(hWnd1, uMsg, wParam, lParam);
end;
end;
{Fensterfunktion für Fenster 2}
function Wnd2Proc(hWnd2: HWND; iMsg: UINT; wParam: wParam; lParam: LParam):
lresult; stdcall;
var
x, y : integer;
begin
Result := 0;
case iMsg of
WM_CREATE:
begin
EnableWindow(hWndMain, false);
{Fenster zentrieren}
x := GetSystemMetrics(SM_CXSCREEN);
y := GetSystemMetrics(SM_CYSCREEN);
MoveWindow(hWnd2, (x div 2) - (Window2Width div 2),
(y div 2) - (Window2Height div 2),
Window2Width, Window2Height, true);
hwndBtnExit := CreateWindowEx(0, 'BUTTON', 'Beenden',
WS_CHILD or WS_VISIBLE, 100, 100,
100, 25, hWnd2, IDC_BTNEXIT, hInstance, nil);
end;
WM_COMMAND:
begin
if HiWord(wParam) = BN_CLICKED then
case LoWord(wParam) of
IDC_BTNEXIT: SendMessage(hWnd2, WM_CLOSE, 0, 0);
end;
end;
WM_CLOSE:
begin
EnableWindow(hWndMain, True);
DestroyWindow(hWnd2);
end;
else
Result := DefWindowProc(hWnd2, iMsg, wParam, lParam);
end;
end;
|