Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Rahmen um Label (https://www.delphipraxis.net/85366-rahmen-um-label.html)

IngoD7 30. Jan 2007 13:01

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:
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;
Wie willst du bei diesem Konstrukt den Rahmen eigentlich wieder wegmachen, wenn die Maus das Label verlässt?

marabu 30. Jan 2007 13:42

Re: Rahmen um Label
 
Hallo,

ein Verbesserungsvorschlag:

Delphi-Quellcode:
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;
Grüße vom marabu

TBx 30. Jan 2007 14:24

Re: Rahmen um Label
 
Zitat:

Zitat von Hansa
Ne, Brush bezieht sich auf die Form.

???
Kann Dir hier nicht ganz folgen. Was meinst Du damit?


Gruß

Thomas

IngoD7 30. Jan 2007 16:01

Re: Rahmen um Label
 
Zitat:

Zitat von onlinekater
Zitat:

Zitat von Hansa
Ne, Brush bezieht sich auf die Form.

???
Kann Dir hier nicht ganz folgen. Was meinst Du damit?

Mach dir nichts draus - er kann sich manchmal selbst nicht ganz folgen. :tongue:

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:
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);
Letzteres wird von marabus Vorschlag möglicherweise auch schon berücksichtigt. Aber zur Verabschaulichung bleibe ich hier noch bei der "aufgelösten" Version. :-)

Hansa 30. Jan 2007 18:10

Re: Rahmen um Label
 
Zitat:

Zitat von IngoD7
Zitat:

Zitat von onlinekater
Zitat:

Zitat von Hansa
Ne, Brush bezieht sich auf die Form.

???
Kann Dir hier nicht ganz folgen. Was meinst Du damit?

Mach dir nichts draus - er kann sich manchmal selbst nicht ganz folgen. :tongue:

Wenn ihr Delphi nicht folgen könnt, dann kann ich auch nichts dafür. :mrgreen: So geht das :

Delphi-Quellcode:
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;
Alles andere ist einfach zuviel und überflüssig.

IngoD7 30. Jan 2007 20:35

Re: Rahmen um Label
 
Zitat:

Zitat von Hansa
Alles andere ist einfach zuviel und überflüssig.

Du bist der wahre Bastler vor dem Herrn. :|

Erst erklärst du, dass du nur eine halbwegs brauchbare Ausgabe hinbekommst, wenn du ein Krücken-ShowMessage einbaust ...
Zitat:

Zitat von Hansa
Wichtig wäre jetzt erstmal zu wissen, wie das showmessage wegzubekommen ist. Das ist lästig und es könnte Quereffekte hervorrufen.

... und dann fällt dir nichts besseres ein, als deine Rahmendicke auf jenseits von Gut und Böse zu schrauben.

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:

Hansa 30. Jan 2007 20:57

Re: Rahmen um Label
 
mach mal etwas halblang. Was soll das hier denn :

Zitat:

Zitat von IngoD7
..Erst jammerst du rum, dass du nur eine halbwegs lesbare Ausgabe hinbekommst, wenn du ein Krücken-ShowMessage einbaust ...Dabei ignorierst du alle Fakten, Gedanken...deine Online-Hilfe sei völlig ausgefallen...Aber gut, das ist mein Problem...

Zu letzterem : so ist es. :mrgreen: Zu dem davor : das Krücken-showmessage hat mich gestört und keiner hat etwas gesagt, was zu tun ist, um es überflüsig zu machen. Ich habe refresh, repaint, und die anderen Vorschläge sehr wohl ausprobiert. In der OH habe ich sogar das mir bisher nicht bekannte FrameRect entdeckt und auch das getestet. Und mit den dicken Rahmen, da habe ich das so gemacht wie es wohl jeder machen würde. Es muss notfalls ein gewisser Effekt provoziert werden und zwar deutlich sichtbar !

Zitat:

Zitat von IngoD7
..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:

Ja, kann der Delphi-Logik schon folgen, aber laut Dir angeblich nicht. 8)

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:

Zitat von IngoD7
..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:

Das wird umgekehrt rum im OnMouseLeave erledigt !! Für die Nachwelt :
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;

TBx 30. Jan 2007 21:05

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

Hansa 30. Jan 2007 21:14

Re: Rahmen um Label
 
Das hier ist die einzige Frage, die ich sehe :

Zitat:

Zitat von onlinekater
Zitat:

Zitat von Hansa
Ne, Brush bezieht sich auf die Form.

???
Kann Dir hier nicht ganz folgen. Was meinst Du damit?

Was soll ich darauf antworten ? Kann nur sagen, dass ein TLabel kein Brush kennt. Insofern konnte ich Dir nicht folgen. :P

TBx 30. Jan 2007 21:23

Re: Rahmen um Label
 
Zitat:

Zitat von Hansa
Kann nur sagen, dass ein TLabel kein Brush kennt.

Dann möchte ich doch mal gerne wissen, wie Du zu der tollen Aussage kommst, daß Brush zur Form gehört.
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 Delphi-Referenz durchsuchenTCanvas.Rectangle hätte Dir nach meinem Einwand die Erklärung gebracht.

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.
Seite 3 von 5     123 45      

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