AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[erledigt] Rechteck füllen

Ein Thema von Hansa · begonnen am 2. Mär 2007 · letzter Beitrag vom 2. Mär 2007
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

[erledigt] Rechteck füllen

  Alt 2. Mär 2007, 12:57
Hi,

habe einige Panele und darauf einige Labels. Code-Fragment :

Delphi-Quellcode:
procedure Tfrm.LabelMouseEnter(Sender: TObject);

...
  if (Sender is TLabel) then begin
    Canvas.Brush.Color := clSkyBlue;
    Canvas.FillRect (Rect ((Sender as TLabel).Parent.Left-5,
                      (Sender as TLabel).Parent.Top-5,
                      (Sender as TLabel).Parent.Left+5 + (Sender as TLabel).Parent.Width+1,
                      (Sender as TLabel).Parent.Top+5 + (Sender as TLabel).Parent.Height+1));
    Canvas.Pen.Color := clNavy;
    Canvas.Pen.Width := 4;
    Canvas.Rectangle ((Sender as TLabel).Parent.Left,
                      (Sender as TLabel).Parent.Top,
                      (Sender as TLabel).Parent.Left + (Sender as TLabel).Parent.Width+1,
                      (Sender as TLabel).Parent.Top + (Sender as TLabel).Parent.Height+1);
  end;
Parent der Labels ist immer ein Panel. Sofern man mit der Maus in die Nähe der Labels kommt, sollen die Panels umrandet und auch gefüllt werden. Folgender Effekt tritt auf : die Umrandung klappt einwandfrei, das Füllen mit anderer Farbe aber nicht. mit dem -5/+5 im FillRect habe ich zumindest einen Effekt erzielt : außerhalb der Panels ist was zu sehen (5 Pixel breiter Rahmen in clSkyBlue).

So was in der Art geht nicht :

(Sender as TLabel).Parent.Color := clSkyBlue; Was ist da zu machen ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von WordsBG
WordsBG

Registriert seit: 17. Sep 2005
63 Beiträge
 
Delphi 7 Professional
 
#2

Re: Rechteck füllen

  Alt 2. Mär 2007, 13:17
Wie wäre es mit

((Sender as TLabel).Parent as TPanel).Color := clSkyBlue; Bei mir geht das.
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Rechteck füllen

  Alt 2. Mär 2007, 13:22
Anhand Deiner Eintragszahl folgere ich, dass Du Dich mit Delphi recht gut auskennst

Wäre es in Deinem Fall evtl. daher nicht günstiger eine eigene Komponente von TLabel oder TCustomLabel abzuleiten und einen "Hover" Effekt bei DoPaint/DoDrawText zu realisieren. So weit ich das nachvollziehe ist das doch dein Anliegen?!? Ich kenne mich zwar nicht sooo gut aus, aber habe eine ähnliche Komponente mit Rahmen/Textfarbenänderung auch hinbekommen, dann dürfte das für Dich ein Klacks sein.

Grüsse,
SCRaT
Michael Kübler
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: Rechteck füllen

  Alt 2. Mär 2007, 13:36
Eigene Komponente ? Wäre zu überlegen. Aber : schon mal selbst überlegt, was da alles zu tun wäre ? Das Label müssste als Subkomponente behandelt werden usw. Solange die Frage nicht geklärt ist, baue ich nicht noch irgendwas in eine Komponente und habe dann mit der denselben Ärger, wie ohne.

OT : nicht mal Luckie weiß alles.
Gruß
Hansa
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Rechteck füllen

  Alt 2. Mär 2007, 13:41
TPanel und Color funktioniert m.E. nicht. Hast du schon mal probiert, einem Panel im OI eine andere Farbe zuzuweisen? Da passiert glaube ich rein gar nichts.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Rechteck füllen

  Alt 2. Mär 2007, 13:53
Hansa, ich kann in deinem Code-Fragment keine Stelle entdecken, an der du ein Panel färbst. Meiner Meinung nach zeichnest du auf dem Canvas des Formulars.

@smudo
Warum sollte das nicht funktionieren? Ich muß allerdings zugeben, daß ich keine Erfahrungswerte über die Auswirkungen einer Manifest-Datei habe.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: Rechteck füllen

  Alt 2. Mär 2007, 19:51
Also :

Zitat von smudo:
TPanel und Color funktioniert m.E. nicht. Hast du schon mal probiert, einem Panel im OI eine andere Farbe zuzuweisen? Da passiert glaube ich rein gar nichts.
OI interessiert nicht. Du hast den as / is Kram vergessen. Woher soll denn Delphi wissen, was es konkret nutzen soll ? Das steht zur Runtime zwar fest, aber nicht schon beim Design.

Zitat von Hawkeye219:
Hansa, ich kann in deinem Code-Fragment keine Stelle entdecken, an der du ein Panel färbst.
Wie wärs hiermit :

Zitat von Hansa:
[delphi]
procedure Tfrm.LabelMouseEnter(Sender: TObject);

...
if (Sender is TLabel) then begin
Canvas.Brush.Color := clSkyBlue;
Canvas.FillRect (Rect ((Sender as TLabel).Parent.Left-5,
(Sender as TLabel).Parent.Top-5,
(Sender as TLabel).Parent.Left+5 + (Sender as TLabel).Parent.Width+1,
(Sender as TLabel).Parent.Top+5 + (Sender as TLabel).Parent.Height+1));
[delphi]
Geht zwar wegen Quereffekten so anscheinend nicht, aber "(Sender as TLabel)" sind definitiv die Panele. Das hier allerdings sieht gut aus :

Zitat von WordsBG:
[pre]((Sender as TLabel).Parent as TPanel).Color := clSkyBlue;[/pre]

Bei mir geht das.
Noch mehr "aASen". Mein Gespür sagt intuitiv, das könnte tatsächlich der Trick sein. Jo, Beitragsanzahl hat schon was zu sagen.

Edit : Tags verbessert.

Edit 2 : geht nicht.
Gruß
Hansa
  Mit Zitat antworten Zitat
Marco Haffner
(Gast)

n/a Beiträge
 
#8

Re: Rechteck füllen

  Alt 2. Mär 2007, 21:31
Mit "(Sender as TLabel)" greifst Du zwar auf das Panel zu, aber eben nur für die Position, wohin das Rechteck gezeichnet wird. "Canvas.FillRect" ist aber der Canvas des Formulars auf dem das Panel liegt.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: Rechteck füllen

  Alt 2. Mär 2007, 21:56
Wie geahnt : der Vorschlag von WordsBG geht tatsächlich so ! FillRect usw. macht mehr Ärger, als nötig und ist überflüssig. Zumindest für den Fall hier. Zweimal AS und das wars.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz