Konstruktorfehler und anderer

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
max_itn
Beiträge: 5
Registriert: Di 14. Jul 2015, 13:30
OS, Lazarus, FPC: Windows 7 Lazarus 1.4.0 FPC Version 2.6.4
CPU-Target: xxBit

Konstruktorfehler und anderer

Beitrag von max_itn »

Hallo Leute,
ich habe eine Frage zum Aufruf, beziehungsweise Inhalt eines Konstruktors bei einer grafischen Anwendung.
Die Elemente sollen in einer Objektliste gespeichert werden.
Diese Objektliste soll beim Erzeugen des Fensters mit der Create instanziiert werden.
Siehe:

Code: Alles auswählen

Constructor TForm1.Create;
begin
  inherited Create(Self);
  MyObjectList.create;
end;                         
Hierfür erhalte ich folgende Fehlermeldung:
test_eigenes_label2_unit2.pas(55,20) Error: method identifier expected
test_eigenes_label2_unit2.pas(57,13) Error: Methods can be only in other methods called direct with type identifier of the class
test_eigenes_label2_unit2.pas(57,13) Fatal: Syntax error, ";" expected but "identifier CREATE" found


Hier die Definition von TForm1:

Code: Alles auswählen

 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
 
   procedure Button1Click(Sender: TObject);
 //   procedure FormMouseEnter(Sender: TObject);
 
  private
    { private declarations }
 
  public
    { public declarations }
   MyObjectList: TObjectList;
    constructor Ceate;
  end;          
Was kann ich tun um diese Fehlermeldung zu beseitigen?
Wird durch den Aufruf inherited Create(Self) das Fenster gezeichnet?
Oder wo geschieht das?
Wofür ist der Parameter „self“ gut?
Vielen Dank für die Beantwortung dieser Frage.
Mfg max_itn

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: Konstruktorfehler und anderer

Beitrag von theo »

Du solltest nicht Create überschreiben, sondern das Ereignis OnCreate des Formulars verwenden.
Und nicht
MyObjectList.create;
sondern:
MyObjectList:= TObjectList.Create;

Mathias
Beiträge: 6918
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Konstruktorfehler und anderer

Beitrag von Mathias »

Code: Alles auswählen

constructor Ceate;
Sollte wohl Create heisen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 5152
Registriert: Fr 8. Apr 2011, 09:01

Re: Konstruktorfehler und anderer

Beitrag von wp_xyz »

Und Create verlangt einen Parameter "Owner", der die erzeugte Instanz am Ende wieder freigibt. Und Create ist virtuell und braucht den Zusatz "override". "Self" bezieht sich auf die gerade erzeugte Instanz - sowas wie "Create(self)" bedeutet später "Selbstmord", verwende stattdessen den Owner-Parameter, der dem Constructor mitgegeben wird. Und die ObjectList, die du im Constructor erzeugst, musst du selbst wieder aufräumen (--> Destroy):

Code: Alles auswählen

 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    MyObjectList: TObjectList;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;
 
constructor TForm1.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  MyObjectList := TObjectList.Create;
end;
 
destructor TForm1.Destroy;
begin
  MyObjectList.Free;
  inherited Destroy;
end;
 

Antworten