![]() |
Kein neuzeichnen
Ich versuche mich gerade daran ein Programm ohne die VCL zu schreiben.
In diesem Programm erstelle ich 2 GroupBoxen als Child des Hauptfenster und eine GroupBox als Child eines der der anderen Groupboxen. Wenn ich nun die dritte GroupBox mit Hilfe von
Delphi-Quellcode:
ausblenden will, dann bleibt die solange sichtbar, bis ich das komplette Fenster mit einem anderen Überlagere und dann wieder anzeigen lasse.
ShowWindow(HANDLE_DRITTER_GROUPBOX, SW_HIDE)
Wenn ich die dritte GroupBox aber als Child des Hauptfenster erstelle, dann wird die GroupBox sofort unsichtbar. Was mache ich falsch? Ich habe die Fensterprozeduren der ersten beiden GroupBoxen umgebogen, wie es in Lucky's NonVCL Tutorial beschrieben ist. |
Re: Kein neuzeichnen
Ruf mal
![]() |
Re: Kein neuzeichnen
Normalerweise passiert das `ungültig machen´ automatisch beim Verstecken/Anzeigen eines Fensters bzw. Controls. Hast du WM_PAINT und/oder WM_ERASEBKGND in den Groupboxen überschrieben, so dass der Bereich der versteckten Groupbox darin nicht neu gezeichnet wird?
|
Re: Kein neuzeichnen
Zitat:
Mal Lucky's Vorschlag testen. <edit> Also: InvalidateRect auf das HAUPTFenster funktioniert. Auf die GroupBox, die Parent von der dritten ist, funktioniert das nicht. Muss ich das verstehen oder nicht? </edit> |
Re: Kein neuzeichnen
:gruebel:
Haben deine Groupboxen den Stil WS_CLIPSIBLINGS? Hat dein Hauptfenster den Stil WS_CLIPCHILDREN? // Nachtrag Noch was gefunden: Frame-Controls (BS_GROUPBOX, SS_...FRAME) zeichnen ihren Hintergrund *nicht* selbst, um die Hintergrundfarbe des übergeordneten Fenster zu übernehmen. Wenn du im Hauptfenster das Bit WS_CLIPCHILDREN gesetzt hat, dann bleibt dort ein Loch. Du solltest vielleicht für die Groupboxen WM_ERASEBKGND explizit abfangen und das Fenster-Rechteck löschen. |
Re: Kein neuzeichnen
Zitat:
Immo habe beides nicht eingestellt. |
Re: Kein neuzeichnen
Zitat aus der MSDN:
Zitat:
Im Grunde solltest du in der (von dir umgebogenen) Fensterprozedur der Groupboxen die Meldung WM_ERASEBKGND nicht an die alte Fensterprozedur weiterleiten sondern an DefWindowProc, dann sollte alles so geschehen wie es soll. |
Re: Kein neuzeichnen
ICh mache jetzt ein InvalidateRect auf das Hauptfenster. Das löst auch mein Problem...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 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 by Thomas Breitkreuz