constructor wird aufgerufen aber nicht ausgeführt

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1665
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

constructor wird aufgerufen aber nicht ausgeführt

Beitrag von fliegermichl »

Hallo zusammen,

Wenn ich mit Lazarus (1.0) ein simples Formular erstelle mit einem Button drauf und folgenden OnClick Code ausführe,
dann wird der constructor TSpeedbutton.Create zwar angesprungen aber nicht ausgeführt.
TSpeedButton ist nur ein Beispiel. Es funktioniert bei keinem Control wie erwartet.
Kann mir jemand sagen woran das liegt und wie ich erreichen kann, daß der Konstruktor auch ausgeführt wird?

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var ControlClass : TControlClass;
    newcontrol : TControl;
begin
  ControlClass := TSpeedButton;
  newControl := ControlClass.Create(Application);
  newControl.Parent := self;
end;
Viele Grüße
Micha
Zuletzt geändert von Lori am Mo 8. Okt 2012, 16:53, insgesamt 1-mal geändert.
Grund: richtiger Highlighter

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: constructor wird aufgerufen aber nicht ausgeführt

Beitrag von mschnell »

Ich verstehe zwar nicht, warum Du das so machst, aber wenn TControlClass ein Vorfahre von TSpeedButton ist, ist erstmal ControlClass.Create(Application) falsch. Create muss mit der Klasse und nicht mit der Variablen aufgerufen werden: newconrtol := TControlClass.Create(Application);

Dann weiß create aber immer noch nicht, dass es einen TSpeedButton kreieren soll also vielleicht eher newconrtol := TSpeedButton.Create(Application);

Dann kann aber newcontrol auch gleich vom Typ TSpeedbutton sein.

-Michael

martin_frb
Beiträge: 592
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: constructor wird aufgerufen aber nicht ausgeführt

Beitrag von martin_frb »

mschnell hat geschrieben:Ich verstehe zwar nicht, warum Du das so machst, aber wenn TControlClass ein Vorfahre von TSpeedButton ist, ist erstmal ControlClass.Create(Application) falsch. Create muss mit der Klasse und nicht mit der Variablen aufgerufen werden: newconrtol := TControlClass.Create(Application);
TControlClass = class of TControl

TControl like all components has a virtual constructor. So this should work.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: constructor wird aufgerufen aber nicht ausgeführt

Beitrag von mschnell »

OK.

Trotzdem weiß Create nicht, was es kreieren soll.

-Michael

martin_frb
Beiträge: 592
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: constructor wird aufgerufen aber nicht ausgeführt

Beitrag von martin_frb »

mschnell hat geschrieben: Trotzdem weiß Create nicht, was es kreieren soll.
Ich hab den Code mal eben selbst ausgeführt.

TSpeedButton.Create wird komplett ausgefuehrt.

Und das Ergebnis ist eine instance von TSpeedButton

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: constructor wird aufgerufen aber nicht ausgeführt

Beitrag von mschnell »

I see.

Danke.

Dann verstehe ich aber nicht, was er für ein Problem hat.....

Das Funktioniert bei mir:

Code: Alles auswählen

ControlClass := TButton;
  newControl := ControlClass.Create(Application);
  newcontrol.Height:= 20;
  newcontrol.Width:=80;
  newcontrol.Top:= 5;
  newcontrol.Left:=5;
  newcontrol.Caption:='NewControl';
  newcontrol.Visible:=True;
  newControl.Parent := self;


-Michael

Antworten