Announcement

Collapse
No announcement yet.

fenster durchsichtig machen

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

  • fenster durchsichtig machen

    wie kann man ein fenster/formular durchsichtig machen, so das man<br>
    sieht was darunter ist?<br>

    mfg

    markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo Makus,

    es gibt verschiede Tools (Komponenten) die
    Dein Problem löschen, wenn Du mir Dein
    E-Mail-Adresse zukommen läßt kann ich die
    was zusenden! [email protected]

    Comment


    • #3
      Hallo Markus,<p>
      schau mal bei http://www.torry.net/effects.htm nach. Da gibt es einige Glass-Komponenten für Formulare. Die sind teilweise sogar Freeware mit Source. Eine war auch dabei, die sogar unter anderen BS als Win2k funktionierte. Allerdings ruckelte es dann stark, da diese Effekte sozusagen von Hand berechnet wurden. Allerdings dürfte das für Deinen Anwendungsfall nicht stören.<p>
      Grüße, Mario Noac
      Schöne Grüße, Mario

      Comment


      • #4
        Hallo Markus,

        falls Du schon Windows 2000 einsetzt, stehen die neuen <b>Layered Windows</b> zur Verfügung. Jedes Programmfenster (auch ein bereits compiliertes) kann nachträglich von 0..100 % durchscheinend eingestellt werden, so dass man den Inhalt des darunterliegenden Fensters sieht. Da diese Funktion nun fest im Win32-API und somit im GDI-Teil integriert ist, wird nur wenig zusätzliche Rechenleistung benötigt (Windows 2000 nutzt den gleichen Effekt für das Einblenden der Dialoge), so dass ruckelnde Effekte der Vergangenheit angehören.
        &#10

        Comment


        • #5
          tag andreas,

          win 2000 habe ich, aber was passiert dann mit meinem programm wenn es unter nt oder 98 läuft???

          mfg

          marku
          Herzliche Grüße

          Markus Lemcke
          barrierefreies Webdesign

          Comment


          • #6
            Hallo Markus,<p>
            Du hast die Funktionen nur unter Win2k zur Verfügung, d.h. Du hast unter anderen Systemen den Effekt einfach nicht, daß heißt das Formular bleibt voll sichtbar. Willst Du das haben, mußt Du den Hintergrund selbst in Dein Form reinrechnen. Das kostet natürlich Rechenkraft ohne Ende und dauert auf langsamen Rechnern schon merklich. Zudem wird das noch recht schwierig zu programmieren. Aber auch dafür gibt es schon Komponenten. Den Link hab ich Dir ja oben schon genannt.<p>
            Grüße, Mario Noac
            Schöne Grüße, Mario

            Comment


            • #7
              Und wie aktiviere ich die Transparenz eines Fensters in W2K? Ich konnte darüber nichts finden

              Comment


              • #8
                Hallo,

                dazu sind nur wenige Aufrufe notwendig. Angenommen, der gestartete Taschenrechner (Windows-Zugehör) soll durchscheinend dargestellt werden. Das könnte so aussehen:
                <pre>
                uses ShellAPI;

                const
                WS_EX_LAYERED = $00080000;
                LWA_COLORKEY = $00000001;
                LWA_ALPHA = $00000002;

                function SetLayeredWindowAttributes(Handle: HWND; crKey: DWORD;
                bAlpha: Byte; dwFlags: DWORD): BOOL; stdcall; external 'user32.dll';

                procedure TForm1.Button1Click(Sender: TObject);
                var
                hTarget : HWND;
                dwStyle : DWORD;
                bAlpha : Byte;
                begin
                // Transparenz 70 %
                bAlpha := (255 * 70) div 100;
                //
                ShellExecute(0,nil, 'calc.exe',nil,nil,SW_NORMAL);
                Sleep(500);
                hTarget := FindWindow(nil, 'Rechner');
                if hTarget = 0 then
                Abort;
                dwStyle := GetWindowLong(hTarget, GWL_EXSTYLE);
                SetWindowLong(hTarget, GWL_EXSTYLE, dwStyle or WS_EX_LAYERED);
                SetLayeredWindowAttributes(hTarget, RGB(0,0,0), bAlpha, LWA_ALPHA);
                end;
                </pre>
                Wenn nur das eigene Formular durchscheinend dargestellt werden soll, könnte man folgendes machen (eine Checkbox legt dabei das Aussehen fest). Über die TForm-Eigenschaft <b>Handle</b> steht das Fensterhandle abrufbereit zur Verfügung:
                <pre>
                procedure TForm1.CheckBox1Click(Sender: TObject);
                var
                dwStyle : DWORD;
                bValue : Byte;
                begin
                if CheckBox1.Checked then
                begin
                bValue := UpDownMin.Position;
                dwStyle := GetWindowLong(Handle, GWL_EXSTYLE);
                SetWindowLong(Handle, GWL_EXSTYLE, dwStyle or WS_EX_LAYERED);
                SetLayeredWindowAttributes(Handle, RGB(0,0,0), bValue, LWA_ALPHA);
                end
                else
                begin
                dwStyle := GetWindowLong(Handle, GWL_EXSTYLE);
                SetWindowLong(Handle, GWL_EXSTYLE, dwStyle and (not WS_EX_LAYERED));
                end;
                end;
                </pre&gt

                Comment


                • #9
                  tag andreas,

                  das tut jetzt aber nur unter win2000?

                  mfg

                  marku
                  Herzliche Grüße

                  Markus Lemcke
                  barrierefreies Webdesign

                  Comment


                  • #10
                    Danke für die ausführliche Erklärung

                    Comment


                    • #11
                      Hiho ...
                      in dem Zusammenhang fällt mir ein Kapitel in dem Buch Win32 - Lösungen von Hr. Kosch ein. Dort wird beschrieben, wie man ein Fenster ausstanzen kann. Die Vorlage hierfür ist eine Canvas. Wenn man nun hinter jeden Button oder was auch immer ein gefülltes Rechteck malt und die Form dann ausstanzen läßt, dann sollte das doch den gewünschten Effekt haben, oder nicht ??? Ich weiß nicht ob ich das nun alles richtig verstanden habe und ich weiß auch nicht wie die Performance bei dieser Methode ist, weil ich das selber noch nie gemacht habe. Bei bedarf kann ich das ja mal posten, ist nicht sehr viel, oder einfach per E-Mail melden: [email protected]

                      Ciao Hage

                      Comment

                      Working...
                      X