Announcement

Collapse
No announcement yet.

abgerundete Forms

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

  • abgerundete Forms

    Hallo !
    Ich möchte gerne abgerundete Forms erstellen, das heißt keine runden !<p>
    Herzlichen Dank
    Zuletzt editiert von Gast_1; 31.03.2010, 13:26.

  • #2
    Hallo,

    dafür gibt es verschiedene Möglichkeiten. Eine Sache die unter allen Win32-Versionen (Windows 9x, NT, ME, 2000) funktioniert sind <b>Regionen</b>. Das folgende Beispielprojekt erzeugt ein Programmfenster (Formular) mit abgerundeten Ecken. Die Win32-API-Funktion <b>CreateRoundRectRgn</b> ist für diese "Zauberei" zuständig:
    <pre>
    procedure TFormRound.FormCreate(Sender: TObject);
    begin
    LabelTime.Caption := TimeToStr(Time);
    // Rechteck mit abgerundeten Ecken als Region definieren
    FRegion := CreateRoundRectRgn(0, 10, Width, Height,
    Height - 50, Width - 50 );
    // die neue Region einsetzen -> damit wird nur das am Bildschirm
    // sichtbar, was sich innerhalb der Regionsgrenzen befindet!
    if FRegion <> 0 then
    SetWindowRgn(Handle, FRegion, True);
    end;

    destructor TFormRound.Destroy;
    begin
    if FRegion <> 0 then
    begin
    // Region für das Fenster abmelden (Parameter 0)
    SetWindowRgn(Handle, 0, True);
    // GDI-Objekt freigeben
    DeleteObject(FRegion);
    end;
    inherited Destroy;
    end;
    </pre>
    Unter Windows 2000 wird die Sache einfacher, da Windows über die <b>Layered Windows</b> das Darstellen von beliebigen Formen im Vergleich zu Regionen deutlich effektiver handhaben kann. Das folgende Beispiel demonstriert, wie man unter Windows 2000 eine bestimmte Formularfarbe völlig ausblenden kann, so dass an dieser Stelle nur der dahinterliegende Bereich (Desktop etc.) zu sehen ist:
    <pre>
    procedure TFormRound.FormCreate(Sender: TObject);
    var
    dwStyle : DWORD;
    begin
    dwStyle := GetWindowLong(Handle, GWL_EXSTYLE);
    SetWindowLong(Handle, GWL_EXSTYLE, dwStyle or WS_EX_LAYERED);
    // es soll nur die rote Schrift erscheinen, aber nicht der
    // schwarze Formularhintergrund
    SetLayeredWindowAttributes(Handle, RGB(0,0,0), 225,
    LWA_COLORKEY or LWA_ALPHA);
    //
    LabelTime.Caption := TimeToStr(Time);
    end;
    </pre>
    &#10

    Comment


    • #3
      Hallo nochmals !
      Herzlichen Dank für die Hilfe !
      Ich werde es schnellstens ausprobieren !
      Danke, Herr Kosch !
      Schöne Grüße
      Zuletzt editiert von Gast_1; 31.03.2010, 13:26.

      Comment

      Working...
      X