Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
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>


Comment