Wie wird ein transparentes Formular erstellt, wenn ein VCL Style aktiviert ist?

8

Ich verwende den folgenden Code, um ein Formular transparent zu machen, aber wenn die Anwendung einen VCL-Stil aktiviert hat, ist das Formular mit der Hintergrundfarbe des VCL-Stils statt transparent.

%Vor%

FYI Der Code funktioniert einwandfrei, wenn der vcl-Stil auf Windows gesetzt ist.

Gibt es eine andere Möglichkeit, ein Formular transparent zu machen, um dieses Problem zu umgehen?

    
Salvador 29.11.2011, 20:55
quelle

3 Antworten

11

Es scheint wie ein Fehler für mich. Die VCL-Stile verwenden Stil-Hooks , um die Malmethoden und die Windows-Meldungen zu diesen Vorgängen abzufangen. In diesem Fall müssen Sie Ihre Aufmerksamkeit in der PaintBackground -Methode des TFormStyleHook Klasse in Vcl.Forms , von hier aus erstellen Sie eine neue Stil-Hook-Klasse (die von TFormStyleHook abstammt ), überschreiben Sie die PaintBackground -Methode, korrigieren Sie den Code und schließlich, bevor Sie ihn verwenden, rufen Sie die RegisterStyleHook-Methode auf, um den neuen Style-Hook zu registrieren. Überprüfen Sie diesen Artikel Fixing a VCL Style bug in the TPageControl and TTabControl components , um ein Beispiel zu sehen.

UPDATE Überprüfen Sie dieses Beispiel

%Vor%

Die neue Stil-Hook-Klasse

%Vor%     
RRUZ 29.11.2011, 21:57
quelle
2

Haben Sie in einem separaten Hinweis versucht, die Eigenschaften TransparentColor und TranparentColorValue zu verwenden, anstatt die Fensterstile in CreateParams() ?

zu manipulieren     
Remy Lebeau 29.11.2011 22:58
quelle
1

Ich verwende OverridePaintNC: = False, um Zeichenstile im NC-Bereich zu verhindern. Und es gibt auch OverrideEraseBkgnd. Vielleicht diese Hilfe.

    
netcodecz 29.11.2011 23:59
quelle

Tags und Links