![]() |
Konstruktor wird nicht erkannt
Ich bin gerade dabei eine "Komponente" zuu entwickeln.
hier der public Abschnitt:
Delphi-Quellcode:
Die Implementation des Konstruktors:
public
constructor Create(Parent:TCanvas); override; destructor Destroy; override; procedure Paint; procedure StepIt;
Delphi-Quellcode:
und das onformcreate der testform:
constructor TCanvasBar.Create(Parent:TCanvas);
begin inherited; fFont:=TFont.Create; fMin:=0; fMax:=100; fStep:=1; self.Parent:=Parent; end;
Delphi-Quellcode:
hier bekomme ich den Fehler:
procedure TForm1.FormCreate(Sender: TObject);
begin bar:=TCanvasbar.create(Form1.Canvas); end;
Delphi-Quellcode:
Was mache ich also falsch??
[Fehler] Unit1.pas(34): E2076 Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt
|
Re: Konstruktor wird nicht erkannt
Create (AOwner: TComponent) muss bleiben
Du musst Canvas anders übergeben! |
Re: Konstruktor wird nicht erkannt
ach so ist das...
und soll ich dann den AOwner inerhalb des Konstruktors einfach wegschmeissen? oder gibts da was sinnvolles dafür? bzw. wie kann ich der übergebenen Komponente sagen, dass sie jetzt ein neues Child bekommt? |
Re: Konstruktor wird nicht erkannt
Bei den DelphiX Komponenten wurde sowas gelöst, indem du einfach eine Eigenschaft der Komponente addest.
Diese ist z.B. mit dem Namen "SrcCanvas" benannt und enthält eine Liste aller im Projekt enthaltener Canvas'e (Canven? :mrgreen: ) air P.S.: *kleinlaut frag* was bedeutet eig. inherited? |
Re: Konstruktor wird nicht erkannt
Zitat:
AOwner wird dem Basis-Konstruktor übergeben, so das dieser sich in die Verwaltungsliste von AOwner eintragen kann. Normalerweise wird ein Control so angelegt
Delphi-Quellcode:
MyControl := TMyControl.Create(self); // self = Formular, Sorgt für Freigabe, wenn man es nicht selbst erledigt
MyControl.Left := 100; // 100 Pixel von Linken Rand des parent-Controls MyControl.Parent := ParentPanel; // Control ist Windows-Technisch unterhalb des ParentPanel angeordnet |
Re: Konstruktor wird nicht erkannt
ja, das mit dem unterschied zwischen owner und parent ist mir klar.
@Airblader: inherited ruft die nächstältere methode auf, also TObject.Create. Herrgott nochmla jetzt updatet das nicht... *dcu löscht* *dcu nicht findet* *neues projekt macht* *immer noch nicht geht* Wo ist die verdammte dcu jetzt hin? wie bring ich die unit zum updaten? EDIT: Du sollst nicht die gleiche Unit zwei mal auf deinem System haben.... Jetzt hab ich aber folgendes problem: Ich habe bisher von TObject abgeleitet. damit sagt er, dass ich create nicht überschreiben kann. geht das in ordnung? oder muss ich komplett von TComponent ableiten(was weitere Probleme macht) inzwischen mekckert er gerade:
Delphi-Quellcode:
[Fehler] U_CanvasBar.pas(8): E2217 Published-Feld 'fPosition' ist weder vom Typ class noch interface
|
Re: Konstruktor wird nicht erkannt
Zitat:
Also praktisch von dem, wovon man ableitet? Gut, aber was bringt das? :oops: |
Re: Konstruktor wird nicht erkannt
na dass man nicht die alte methode, wenn sie schon eine implementation hat, wieder komplett hinschreiben muss.
könntet ihr euch bitte mal mein oberes editiertes ansehen? Funktioniert wunderbar(es fehlte ein private)! Hey, ich hab gerade meine erste funktionierende Komponente geschrieben! Dass ich das noch erleben darf.... |
Re: Konstruktor wird nicht erkannt
Zitat:
inherited ist praktisch nur ein Platzhalter dafür, dass alles, was in der Ursprungskompo (bzw. Ursprungsklasse) in der Prozedur stand, wieder übernommen wird? Und schon wieder ein Stückchen schlauer :stupid: |
Re: Konstruktor wird nicht erkannt
Zitat:
Und Du kannst einfacher eine Klasse in deine Klassenhierarchie "zwischenschalten". mfG mirage228 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 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