Einzelnen Beitrag anzeigen

Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: CustomControl Vererbung und Paint

  Alt 13. Sep 2017, 21:43
Entweder eine Methode ist virtuell und kann somit überschrieben werden, oder sie ist es nicht. Ob die nun Paint heißt oder PinkelNichtInDieEcke, welche Rolle sollte das spielen? Zeig doch mal Deinen Code, irgendwo machst Du sicherlich etwas falsch.
Den hab ich doch oben schon gepostet

Vielleicht erkläre ich das mal anders, die Hauptkomponente wird von TCustomControl abgeleitet, Paint wird mittels override überschrieben, in der Paint Procedure male ich ein bisschen rum.
Jetzt erstelle ich eine neue Komponente aber diesmal nicht von TCustomControl sondern von meiner ersten Komponente abgeleitet. Diese sollte wieder eine Paint Procedure besitzen, aber die muss natürlich die Paint Procedure meiner ersten Kompoente überschreiben und genau das geht eben nicht, da diese ja CustomControl Paint überschreibt. Das auf Virtual zu setzen geht nicht bzw. geht nicht ist nicht richtig kann man machen hat nur das Ergebnis das z.B. der Hintergrund der Hauptkomponente der vorher Rot war nun weiß gemalt wird das wohl dem Default von CustomControl entspricht.

Soweit ich weiß ist ja TCustomControl.Paint virtual kann ja auch einmalig überschrieben werden was ich ja mit Komponente1 auch mache nur Komponente2 kann Paint von Komponente1 nicht überschreiben. Ich hoffe es ist so deutlicher.

Mail ein Beispiel so wie ich denke das es sein

Delphi-Quellcode:
 TBlubb = class(TCustomControl)
 protected
   procedure Paint; virtual;

----


procedure TBlubb.Paint;
begin

   // bisschen rumpinseln...

inherited;
end;

// Komponente2

type
  TBlubb2 = class(TBlubb)
protected
   procedure Paint; override; // hier sollte TBlubb.Paint überschrieben werden und nicht TCustomControl.Paint....

...

procedure TBlubb2.Paint;
begin
  // den Bereich zeichen der nicht in TBlubb enthalten ist

inherited;
end;
Sagen wir mal bei TBlubb wird der Hintergrund der Kompoente mit Rot gefüllt. Wenn ich Jetzt die Ableitung in Komponente2 von TBlubb mache und dort den Hintergrund auf grün setze, bleibt dieser Rot.
Da anscheinend eben Paint aus TBlubb nicht durch Paint aus TBlubb2 überschrieben wird.

Das einzige was ich machen kann Paint in TBlubb nicht zu implementieren und nur in TBlubb2 zu implementieren, was nicht wirklich die Lösung ist, da ich beides benötige.

Geändert von stOrM (13. Sep 2017 um 21:56 Uhr)
  Mit Zitat antworten Zitat