Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Schatten unter Form


Glorfindel - Fr 16.12.05 17:15
Titel: Schatten unter Form
Tach Leute,

ist es irgendwie möglich unter einer Form eine art Schatten erscheinen zu lassen! Gibt es da nee Komponente oder einen Trick.

Wenn da einer was kennt, bitte melden.

Bis denn,

Glorfindel


Lannes - Fr 16.12.05 18:31

Hallo,

eventuell das ?
...ein farbiger Rahmen um ein TForm zeichnen? [http://www.swissdelphicenter.com/de/showcode.php?id=868]


Danniolo - Fr 16.12.05 18:50

Ich glaube, er meinte eher so einen Schatten, wie z.B. bei Menüs und Hints (WinXP).
Das geht ganz einfach so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
protected
  procedure CreateParams(var Params: TCreateParams); override;

{...}

procedure TForm1.CreateParams(var Params: TCreateParams);
const
  CS_DROPSHADOW = $00020000;
begin
  inherited;
  Params.WindowClass.Style := Params.WindowClass.Style or CS_DROPSHADOW;
end;


Heiko - Do 29.12.05 16:00

@Danniolo: Die Variante ist nicht gerade gut (ich hatte sie zuerst auch genommen). Sie funktioniert zwar, aber nur unter XP. Unter den anderen OSes lässt es sich das Projekt dann nicht mehr starten.

Die Variante hier ist besser:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
  published
    procedure SetShadow;

procedure TForm1.SetShadow;
  if SHADOW then
  begin
    SetClassLong(Form1.Handle, GCL_STYLE, GetClassLong(Form1.Handle, GCL_STYLE) or CS_DROPSHADOW);
  end
  else
  begin
    SetClassLong(Form1.Handle, GCL_STYLE, GetClassLong(Form1.Handle, GCL_STYLE) xor CS_DROPSHADOW);
  end;
  FormEinstellungen.RecreateWnd;
end;


//Edit: Aufrufen musst du die aber selber (und nat. Shadow auf den gewünschten Wert setzten ;) )


BenBE - Do 29.12.05 16:21

Die Version von Dannilo sollte einfach nur erweitert werden, so dass manuell auf XP geprüft wird, was sich mit IIRC 2 Zeilen zusätzlich machen lässt (Platform abfragen und Versionsnummer >= 5 prüfen).


Heiko - Do 29.12.05 17:32

Jupp, geht auch. Bei der Version die ich gepostet habe geht es auch so (ohne OS-Abfrage) ;)