Thema: Delphi Rahmen um Label

Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#38

Re: Rahmen um Label

  Alt 31. Jan 2007, 07:38
Guten Morgen,

weil ich nicht allen VCL-Komponenten nachträglich eine Funktionalität "vererben" kann und die Methode aus Beitrag #22 mir selbst nicht gefallen hat, hier noch ein Ansatz:

Delphi-Quellcode:
procedure Decorate(hdc: HDC; r: TRect; penColor: TColor);
const
  PENWIDTH = 2;
begin
  with TCanvas.Create do
  try
    Handle := hdc;
    Pen.Width := PENWIDTH;
    Pen.Color := penColor;
    InflateRect(r, PENWIDTH, PENWIDTH);
    Brush.Style := bsClear;
    Rectangle(r);
  finally
    Free;
  end;
end;
So können nicht nur Label mit einem visual clue ausgestattet werden. Auch die Einbettung (Parent) darf belieb sein.

Nach Auslotung der verschiedenen Möglichkeiten hat mir der Ansatz (bsClear) von Thomas in Beitrag #19 am besten gefallen.

Der Hinweis von Ingo in Beitrag #24 ist richtig, aber bei Einhaltung der gängigen Style Guides sollen Controls mit mindestens vier Pixeln freigestellt werden, so dass ein zwei Pixel dicker Rahmen keine Überdeckungen verursacht.

Wird der Rahmen auf die jeweilige visuelle Komponente selbst gezeichnet, dann fehlt mir der punmping effect. Und FrameRect() zeichnet leider nur den dünnst-möglichen Rahmen (ein Pixel), was mir zu mager ist.


Getestet habe ich so:

Delphi-Quellcode:
procedure TDemoForm.LabelEnter(Sender: TObject);
begin
  with Sender as TLabel do
    Decorate(GetDC(Handle), BoundsRect, clHighlight);
end;

procedure TDemoForm.LabelLeave(Sender: TObject);
begin
  with Sender as TLabel do
    Decorate(GetDC(Handle), BoundsRect, self.Color);
end;
Freundliche Grüße
  Mit Zitat antworten Zitat