[erledigt] OnCreate für TFrames

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1247
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

[erledigt] OnCreate für TFrames

Beitrag von kralle »

OS: Linux Mint 17.3
FPC: 3.0.0
Laz: 1..6

Hallo,

ich brauche in TFrames das "OnCreate"-Ereignis. Ich habe also Suchmaschinen befragt und ein Beispiel übernommen.
Leider funktioniert das nicht. Ich habe da bestimmt etwas falsch verstanden oder nicht richtig umgesetzt.
Ich bekomme die angehängte Fehlermeldung.
Mein Quelltext sieht so aus:

Code: Alles auswählen

 
type
  TFrameMaterial = class(TFrame)
    lbledt_ArtikelAnzahl: TLabeledEdit;
    chklst_Artikeldaten: TCheckListBox;
    procedure lbledt_ArtikelAnzahlKeyPress(Sender: TObject; var Key: Char);
    procedure chklst_ArtikeldatenClickCheck(Sender: TObject);
    procedure lbledt_ArtikelAnzahlChange(Sender: TObject);
  private
    { Private-Deklarationen }
    MyObj: TObject;           // Um OnCreate_Ereignisse zu erzeugen
  public
    { Public-Deklarationen }
     constructor Create(TheOwner: TComponent); override;
      destructor Destroy; override;
  end;
 
implementation
 
{$R *.lfm}
 
constructor TFrameMaterial.Create(TheOwner: TComponent);
// Erzeugt das OnCreate-Ereignis
begin
    inherited Create(TheOwner);
    MyObj := TObject.Create;
  end;
 
destructor TFrameMaterial.Destroy;
// Erzeugt das OnDestroy-Ereignis
begin
    MyObj.Free;
    inherited Destroy;
  end;  
 
Da der Debugger schön in das Assembler-Fenster springt, bekomme ich ja auch nicht angezeigt welche Zeile den Fehler auslöst.
Wenn ich Haltepunkte setze, dann sind das immer welche mit rotem Fragezeichen, und die werden nicht erreicht.

Warum kann bei mir Code nicht einfach mal funktionieren?

Gruß Heiko
Dateianhänge
Text einer Fehlermeldung
Text einer Fehlermeldung
Zuletzt geändert von kralle am So 6. Mär 2016, 21:50, insgesamt 1-mal geändert.
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: OnCreate für TFrames

Beitrag von Socke »

Die Fehlermeldung sollte nicht mit dem Konstruktor oder Destruktor zusammenhängen.
Die LFM-Datei (Layout des Frames) scheint nicht zur Unit zu passen. Versuch mal das Projekt erneut in Lazarus zu öffnen (Lazarus ist hier gesprächiger als die Exception im Programm).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Warf
Beiträge: 2194
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: OnCreate für TFrames

Beitrag von Warf »

Im Asm Fenster steht in der ersten Zeile der Funktionsname, das sollte hilfreich sein, das überladen vom Konstruktor eines Frames funktioniert bei mir super.

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1247
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: OnCreate für TFrames

Beitrag von kralle »

Hallo,
Warf hat geschrieben:Im Asm Fenster steht in der ersten Zeile der Funktionsname, das sollte hilfreich sein, das überladen vom Konstruktor eines Frames funktioniert bei mir super.
CLASSES$_$TREADER_$__$$_FINDMETHOD$TCOMPONENT$ANSISTRING$$POINTER (116)
Sagt dir das was?

Gruß Heiko
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1247
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: OnCreate für TFrames

Beitrag von kralle »

Moin,
Socke hat geschrieben:Die Fehlermeldung sollte nicht mit dem Konstruktor oder Destruktor zusammenhängen.
denke ich auch nicht mehr, da ich die Zeilen auskommentiert habe.
Socke hat geschrieben: Die LFM-Datei (Layout des Frames) scheint nicht zur Unit zu passen. Versuch mal das Projekt erneut in Lazarus zu öffnen (Lazarus ist hier gesprächiger als die Exception im Programm).
Neues Öffnen geht, Compilieren geht, aber beim Start in der IDE kommt diese Meldung.
Leider springt mein Lazarus nicht in die Codezeile die den Fehler auslöst, sondern gibt die Meldung aus und ruft dann das Assembler-Fenster auf.
Irgendwas muß ich da noch einrichten.

Gruß Heiko
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: OnCreate für TFrames

Beitrag von Marsmännchen »

Hi,
die Fehlermeldung ist mir auch völlig unklar (die Fehlermeldung meckert wegen einer Property, aber du hast ja gar keine in deinem Code drin), aber hey, ich bin ja auch noch kein Fachmann.
Mir ist etwas anderes aufgefallen: Wozu brauchst du das OnCreate-Event für den Frame? Willst du private Variablen des Frames initialisieren oder willst du andere Objekte über die Entstehung des Frames in Kenntnis setzen.
Deinen Beispielcode habe ich hier gefunden: http://wiki.freepascal.org/Frames, das ist er doch, oder? So wie ich das sehe, wirst du damit aber kein OnCreate-Event erzeugen, sondern der Konstruktor des Frames übernimmt lediglich eine Teilaufgabe dieses Form-Ereignisses, nämlich das Initialisieren privater Variablen.
Wenn du andere Komponenten über die Entstehung des Frames informieren willst, könntest du händisch das Observerpattern hierfür implementieren und dir quasi dein eigenes Event schreiben. Sowas habe ich selbst schon hinbekommen und könnte ggf. etwas Beispielcode zeigen, falls gewünscht.
Ob das jetzt eine vernünftige Lösung wäre, dazu könnten die Fachleute vielleicht noch etwas sagen :D
Ich mag Pascal...

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1247
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: OnCreate für TFrames

Beitrag von kralle »

Moin,
Marsmännchen hat geschrieben: Mir ist etwas anderes aufgefallen: Wozu brauchst du das OnCreate-Event für den Frame? Willst du private Variablen des Frames initialisieren oder willst du andere Objekte über die Entstehung des Frames in Kenntnis setzen.
Ersteres. Ich ich setze in einem Frame eine Variable in einem Datamodul und die anderen Frames sollen je nach Inhalt der Variablen beim Create oder noch besser beim Show, entsprechende Objekte im Frame aktivieren oder deaktivieren.
Marsmännchen hat geschrieben: Deinen Beispielcode habe ich hier gefunden: http://wiki.freepascal.org/Frames, das ist er doch, oder? So wie ich das sehe, wirst du damit aber kein OnCreate-Event erzeugen, sondern der Konstruktor des Frames übernimmt lediglich eine Teilaufgabe dieses Form-Ereignisses, nämlich das Initialisieren privater Variablen.
Wenn das bedeutet das ich an der Stelle sagen kann TEdit.Enable:=False - dann ist das genau das was ich brauche.

Gruß Heiko
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1247
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: OnCreate für TFrames

Beitrag von kralle »

Moin,
Socke hat geschrieben:Die LFM-Datei (Layout des Frames) scheint nicht zur Unit zu passen.
Wie kann ich feststellen, welche Paarung nicht passt?

Gruß Heiko
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: OnCreate für TFrames

Beitrag von Marsmännchen »

kralle hat geschrieben:...Wenn das bedeutet das ich an der Stelle sagen kann TEdit.Enable:=False - dann ist das genau das was ich brauche.
... dann habe ich wohl doch in die falsche Richtung gedacht und man muss irgendwie rausbekommen, woher der verdammte Fehler stammt...
Ich mag Pascal...

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1247
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: OnCreate für TFrames

Beitrag von kralle »

Moin,

ich habe die Ursache für die Fehlermeldung gefunden.

Im Objektinspektor war beim "OnChange"-Ereignis eine Procedure eingetragen die nicht existierte.
Da wäre eine Fehlermeldung wie "Procedure nicht vorhanden" schöner gewesen.

Jetzt kann ich mich wieder dem OnCreate-Problem zuwenden.

Gruß Heiko
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 1247
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 4.99, FPC-Version: 3.3.1
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: OnCreate für TFrames

Beitrag von kralle »

Moin,

also das mit dem OnCreate funktioniert nicht wie erhofft.
Die Variablen werden nur einmal gesetzt und bekommen keine Veränderungen gefunden - was ja auch logisch ist.
Ich mache dieses Thema jetzt zu.

Gruß Heiko
OS: MX Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1

Antworten