AGB  ·  Datenschutz  ·  Impressum  







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

[OOP] inherited Problem

Ein Thema von Hansa · begonnen am 15. Jan 2005 · letzter Beitrag vom 16. Jan 2005
Antwort Antwort
Hansa

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

[OOP] inherited Problem

  Alt 15. Jan 2005, 20:49
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:
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;
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 ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: [OOP] inherited Problem

  Alt 15. Jan 2005, 21:28
Von welchen Eigenschaften sprichst du denn ? Wie greifst du auf dein Objekt zu ?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: [OOP] inherited Problem

  Alt 15. Jan 2005, 21:33
Moin!

Zitat von Hansa:
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 ?
Wie sollte auch? Inherited bewirkt den Aufruf des überschriebenen Codes und damit wird die Zelle ordentlich gemalt mit links- bzw. rechtsbündigen Text. Danach kommst du und übermalst die gesamte Zelle mit weiss bzw. grau und gibst dann den Text fest bei X, Y aus.

Wie sollte da noch irgendwas rechts- oder linksbündig zu sehen sein?

MfG
Muetze1
  Mit Zitat antworten Zitat
Hansa

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

Re: [OOP] inherited Problem

  Alt 15. Jan 2005, 23:11
Zitat von Muetze1:
Moin!
Wie sollte auch? Inherited bewirkt den Aufruf des überschriebenen Codes und damit wird die Zelle ordentlich gemalt mit links- bzw. rechtsbündigen Text. Danach kommst du und übermalst die gesamte Zelle mit weiss bzw. grau und gibst dann den Text fest bei X, Y aus.
Wieso das ? Inherited überschreibt nichts, sondern übernimmt das, was im Vorgänger defininiert wurde und führt es aus. Danach erst kommt der Rest dran.
Gruß
Hansa
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: [OOP] inherited Problem

  Alt 16. Jan 2005, 01:38
Moin!

Zitat von Hansa:
Zitat von Muetze1:
Moin!
Wie sollte auch? Inherited bewirkt den Aufruf des überschriebenen Codes und damit wird die Zelle ordentlich gemalt mit links- bzw. rechtsbündigen Text. Danach kommst du und übermalst die gesamte Zelle mit weiss bzw. grau und gibst dann den Text fest bei X, Y aus.
Wieso das ? Inherited überschreibt nichts, sondern übernimmt das, was im Vorgänger defininiert wurde und führt es aus. Danach erst kommt der Rest dran.
Und was habe ich geschrieben? Wenn du Inherited hinschreibst, dann rufst du die Methode der Vorgängerklasse auf - somit malt die Vorgängerklasse zu dem Zeitpunkt alles richtig. Wenn er fertig ist, dann kommt er wieder zu deinem Code zurück und fängt an mit FillRect erstmal alles wieder über zu pinseln und danach mit TextOut() den Text auszugeben.

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
  Mit Zitat antworten Zitat
Hansa

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

Re: [OOP] inherited Problem

  Alt 16. Jan 2005, 02:05
Zitat von Muetze1:
- was ist daran unverständlich?
Nur keine Aufregung. Ich habe das inherited jetzt später aufgerufen und es geht. Aber es ist nicht so ganz nachzuvollziehen, warum ich die Farbe setzten kann, dann das inherited aufrufe wegen rechtsbündig usw. und es geht. Umgekehrt aber nicht. Konnte eben noch nie gut malen. 8) Also hat irgendwas mehr Priorität. Wäre nett, wenn du mir sagen würdest was das ist und weshalb. Es geht also nur hier drum (Objects sind im Zusammenhang uninteressant) :

geht :

Delphi-Quellcode:
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
geht nicht :

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]);
Gruß
Hansa
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#7

Re: [OOP] inherited Problem

  Alt 16. Jan 2005, 02:31
naja, soo schwer ist das doch nicht:

umgangssprachlich:

geht:

Delphi-Quellcode:
{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;
Das heißt eigentlich reicht

Delphi-Quellcode:
sgNr.Canvas.brush.Color := clGray;
inherited;
und der zweite code geht nicht:

Delphi-Quellcode:
{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]);
jetzt klar?
  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 03:02 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