![]() |
Formular hervorheben durch Rahmen
Hi,
ich habe das Problem, dass ich Formulare optisch so kennzeichnen muss, dass man sie schnell zuordnen kann. Nun wollte ich einen farbigen Rahmen zeichnen, es klappt aber nicht ganz. Kleiner Versuch:
Delphi-Quellcode:
Wenn ich jetzt ein Panel ins Formular setze, so wird der Rahmen Links und Oben vom Panel überdeckt.
type
TForm1 = class(TForm) Panel1: TPanel; private FFrameColor: TColor; FFrameSize: Integer; procedure DrawFrame; procedure SetFrameColor(Value: TColor); procedure SetFrameSize(Value: Integer); protected function GetClientRect: TRect; override; procedure Paint; override; public constructor Create(AOwner: TComponent); override; property FrameColor: TColor read FFrameColor write SetFrameColor default clGreen; property FrameSize: Integer read FFrameSize write SetFrameSize default 0; end; ... constructor TForm1.Create(AOwner: TComponent); begin inherited Create(AOwner); FrameSize := 2; FrameColor := clRed; end; procedure TForm1.DrawFrame; var r: TRect; i: Integer; begin r := Rect( 0, 0, ClientWidth + FrameSize, ClientHeight + FrameSize); Canvas.Brush.Color := FFrameColor; Canvas.FrameRect(r); if FrameSize > 1 then for I := 2 to FrameSize do begin InflateRect(r, -1, -1); with Canvas do FrameRect(r); end; end; function TForm1.GetClientRect: TRect; begin Result := inherited GetClientRect; if FFrameSize > 0 then begin //InflateRect(Result, -FrameSize, -FrameSize); Inc(Result.Left, FFrameSize); Inc(Result.Top, FFrameSize); Dec(Result.Right, FFrameSize); Dec(Result.Bottom, FFrameSize); end; end; procedure TForm1.Paint; begin inherited; DrawFrame; end; procedure TForm1.SetFrameColor(Value: TColor); begin if FFrameColor <> Value then begin FFrameColor := Value; Invalidate; end; end; procedure TForm1.SetFrameSize(Value: Integer); begin if Value < 1 then Value := 1 else if Value > 4 then Value := 4; if FFrameSize <> Value then begin FFrameSize := Value; Invalidate; end; end; Weiterhin ist ungünstig, dass beim Einblenden der Scrollbox auch die anderen Linien verschwinden, bis man halt ans Ende scrollt. Wie kann ich jetzt einen Rahmen zeichnen, der immer an allen Seiten gezeigt wird. Da ich das in ein Basisformular packen muss, nützen mir auch Lösungen mit einem zusätzlichen Panel etc. nichts. Frank |
AW: Formular hervorheben durch Rahmen
Wenn Du eine aktuellere Delphiversion hast kannst Margins bei Deinem FRame verwenden.
|
AW: Formular hervorheben durch Rahmen
Zitat:
im speziellen Fall handelt es sich um ein "ALT-Projekt", welches noch mit D7 erstellt wurde. Es funktioniert aber auch mit D2007 nicht wie gewünscht, da ich dann auch ein Panel benötige. Da ich doch schon einige Formulare anpassen müsste, brauche ich eine Lösung, die nur eine Änderung des Basis - Forms benötigt. Vielen Dank Frank |
AW: Formular hervorheben durch Rahmen
Hi,
also ich bin mir jetzt nicht ganz sicher, ob ich dich richtig verstanden hab, aber vielleicht ist ja die Eigenschaft "border" des Formulars das richtige für dich. Zusammen mit der Farbe des Formulars kannst du so ganz einfach farbige Rahmen um dein Formular bekommen... mfg |
AW: Formular hervorheben durch Rahmen
Hi Patrick
Möglicherweise kann man aus diesem Ansatz etwas zaubern. Zumindest halten die Controls so den Rahmen bei und auch die Scrollbox verdeckt den Rahmen nicht. Ein Problem muss ich dann allerdings noch lösen. Da z.B. bei Panels ParentColor per Default auf True steht, sind auch diese dann eingefärbt. Ich muss mal sehen, dass ich Color beibehalten kann und nur den Border - Bereich zeichne. Vielleicht bekomme ich das ja noch hin. Ich bin aber weiterhin für Alternativen offen. Vielen Dank Frank |
AW: Formular hervorheben durch Rahmen
Du musst auf die Windows Message
![]() ![]()
Delphi-Quellcode:
...
protected procedure WMNCPaint(var Msg: TWMNCPaint) ; message WM_NCPAINT; procedure WMNCACTIVATE(var Msg: TWMNCActivate) ; message WM_NCACTIVATE; ... procedure TForm1.WMNCACTIVATE(var Msg: TWMNCActivate); begin inherited; // evtl. weglassen und dann aber alles selbst zeichen DrawFrame; end; procedure TForm1.WMNCPaint(var Msg: TWMNCPaint); begin inherited; // evtl. weglassen und dann aber alles selbst zeichen DrawFrame; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz