![]() |
Re: Rand eines Windows nicht anzeigen
Delphi-Quellcode:
with wndClass do // Setup der Fenster Klasse
begin style := CS_HREDRAW or // Neuzeichenen wenn Fenster-Breite geändert CS_VREDRAW or // Neuzeichenen wenn Fenster-Höhe geändert CS_OWNDC; // Device Context exlusiv lpfnWndProc := @WndProc; // WndProc wird als Window Procedure gesetzt hInstance := h_Instance; hCursor := LoadCursor(0, IDC_ARROW); lpszClassName := 'OpenGL'; end; if (RegisterClass(wndClass) = 0) then // Fenster Klasse registrieren begin MessageBox(0, 'Failed to register the window class!', 'Error', MB_OK or MB_ICONERROR); Result := False; Exit end; dwStyle := WS_OVERLAPPEDWINDOW or // Überschneidung zulassen WS_CLIPCHILDREN or // Kein Zeichnen in Child Fenstern WS_CLIPSIBLINGS; // Kein Zeichnen in Sibling Fenstern dwExStyle := WS_EX_APPWINDOW or // Fenster im Fordergrund WS_EX_WINDOWEDGE; // Erhobener Rand // Das oben definierte Fenster wird erstellt h_Wnd := CreateWindowEx(dwExStyle, // Erweiterter Fenster Stil 'OpenGL', // Name der Klasse PChar(WindowTitle), // Fenster Titel (caption) dwStyle, // Fenster Stil 0, 0, // Fenster Position Width, Height, // Größe des Fensters 0, // Keine Paren-Windows 0, // Kein Menü h_Instance, // die Instanz nil); |
Re: Rand eines Windows nicht anzeigen
Zitat:
|
Re: Rand eines Windows nicht anzeigen
Jetzt bitte nochmal die Version für dumme Normalsterbliche wie mich. ;)
|
Re: Rand eines Windows nicht anzeigen
Delphi-Quellcode:
Naja, eigentlich Quatsch dafür 2 Variablen zu nehmen, aber naja :mrgreen:
var
dwExStyle, dwStyle: Cardinal; begin dwExStyle := GetWindowLong(hWnd, GWL_EXSTYLE); SetWindowLong(hWnd, GWL_EXSTYLE, dwExStyle and not WS_EX_APPWINDOW); dwStyle := GetWindowLong(hWnd, GWL_STYLE); SetWindowLong(hWnd, GWL_STYLE, dwStyle and not WS_OVERLAPPEDWINDOW); end; |
Re: Rand eines Windows nicht anzeigen
Und wie geht das ganze jetzt auch nach dem Erstellen des Fensters? So wie bei der VCL?
|
Re: Rand eines Windows nicht anzeigen
Ja, hab ich doch geschrieben ;)
Für hWnd einfach das Handle von deinem Fenster einsetzen. |
Re: Rand eines Windows nicht anzeigen
Jo, geht. Hab das irgendwie falsch verstanden. ^^ Ich und WinAPI.
|
Re: Rand eines Windows nicht anzeigen
Zitat:
|
Re: Rand eines Windows nicht anzeigen
Ich brauche das nur für OpenGL. Da ist die Initialisierung mit WinAPI noch das kleinste Problem. ;)
|
Re: Rand eines Windows nicht anzeigen
Zitat:
du möchtest wahrscheinlich ein rand- und titelleistenloses Fenster haben, dass aber trotzdem verschieb- und skalierbar bleibt. - Im uses-Teil muss die Unit "Messages" enthalten sein. - Die Eigenschaft "BorderStyle" deines Fenster muss auf "bsNone" gesetzt werden (auch zur Laufzeit möglich). - Im Deklarationsteil deiner TForm-Klasse im private-Abschnitt ist folgende Prozedur einzufügen, die Windows-Mausbotschaften ans Fenster abfängt: procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest; - Im Implementations-Teil fügst du folgenden Quelltext ein:
Delphi-Quellcode:
procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
const BORDER_WIDTH = 5; begin inherited; if M.Result = htClient then begin // Mauszeiger im Client-Bereich des Fensters // Windows vorgaukeln, Mauszeiger wäre auf Titelleiste des Fensters // ==> Fenster ohne Titelleiste kann durch Klick & Drag im Client-Bereich verschoben werden M.Result := htCaption; // falls Mauszeiger am nicht vorhandenen Fensterrand // ==> Windows vorgaukeln, Rand wäre vorhanden // ==> Fenster (BorderStyle = bsNone) kann trotzdem skaliert werden if (M.XPos > Left) and (M.XPos < Left + BORDER_WIDTH) then begin // Mauszeiger am linken Rand M.Result := htLeft; if (M.YPos > Top) and (M.YPos < Top + BORDER_WIDTH) then begin // Mauszeiger an Ecke oben links M.Result := htTopLeft; end else begin if (M.YPos < Top + Height) and (M.YPos > Top + Height - BORDER_WIDTH) then begin // Mauszeiger an Ecke unten links M.Result := htBottomLeft; end end; end else begin if (M.XPos < Left + Width) and (M.XPos > Left + Width - BORDER_WIDTH) then begin // Mauszeiger am rechten Rand M.Result := htRight; if (M.YPos > Top) and (M.YPos < Top + BORDER_WIDTH) then begin // Mauszeiger an Ecke oben rechts M.Result := htTopRight; end else begin if (M.YPos < Top + Height) and (M.YPos > Top + Height - BORDER_WIDTH) then begin // Mauszeiger an Ecke unten rechts M.Result := htBottomRight; end end; end else begin // Mauszeiger innerhalb linker u. rechter Rand if (M.YPos > Top) and (M.YPos < Top + BORDER_WIDTH) then begin // Mauszeiger am oberen Rand M.Result := htTop; end else begin if (M.YPos < Top + Height) and (M.YPos > Top + Height - BORDER_WIDTH) then begin // Mauszeiger am unteren Rand M.Result := htBottom; end end; end; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 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