Muetze hat ja das meiste schon gesagt. Aber noch was zu dem hier (geht im Prinzip um Deinen Punkt 3. mit dem Custom):
Zitat von
scrat1979:
Was für ein Vorteil haben die anderen Autoren dadurch (ausser mehr Arbeit
)?
Du musst Dir mal überlegen, was es heißt, von TLabel abzuleiten oder von TCustomLabel. Erstere haben deutlich weniger Arbeit.
Muss ein Bespiel konstruieren : irgendeiner braucht 1000 Labels und zwar grüne. Der erste, der das machen soll, der geht hin und legt 1000 Labels auf die Forms und geht 1000 mal in den
OI und klappt das + bei Font auf, sucht sich grün raus usw. Alle Arbeitsschritte 1000 mal. Der nächste hat schon was von TComponent gehört und baut sich ein komplett neues Label. Der erfindet das
Rad erst mal komplett neu. Dauert zwar ewig, aber theoretisch wäre es machbar. Gespart hätte er das setzen der grünen Farbe.
Jetzt kommen noch zwei andere, die wissen, dass die
VCL hierarchich aufgebaut ist. Sie suchen nach irgendeinem schon vorhandenen Label als Vorfahr. Der eine findet das TCustomLabel. Der ist zwar schon wesentlich besser dran als der mit dem TComponent, aber er muss einen Haufen an Prozeduren mit Leben erfüllen. Er wird auch viel Arbeit haben. Es wird vermutlich abstrakte Fehler erhalten und ganz seltsame Effekte. Jetzt noch der mit dem TLabel, der schon längst fertig ist. Er schreibt 2 relevante Zeilen :
TMyLabel = class (TLabel);
Somit erzeugt er quasi zuerst einmal einen TLabel-Clone. Alles, was das TLabel hat, das hat "sein" Label ab sofort auch. Die Farbe fehlt aber noch und die baut er im Constructor ein :
Delphi-Quellcode:
Constructor TMyLabel.Create... ; override
begin
inherited; // Vorgänger-Constructor vorsichtshalber aufrufen wegen override
Font.Color := clGreen;
end;
Gut, die Farbe ist schon sehr einfach. Das Prinzip bleibt aber gleich und gilt so auch für zu überschreibende Methoden.
Zitat von
scrat1979:
Warum lässt sich nicht das selbe für die o.g. Ereignisse CMMouseEnter durchführen, indem man die beiden Zeilen herausnimmt und eine analoge Procedure einfügt (procedure MouseEnter; override
? .
Damit man genau so etwas eben NICHT machen kann.