AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
Zitat:
1.1.7. Zwei Fenster erzeugen Zitat:
http://www.michael-puff.de/Programmi...lphi_Demos.zip Das in dem Archiv enthaltende Demo Win32API_Delphi_Demos\Samples\WindowsUI\Window\Two Windows.dproj Noch einfacher geht es nicht. @Luckie Ich mache Reklame für dich ;) gruss |
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
Die Frage ist nur, ob auch modal. Da bin ich mir nicht mehr sicher. Aber im XP Usermanger habe ich modale Fenster/Dialoge benutzt. Und der ist Opensource. Vielleicht da mal gucken.
|
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
Zitat:
Nun der ist wohl zu kompliziert für ihn im Moment. Artet nur in einer Copy\Paste Orgie aus. gruss |
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage <GELÖST>
Das Example was Du da sagst ist auf jeden Fall besser als nichts!
Es erstellt kein Modal Fenster, man kann jederzeit zum Hauptfenster um noch eins und noch eins und noch eins zu erstellen. Ich lese mich da mal rein da es zumindest mehr als ein Fenster kann :thumb: Das PDF habe ich von diesem Server aber mit den Erklärungen darin für Fenster, um ein zweites zu erstellen fehlt da was bzw konnte ich es alleine nicht hinbiegen, man siehts ja im Zip. Vielen Dank an EWeiss für den "mit den Gesicht ins Ziel drücken" Link, das tat gut!!! Und logischerweise auch an Luckie für die Arbeit und das bereitstellen mit all den Dingen, das ist nicht selbstverständlich!! Ich verdaue das alles erst mal, wenn ich mehr Hilfe brauche lasse ich es Euch Wissen, Danke an alle! |
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
Zitat:
Das ist eine Super Idee da mal reinzuschaun, Danke! |
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
Zitat:
Verhindere einfach dass das darunter liegende Fenster aktiv ist. Also ein einfaches
Delphi-Quellcode:
EnableWindow(ParentWindow, false);
aber vergesse nicht es wieder einzuschalten wenn du das 2 Window schließt.
Delphi-Quellcode:
EnableWindow(ParentHandle, True);
bzw. Das Sample ist modal denn das zweite Fenster liegt über dem Parent und bleibt auch drüber. Du musst halt nur dafür sorgen das dein Parent nicht aktiviert werden kann. Zitat:
Zumal da ich ganz andere Wege beschreite als das Luckie tut. gruss |
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
So hab ich es jetzt momentan, es macht genau das was ich wollte.
Vielen Dank nochmal!! Ist DestroyWindow() das richtige Mittel um das Fenster zu schließen oder sollte da ein anderer Befehl hin?
Delphi-Quellcode:
{******************************************************************************}
{ } { TwoWindows } { } { Copyright (c) 2001 Michael Puff } { www.luckie-online.de } { mpuff@luckie-online.de } { } {******************************************************************************} program TwoWindows; {$R resource.res} uses Windows, Messages; const ClassName1 = 'Wnd1Class'; ClassName2 = 'Wnd2Class'; Window1Name = 'Window 1'; Window2Name = 'Window 2'; WindowWidth1 = 500; WindowHeight1 = 400; WindowWidth2 = 300; WindowHeight2 = 200; IDC_BUTTON1 = 1; var hWnd1: DWORD; hWnd2: DWORD; hwndButton1: DWORD; {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) - (WindowWidth1 div 2), (y div 2) - (WindowHeight1 div 2), WindowWidth1, WindowHeight1, true); hwndButton1 := CreateWindowEx(0, 'BUTTON', 'Klick mich', WS_CHILD or WS_VISIBLE, 200, 160, 100, 25, _hWnd1, IDC_BUTTON1, hInstance, nil); end; WM_COMMAND: begin if hiword(wParam) = BN_CLICKED then case loword(wParam) of IDC_BUTTON1: {Fenster 2 erzeugen und anzeigen} begin EnableWindow(_hWnd1, false); hwnd2 := 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 {Fenster zentrieren} x := GetSystemMetrics(SM_CXSCREEN); y := GetSystemMetrics(SM_CYSCREEN); MoveWindow(_hWnd2, (x div 2) - (WindowWidth2 div 2), (y div 2) - (WindowHeight2 div 2), WindowWidth2, WindowHeight2, true); end; WM_CLOSE: begin EnableWindow(hWnd1, True); DestroyWindow( _hWnd2 ); end; else Result := DefWindowProc(_hWnd2, iMsg, wParam, lParam); end; end; {WindowStruktur für beide Fenster} var wc: TWndClassEx = ( cbSize : SizeOf(TWndClassEx); Style : CS_HREDRAW or CS_VREDRAW; lpfnWndProc : @Wnd1Proc; //Fensterfunktion für Fenster 1 cbClsExtra : 0; cbWndExtra : 0; hbrBackground : COLOR_APPWORKSPACE; lpszMenuName : nil; lpszClassName : ClassName1; //Klassenname für Fenster 1 hIconSm : 0; ); msg: TMsg; begin {Struktur mit Infos für Fenster 1 füllen} wc.hInstance := hInstance; wc.hIcon := LoadIcon(hInstance,MAKEINTRESOURCE(100)); wc.hCursor := LoadCursor(0, IDC_ARROW); {Fenster 1 registrieren} RegisterClassEx(wc); {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); {Struktur mit Infos für Fenster 2 füllen} wc.hInstance := hInstance; wc.lpfnWndProc := @Wnd2Proc; //Fensterfunktion für Fenster 2 wc.hIcon := LoadIcon(0, IDI_INFORMATION); wc.hCursor := LoadCursor(0, IDC_ARROW); wc.lpszClassName := ClassName2; //Klassenname für Fenster 2 {Fenster 2 registrieren} RegisterClassEx(wc); while GetMessage(msg,0,0,0) do begin TranslateMessage(msg); DispatchMessage(msg); end; ExitCode := msg.wParam; end. |
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
Zitat:
Bei Dialogen zum Beispiel würde ich EndDialog verwenden. https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx Aber nicht verwechseln mit CreateDialogIndirectParam dieser Dialog ist nicht MODAL deshalb musst du auch hier DestroyWindow verwenden. https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx Das hier
Delphi-Quellcode:
EnableWindow(_hWnd1, false);
besser hier hin. in WM_CREATE der zweiten Winproc besser noch in der Funktion wo das neue Window erstellt wird. anstelle das..
Delphi-Quellcode:
EnableWindow(_hWnd1, false);
hwnd2 := CreateWindowEx(0, ClassName2, Window2Name, WS_OVERLAPPEDWINDOW or WS_VISIBLE, 40, 10, 300, 200, _hWnd1, 0, hInstance, nil);
Delphi-Quellcode:
erstelle zuerst das zweite Fenster dann deaktiviere das erste.
hwnd2 := CreateWindowEx(0, ClassName2, Window2Name,
WS_OVERLAPPEDWINDOW or WS_VISIBLE, 40, 10, 300, 200, _hWnd1, 0, hInstance, nil); // erste erstellen EnableWindow(_hWnd1, false); // dann deaktivieren So wie du es machst könnte es zu einem Deadlock führen.. (Muss nicht, je nach dem was man im alten Fenster dann noch abarbeiten muss) gruss |
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
Zitat:
Zitat:
Damit ist für mich ein cooles Template entstanden für zwei Hobbyprojekte, bei einem weiß ich nicht ob ichs verteilen darf beim anderen handelt es sich um eine detailierte WhoIs Abfrage, das stelle ich bald vor da ich in DP irgendwie nur nicht funktionierende Programme dazu hier fand. Vielen Dank an alle die sich die Zeit zum helfen nahmen! |
AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage
Zitat:
So ist es dann der letzte Vorgang im alten Fenster danach passiert ja nichts mehr und du hast alles abgearbeitet. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz