![]() |
Re: Rahmen um Label
Mache erstmal den Rand so groß, dass man ihn auch vernünftig sieht (siehe Code). Die Reihenfolge der späteren Anzeige (also dass das Label auf dem Rectangel liegt) kannst du beeinflussen, indem du das Label zuletzt noch einmal refreshed.
Delphi-Quellcode:
Wie willst du bei diesem Konstrukt den Rahmen eigentlich wieder wegmachen, wenn die Maus das Label verlässt?
begin
with Sender as TLabel do begin Color := clSkyBlue; Font.Color := clNavy; end; //showmessage ('KJHJK'); Canvas.Pen.Width := 2; Canvas.Pen.Color :=clBlue; Canvas.Rectangle ((Sender as TLabel).Left-5,(Sender as TLabel).Top-5, (Sender as TLabel).Left + (Sender as TLabel).Width+5, (Sender as TLabel).Top+(Sender as TLabel).Height+5); (Sender as TLabel).Refresh; end; |
Re: Rahmen um Label
Hallo,
ein Verbesserungsvorschlag:
Delphi-Quellcode:
Grüße vom marabu
procedure TDemoForm.Decorate(l: TLabel; entering: Boolean);
const PENWIDTH = 2; var r: TRect; begin Canvas.Pen.Width := PENWIDTH; if entering then Canvas.Pen.Color := clHighLight else Canvas.Pen.Color := Color; r := l.BoundsRect; InflateRect(r, PENWIDTH, PENWIDTH); Canvas.Rectangle(r); Canvas.Pen.Width := 1; l.Refresh; end; |
Re: Rahmen um Label
Zitat:
Kann Dir hier nicht ganz folgen. Was meinst Du damit? Gruß Thomas |
Re: Rahmen um Label
Zitat:
Das von dir vorgeschlagene Canvas.Brush.Style:=bsClear funktioniert sehr gut. Es erspart zudem das Label.Refresh (war eh nur 'ne Trickserei) und ermöglicht damit das ungefährdete Neuzeichnen (und damit das "Ausblenden") des Rectangels (mit Farbe BtnFace) beim Verlassen des Labels mit der Maus. Wenn die Labels jetzt weit genug entfernt von anderen Dingen auf der Form liegen, so dass der Rahmen nichts übermalt, ist's gut, andernfalls muss das Übergemalte neu gezeichnet werden. Das würde pauschal ein Form.Refresh am Ende der LabelMouseLeave-Routine erledigen. //Nachtrag: Wie früher schonmal sinngemäß angedeutet, wird ein 2 Pixel dicker Rahmen um ein Label auch erst sichtbar, wenn man ihn 2 Pixel größer als das Label macht. Also so:
Delphi-Quellcode:
Letzteres wird von marabus Vorschlag möglicherweise auch schon berücksichtigt. Aber zur Verabschaulichung bleibe ich hier noch bei der "aufgelösten" Version. :-)
Canvas.Rectangle ((Sender as TLabel).Left-2,(Sender as TLabel).Top-2,
(Sender as TLabel).Left + (Sender as TLabel).Width+2, (Sender as TLabel).Top+(Sender as TLabel).Height+2); |
Re: Rahmen um Label
Zitat:
Delphi-Quellcode:
Alles andere ist einfach zuviel und überflüssig.
procedure TfrmKey.lblMouseEnter(Sender: TObject);
var Rechteck : TRect; begin with Sender as TLabel do begin Color := clSkyBlue; Font.Color := clBlack; end; //showmessage ('KJHJK'); Canvas.Pen.Width := 12; Canvas.Pen.Color :=clBlue; Canvas.Rectangle ((Sender as TLabel).Left,(Sender as TLabel).Top, (Sender as TLabel).Left + (Sender as TLabel).Width, (Sender as TLabel).Top+(Sender as TLabel).Height); end; |
Re: Rahmen um Label
Zitat:
Erst erklärst du, dass du nur eine halbwegs brauchbare Ausgabe hinbekommst, wenn du ein Krücken-ShowMessage einbaust ... Zitat:
Dabei ignorierst du alle Fakten, Gedanken und Lösungsansätze, die Andere hier bei der Besprechung deines Problems angebracht haben und präsentierst eine "Lösung", die nichts besser funktioniert, als was du davor auch zustande gebracht hattest. Und mittendrin stelltest du Fragen, aufgrund derer ich ernsthaft befürchtete, deine Online-Hilfe sei völlig ausgefallen. Naja, es ist schade, aber ich bekomme immer öfter das Gefühl, bei dir einfach nur für die Tonne zu schreiben. :? Aber gut, das ist mein Problem. Da du Delphi ja so sehr gut folgen kannst ;-), erkläre doch mal, was passiert, wenn du bei deinem Code zum zweiten mal die Maus über das Label fährst. Bei D7 unter XP sieht man nur noch Schrott. :twisted: |
Re: Rahmen um Label
mach mal etwas halblang. Was soll das hier denn :
Zitat:
Zitat:
P.S.: das ganze läuft jetzt unter D7 und XP ohne Schrott auf 100 ??? (eher mehr) Forms. :zwinker: Edit : ist das hier nicht klar ? Zitat:
Delphi-Quellcode:
procedure TfrmKey.lblMouseLeave(Sender: TObject); // falls Maus nicht über Label : zurücksetzen
begin with Sender as TLabel do begin Color := clInfoBk; Font.Color := clBlack; end; Canvas.Pen.Width := PinselBreite; Canvas.Pen.Color := Color; Canvas.Rectangle ((Sender as TLabel).Left+1,(Sender as TLabel).Top+1, (Sender as TLabel).Left + (Sender as TLabel).Width, (Sender as TLabel).Top+(Sender as TLabel).Height); end; |
Re: Rahmen um Label
@Hansa: Es wäre dennoch sehr freundlich, wenn DU einmal meine Frage beantworten würdest, statt mir an den Kopf zu werfen, ich könne Delphi nicht folgen.
Auch ich gehöre zu denjenigen, die Ihr Geld damit verdienen, mit Delphi Lösungen zu erarbeiten. Könnte ich Delphi nicht folgen, so müßte ich schlichtweg verhungern. Gruß Thomas |
Re: Rahmen um Label
Das hier ist die einzige Frage, die ich sehe :
Zitat:
|
Re: Rahmen um Label
Zitat:
Brush gibt es weder direkt in TLabel noch in TForm, sondern ist Bestandteil des Canvas, den nun wieder beide Komponenten haben. Ich finde es sehr schade, daß Du Dir nicht einmal in von Dir selbst erstellten Threads die Mühe machst, die Antworten die man Dir gibt richtig durchzuarbeiten. Spätestens ![]() Ich verabschiede mich jetzt einigermaßen gefrustet aus Diesem Thread und hoffe, dass er nicht wie viele andere Threads, in denen Du mitgewirkt hast in einen unsachlichen Krieg mündet. Gruß Thomas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:22 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