2009-05-05 6 views
0

Ich bin auf der Suche nach einem Weg zu AlphaBlenden Sie ein untergeordnetes Formular, wenn möglich mit Ebenen Fenstern, da interaktive Steuerelemente dahinter sein wird.AlphaBlend ein Kind Formular

Das Problem ist, ich habe eine Komponente in einem regulären TForm, die mehrere visuelle Ebenen (Zeichnungen, Bilder ...) malt. Irgendwann muss ich ein Editor-Steuerelement in diesem Formular instanziieren (in-Place), dieses Steuerelement wird eine Vielzahl von Standard-Eingabesteuerungen außerhalb meiner Kontrolle (Bearbeitungsfeld, Kontrollkästchen, usw.) umfassen, jedoch möchte ich überlagern Die Ebenen vor der Ebene werden mit Alpha Blending bearbeitet (und WS_EX_TRANSPARENT, um sie durchzuklicken).

Zuerst dachte ich daran, kindliche Formen dafür zu verwenden (randlos TForm s parentered zu der Komponente), und das funktioniert gut, bis zu dem Punkt, wo das AlphaBlended TForm überhaupt nicht alphablended ist, aber undurchsichtig wird, sobald parentered ...

Ich habe dann versucht, die alphablended Form zu entfremden, setzen Sie es auf fsStayOnTop und reagieren auf die relevanten Ereignisse, halten Sie es vor der Komponente auf dem Bildschirm, das funktioniert, aber das ist nicht wirklich befriedigend Lösung: Das alphablended StayOnTop Formular ist auch vor anderen modalen und nicht modalen Formen der Anwendung, sollte der Benutzer entscheiden, sie vor der Komponente zu bewegen ...

Also, irgendwelche anderen Ideen auf einer Weise, eine Kindform zu haben, alphablended sein? (oder verhalten sich wie es ist)

+0

Der ws_ex_Transparent Stil macht das Fenster nicht immun gegen Mausereignisse. Dieser Stil beeinflusst nur die Reihenfolge der Bilder. Wenn Sie keine Mausereignisse erhalten möchten, verwenden Sie SetWindowRgn, um "Löcher" im Fenster zu erzeugen. –

Antwort

2

Nach MSDN haben Sie kein Glück, wie WS_EX_LAYERED cannot be used for child windows.

Vielleicht könnten Sie alle Editor-Formulare ausblenden, wenn Ihr Formular/Anwendung den Fokus verliert, das würde sie zumindest davor bewahren, über anderen Fenstern zu sein. Dennoch ist es unbefriedigend ...

+0

Danke, ich hatte Angst davor. Ich habe gelöst, indem die Spezifikation neu geschrieben und das Overlay nur "außerhalb" der Eingabesteuerelemente im Bearbeitungsformular sichtbar (das Bearbeitungsformular wird transparent sein, wird der Bearbeitungsbereich der Eingabesteuerelemente darauf nicht sein). Da das Overlay hauptsächlich für Positionierungszwecke und Richtlinien verwendet werden sollte, ist dies "gut genug", wenn auch nicht vollständig zufriedenstellend. – user45336