Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Hintergrund neu zeichnen beim Ausschalten der Titlebar (https://www.delphipraxis.net/124919-hintergrund-neu-zeichnen-beim-ausschalten-der-titlebar.html)

GPRSNerd 27. Nov 2008 09:35


Hintergrund neu zeichnen beim Ausschalten der Titlebar
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,

ich habe mittels des folgenden Codes [durch SetWindowLong(... not wsCaption)] in einer Applikation die Möglichkeit eingebaut die Form-Titlebar ein- und auszuschalten, also die Applikation in einen MiniModus zu versetzen.
Das Problem, welches jetzt auftritt ist, dass wenn ich die Applikation ohne Titlebar verschiebe der Hintergrund des unterliegenden Fensters/Desktops verschoben wurde und nicht automatisch neu gezeichnet wird. Erst wenn ich das unterliegende Fenster z.B. resize, wird es korrekt neu gezeichnet.
Zur Veranschaulichung sind zwei kleine Screenshots angehängt, einmal von der Applikation im Minimodus und dann vom verschobenen Hintergrund des darunterliegenden Fensters.

Hat jemand ne Ahnung, ob ich die Fenster im Hintergrund noch extra neu zeichnen lassen muss oder wie ich das sonst verhindern kann?

Danke,
Stefan

Delphi-Quellcode:
Procedure HideTitlebar(Formular: TForm);
Var
  Save : LongInt;
Begin
  If Formular.BorderStyle=bsNone then Exit;

  Save:=GetWindowLong(Formular.Handle, gwl_Style);
  If (Save and ws_Caption)=ws_Caption then
  Begin
    Case Formular.BorderStyle of
      bsSingle,
      bsSizeable : SetWindowLong(Formular.Handle,
                                 gwl_Style,
                                 Save and (Not(ws_Caption)) or ws_border);
      bsDialog  : SetWindowLong(Formular.Handle,
                                 gwl_Style,
                                 Save and (Not(ws_Caption)) or ds_modalframe or ws_dlgframe);
    End;
    Formular.Height:=Formular.Height-getSystemMetrics(sm_cyCaption);
    Formular.Refresh;
  End;
end;

GPRSNerd 30. Nov 2008 21:27

Re: Hintergrund neu zeichnen beim Ausschalten der Titlebar
 
*Bump*

Zu dem Thema "Titelleiste verstecken" mit SetWindowLong gibts hier ne Menge Fragen und Antworten.
Ist denn keinem das Problem mit dem nicht refreshten Hintergrund aufgefallen oder gibts dafür einfach keine Lösung?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 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