![]() |
[OOP] inherited Problem
Hi,
bin immer noch an meinem Stringgrid dran. 8) Ich leite das von einem Vorfahr-Objekt ab. In diesem ist definiert, daß z.B. Zahlen rechtsbündiig, mit 2 Nachkommastellen usw. angezeigt werden. Je nach Lage will ich nun diese Zellen farblich besser unterscheiden können:
Delphi-Quellcode:
Das rechtsbündige usw. steckt in dem "inherited" drin. Wird der Code ausgeführt, so ändert sich zwar, wie gewollt, die Farbe, aber die geerbten Eigenschaften sind nicht da. Was könnte das sein ?
procedure TfrmAn.sgNrDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState); begin inherited; EditObject := TEditObject (sgNr.Objects [ACol,ARow]); if EditObject.Editable then sgNr.Canvas.brush.Color := clWhite else sgNr.Canvas.brush.Color := clGray; sgNr.Canvas.FillRect (Rect); sgNr.Canvas.TextOut(rect.Left,rect.Top,sgArtNr.Cells [ACol,ARow]); end; |
Re: [OOP] inherited Problem
Von welchen Eigenschaften sprichst du denn ? Wie greifst du auf dein Objekt zu ?
|
Re: [OOP] inherited Problem
Moin!
Zitat:
Wie sollte da noch irgendwas rechts- oder linksbündig zu sehen sein? MfG Muetze1 |
Re: [OOP] inherited Problem
Zitat:
|
Re: [OOP] inherited Problem
Moin!
Zitat:
Somit: - Wo behaupte ich, das inherited irgendwas überschreibt? Ich habe behauptet du übermalst was, ja. - Und wie du schon richtig erkannt hast: "Danach erst kommt der Rest dran" - richtig, dein Code - und was macht der? - Er malt auf dem kompletten Rect der Zelle... - was ist daran unverständlich? MfG Muetze1 |
Re: [OOP] inherited Problem
Zitat:
geht :
Delphi-Quellcode:
geht nicht :
sgNr.Canvas.brush.Color := clGray;
sgNr.Canvas.FillRect (Rect); sgNr.Canvas.TextOut(rect.Left,rect.Top,sgNr.Cells [ACol,ARow]); inherited; // erst jetzt aufrufen, da Farben jetzt neu gesetzt ! // rechtsbündig ist aus Vorgänger
Delphi-Quellcode:
inherited; // rechtsbündig ist aus Vorgänger
sgNr.Canvas.brush.Color := clGray; sgNr.Canvas.FillRect (Rect); sgNr.Canvas.TextOut(rect.Left,rect.Top,sgNr.Cells [ACol,ARow]); |
Re: [OOP] inherited Problem
naja, soo schwer ist das doch nicht:
umgangssprachlich: geht:
Delphi-Quellcode:
Das heißt eigentlich reicht
{Als Farbe wähle grau} sgNr.Canvas.brush.Color := clGray;
{Male das Rechteck aus} sgNr.Canvas.FillRect (Rect); (Gebe Text aus} sgNr.Canvas.TextOut(rect.Left,rect.Top,sgNr.Cells [ACol,ARow]); {Ruf die Vorfahrfunktion auf - die malt das ganze Feld nochmal mit der Farbe grau } inherited;
Delphi-Quellcode:
und der zweite code geht nicht:
sgNr.Canvas.brush.Color := clGray;
inherited;
Delphi-Quellcode:
jetzt klar?
{male das rechteck normal} inherited; // rechtsbündig ist aus Vorgänger
{setze farba auf grau - die farbe des hintergrunds ändert sich dadurch noch nicht, da der hintergrund hier nicht gezeichnet wird!} sgNr.Canvas.brush.Color := clGray; {jetzt male das rechteck aus, also übermale alles was mit inherited gemalt wurde} sgNr.Canvas.FillRect (Rect); {und nun gib text aus} sgNr.Canvas.TextOut(rect.Left,rect.Top,sgNr.Cells [ACol,ARow]); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 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