Announcement

Collapse
No announcement yet.

Nachfahre von TWinControl transparent

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Nachfahre von TWinControl transparent

    <PRE>Hallo Leute,

    wie kann ich ein Nachfahre von TWinControl transparent erstellen bzw abteiten?
    Z.B. TPanel.

    MfG
    Jürgen

  • #2
    procedure TDBCtrlPanel.WMNCHitTest(var Message: TWMNCHitTest);
    begin
    if csDesigning in ComponentState then
    Message.Result := HTCLIENT else
    Message.Result := HTTRANSPARENT;
    end

    Comment


    • #3
      <PRE>Danke erstmal, ich werde es probieren!

      MfG
      Jürgen</PRE&gt

      Comment


      • #4
        <PRE>Hallo Klaus,

        leider funktioniert deine Idee bei mir nicht:-(
        Hast Du noch einen anderen Vorschlag?

        MfG
        Jürgen</PRE&gt

        Comment


        • #5
          Das darf ja eigentlich auch nicht funktionieren. Der Hittest prueft ja auch nur ob ein Mausklick trifft

          Comment


          • #6
            Du könntest Dir mal die Paint-Routine vom TWinControl anschauen. Ich persönlich halte es aber für ziemlich aussichtslos. Ein TWinControl ist nicht umsonst rechteckig und nicht transparent. Dies ermöglicht effezienten Aufbau der Oberfläche.<br>Evtl. ist es effektiver, einfach eine externe Komponente zu suchen, die das gewünschte macht. Obwohl mir so eine auch noch nicht untergekommen ist und es dann sicher ein Haufen von Problemen und Einschränkungen gibt. Schliesslich gibt es für die drunterliegende Komponente keine Veranlassung, sich vollständig zu aktualisiern, wenn Sie von einem TWinControl verdeckt wird. Evtl. bietet sich an, im Web mal nach TWinControls mit Bitmaphintergründen zu suche...<p>
            Grüße, Mario Noac
            Schöne Grüße, Mario

            Comment


            • #7
              Hallo Leute! Danke erstmal für eure Hilfe, ich werde mal sehen, vielleicht bekomme ich das irgendwie anders hin.<BR>
              <P><P>MfG Jürge

              Comment


              • #8
                Mario hat vollkommen recht. Man kann zwar jeden Windowsfensterhandle hWnd, demnach auch TWinControl, mit SetWindowLong(gwl_ExStyle, ... ws_Ex_Transparent); mitteilen das es ein transparentes fenster ist, ABER so richtig funktoniert hat das wohl noch nie. Das Problem ist nicht dieses transparente Fenster, sondern die nicht-transparenten Fentser unter diesem Fenster. Anscheinend weiß Windows nicht das es auch unser trans. Control neu darzustellen hat wenn in einem der darunterliegenden Fenster sich was neu darstellt.<br>
                Man kann auch ein nicht-transparentes TWinControl als transparent erscheinen lassen. D.h. bevor es sichtbar gemacht wird kopiert es den Inhalt der darunterliegenden Fenster in eine Bitmap. Diese wird dann jeweils in der wm_Paint und wm_EraseBkGnd Message dargestellt. Dies funktioniert und ich habe es schon selber gecodet. ABER, auch hier entsteht das Problem wenn sich unter diesem Fenster was geändert hat, es
                <li>1. zu registrieren
                <li>2. den neuen Originalzustand in die Bitmap zu lesen

                Das liegt ganz einfach an der dritten Feststellung von Mario. Falls ein Fenster durch ein nicht-transparentes fenster (ws_Ex_Transparent) überdeckt wird, so ist dieser überlappende Bereich für dieses Fenster irrelevant. Das GDI schneided sozusagen diesen Bereich aus dem sichtbaren Bereich des darunterliegenden Fensters aus. Zeichnet sich dieses neu, werden NUR die verbleibenden, somit sichtbaren Regionen gezeichnet.<br>
                Angenommen du hast zwei A4-Blätter, eines Rot eine Grün. Rot überlappt Grün und beide liegen auf dem Schreibtisch. Der Schreibtisch ist unser "Desktop" und schneidet aus grün den bereich der durch Rot überlappt wird raus. D.h. wenn Grün sich zeichnen soll dann zeichnet es keinen A4 Bereich sondern nur einen unvollständigen Bereich.<br>
                Dieses Konzept wiederspricht vollständig dem waqs du möchtest.<br>
                Aber einen Hoffnungsschimmer gibt es. Ab Win2k/XP gibt es die Möglichkeit sein Fenster per Alphablending darzustellen. Dazu müssen ja auch echte transparente Fenster möglich sein. Suche also mal nach diesen neuen Features im Windows-API.<br>

                Gruß hage

                Comment

                Working...
                X