![]() |
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
Zitat:
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; |
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
Zitat:
Und wo bekommt beim erstellen des neuen Fensters das alte den Focus wenn es sich erst danach selbst deaktiviert? Es hat diesen bereits (Dein Button auf dem du klickst) und zwar solange bis das neue erstellt wird\wurde. Du must das eigene Fenster aus der Funktion deaktivieren wo du das neue Window erstellst aber nicht vorher (vorher = Deadlock) je nach dem was du danach noch tun willst und das Fenster es nicht kann weil deaktiviert sondern nach dem erstellen und EnableWindow die letzte Aktion ist die im ButtonClick Event ausgeführt wird. ... Ok mach wie du es willst. EDIT: Beispiel. Du klickst auf Button und erstellst ein neues Fenster. In dem Fenster das erstellt wird deaktivierst du das ParentWindow. Jetzt möchte ich aber im ParentWindow was das neue Fenster erstellt noch etwas zeichnen nach dem das neue Fenster erstellt wurde. Nun.. Was denkst du zeichnet sich dann noch nachdem du das Fenster von außerhalb deaktiviert hast? Klassischer Todesstoß gruss |
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
Nebenbei.. das ist auch nicht richtig.
Delphi-Quellcode:
CW_USEDEFAULT.. DWORD <> Integer. Du verletzt die untere Grenze.
{Fenste 1 erzeugen und hWnd1 zuweisen}
hWnd1 := CreateWindowEx(0, ClassName1, Window1Name, WS_VISIBLE or WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WindowWidth1, WindowHeight1, 0, 0, hInstance, nil); entweder die Konstanten ganz weg lassen also mit 0 ersetzen oder aber zu integer konvertieren. gruss |
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
Zitat:
Delphi-Quellcode:
Habe das so abgeändert, korrekt oder völlig falsch?
{Fenste 1 erzeugen und hWnd1 zuweisen}
hWndMain := CreateWindowEx(0, ClassName1, Window1Name, WS_VISIBLE or WS_OVERLAPPEDWINDOW, Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), Window1Width, Window1Height, 0, 0, hInstance, nil); |
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
Zitat:
Ja, ja der EWeiss ist mit nichts zugfrieden.
Delphi-Quellcode:
LOL :)
{Fenste 1 erzeugen und hWnd1 zuweisen}
hWnd1 := CreateWindowEx(0, ClassName1, Window1Name, WS_VISIBLE or WS_OVERLAPPEDWINDOW, LPARAM(CW_USEDEFAULT), LPARAM(CW_USEDEFAULT), WindowWidth1, WindowHeight1, 0, 0, hInstance, nil); gruss |
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
Danke fürs Aufpassen und Deine Hilfe dabei!
Nachtrag, Integer() mit LPARARM() ersetzt, kannst Du mir auch den Unterschied dabei sagen, das Versteh ich gerade irgendwie nicht so ganz? Als Du sagtest "Du verletzt die untere Grenze." weil Integer gefordert wird, dachte ich, naiv wie ich bin, Caste ich mir den als Integer. LPARARM ist für mich gleichzusetzen wie ein LongWord also ein cast ala LongWord(CW_USEDEFAULT) |
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
Zitat:
LPARAM ist bei mir immer noch INT_PTR. INT_PTR = Integer; LongWord := 0..4294967295; Minus Bereiche ausgeschlossen deshalb Verletzung der Untergrenze. Integer := -2147483648..2147483647 gruss |
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
Vielleicht bringe ich da auch etwas durcheinander. War nicht LParam = 32bit LongWord und wParam = 16bit Word. Ich bin da bestimmt nicht auf dem aktuellen Stand der Dinge.
Hab gerade mal in Delphi geschaut, LParam ergibt ein Interger, jupp! Deine Erklärung reicht mir völlig aus, Vielen Dank dafür, ich aktualisiere mich mal selbst ^_^ edit Ps: Deswegen hatte ich es ja Gedanklich erst nicht Verstanden, weil ich da LParam mit LongWord irgendwie verankert hatte was ja keinen Negativ-Wert zulässt wo ich dann wieder bei "Du verletzt die untere Grenze." wäre. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz