TForm Transparent



  • Hi Pals,

    ich möchte meinem TForm einen neuen Look verleihen: Transparent! (Vergleichbar mit typ. "See-Through-Displays"!)
    Kann mir da jemand helfen?

    Danke im Voraus!



  • Siehe FAQ!

    Wenn du den BCB6 hast, dann gibt's da die Eigenschaft AlphaBlend.

    Hinweis: Transparenz wurde erst mit Win2k eingeführt!



  • TForm::AlphaBlend
    Kann aber sein, daß es diese Eigenschaft erst ab einer bestimmten BCB Version gibt.

    Hups, zu langsam getippt 😉

    [ Dieser Beitrag wurde am 25.02.2003 um 13:01 Uhr von Peter editiert. ]



  • Schmeiss 'mal folgendes in OnResize der Form:

    HRGN winrgn;                              //Windows- Region
      HRGN Rgn2;                                //Windows- Region
      int Res;
      int i;
      int FormBorder=4;                         //Fenster- Rahmenbreite ?
      //Erzeuge Region, so gross wie Form "Transparent"
      winrgn=CreateRectRgn(0,0,Transparent->Width,Transparent->Height);
      //Erzeuge Region, so gross wie Clientbereich
      Rgn2=CreateRectRgn(FormBorder,Height-ClientHeight-FormBorder,
                         Width-FormBorder,Height-FormBorder);
      //Beide Regionen kombinieren (1. kriegt 'n Loch so gross wie 2. Region
      Res=CombineRgn(winrgn,winrgn,Rgn2,RGN_XOR);
      //zweite Region freigeben
      DeleteObject(Rgn2);
      Label1->Caption="Form transparent";
      //Für jede Komponente in der Form
      for (i=0;i<Transparent->ControlCount;i++)
      {
        //Erzeuge Region, so gross wie die Komponente
        Rgn2=CreateRectRgn(Transparent->Controls[i]->Left+FormBorder,
                           Transparent->Controls[i]->Top+Height-ClientHeight-
                             FormBorder,
                           Transparent->Controls[i]->Left+FormBorder+
                             Transparent->Controls[i]->Width,
                           Transparent->Controls[i]->Top+Height-ClientHeight-
                             FormBorder+Transparent->Controls[i]->Height);
        //mit 1. Region kombinieren (wird 'addiert)
        Res=CombineRgn(winrgn,winrgn,Rgn2,RGN_OR);
        //zweite Region jeweils freigeben
        DeleteObject(Rgn2);
        if (Res==ERROR)
          break;                                //bei Fehler abbrechen
    

    Dann is' das Fenster hohl!!!. Da kann man durchgucken und durchgreifen!

    Ist nicht komplett. Fehler gibts, wenn Formm Rollbalken hat ??? und wenn Rahmenbreite im System nicht 0 oder eins ist??? (Nur da passt FormBorder=4)

    Mehr in WIN- API- Forum 😉 !!!

    [ Dieser Beitrag wurde am 25.02.2003 um 20:06 Uhr von DerAltenburger editiert. ]



  • semitransparente fenster auch unter win98 gehen mit der TGlassy und TStainedGlass - Komponente (delphi).

    zu finden bei torry:
    http://www.torry.net/effects.htm

    Edit:
    Direktlinks zu fremden Dateien sind bäh! 😉

    [ Dieser Beitrag wurde am 26.02.2003 um 12:34 Uhr von Jansen editiert. ]



  • hey rico toller tip



  • hey toro, lange nix mehr gehört von dir... machstn so.. mail mir mal wie's so läuft bei dir...


Anmelden zum Antworten