[gelöst] Ich habe eine Frage zur procedure TForm2.FormCreate

Für Fragen rund um die Ide und zum Debugger
Antworten
idefix
Beiträge: 61
Registriert: So 21. Aug 2011, 20:37
OS, Lazarus, FPC: WIN7 /Laz 1,0,8 / FPC 2.6.2/ SVN 40573
CPU-Target: xxBit

[gelöst] Ich habe eine Frage zur procedure TForm2.FormCreate

Beitrag von idefix »

Hallo!

Ich habe eine Frage zur
procedure TForm2.FormCreate(Sender: TObject);

Ich lade in Form1 Vokabeln in das Programm.

In Form2 wird mit diesen Vokabeln in der Procedure FormCreate weitergearbeitet.

Konkret wird in der ComboBox1 ein bestimmter Ausdruck angegeben. Hier z.B. Fach-002

Code: Alles auswählen

ComboBox1.Items.AddObject ('Fach-002', TObject(2)); 
Die Combobox klappt auf und man kann auswählen unter Fach-001, Fach-002 etc.

Dies brauche ich, um in der Abfrage der Vokabeln nur die abzufragen, die in diesem Fach sind.

---------------

Es gibt bei dieser Sache ein Problem:
ich habe wirklich lange Zeit nicht mehr an diesem Programm (oder überhaupt) programmiert. So das ich nicht mehr genau weiß, wie das Programm funktionierte.

Ich erinnere es so, das die procedure TForm2.FormCreate(Sender: TObject);
dann aufgerufen wird, wenn die Form2 mittels Form2.showmodal; aufgerufen wird.
Und das dann die Anweisungen durchgeführt werden.

Es ist jetzt so, das die TForm2.create in der project0028.lpr durchlaufen wird.

Code: Alles auswählen

 
  RequireDerivedFormResource := True;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.Run;
 
end.
 


D.h. aber, das das Laden der Vokabeln aus der Datei in Form1 nach der Form2.create stattfindet.
(Ich erinnere es auch so, das das Laden Vokabeln aus der Datei nicht in einer Form.Create abläuft. Funktionierte bei mir nicht.)

Kann das sein, das ich beim Speichern der Programm-Dateien (project0028; Unit0028.pas Unit0028_1.pas) unter neuem Namen in einen neuen Ordner etwas an der Einstellung der IDE verstellt hat?

Wie gesagt, das Programm lief schonmal vernünftig.

Anbei noch die Kopfzeilen der Dateien.

Datei project0028.lpr

Code: Alles auswählen

 
program project0028;
 
{$mode objfpc}{$H+}
 
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms, Unit0028, unit0028_1, unit0028_2, unit0028_3
  { you can add units after this };
 
{$R *.res}
 
begin
  RequireDerivedFormResource := True;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.Run;
end.
In Unit0028.pas

Code: Alles auswählen

Unit Unit0028;
 
{$mode objfpc}{$H+}
interface
 
und dann irgendwann
 
implementation
 
{$R *.lfm}         
 
 
In Unit0028_1.pas
 

Code: Alles auswählen

unit Unit0028_1;
 
{$mode objfpc}{$H+}
 
interface   
 
dann irgendwann:
 
implementation
 
{$R *.lfm} 
Ich mache mit Absicht ein neues Thema auf, da ich die Fehlerquellen des alten Problems rauskommentiert // habe.

Es wäre nett wenn ihr mir helfen tut!

Danke!

Gruß!
idefix
Zuletzt geändert von idefix am So 7. Apr 2013, 20:51, insgesamt 1-mal geändert.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Ich habe eine Frage zur procedure TForm2.FormCreate

Beitrag von Michl »

Ich erinnere es so, das die procedure TForm2.FormCreate(Sender: TObject);
dann aufgerufen wird, wenn die Form2 mittels Form2.showmodal; aufgerufen wird.
Nein. TForm2.FormCreate wird beim Starten deiner Anwendung durchgeführt, wie du auch selber geschrieben hast:

Code: Alles auswählen

  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);  //hier wird die Form erstellt
Bei Form2.showmodal wird Sie dann aber im Vordergrund angezeigt und man kann sie nutzen.
D.h. aber, das das Laden der Vokabeln aus der Datei in Form1 nach der Form2.create stattfindet.
Das ist nicht richtig. Wenn du beim Event Form1.oncreate deine Vokabeln lädtst, dann sind sie im Speicher, bevor Form2.create stattfindet -> gemäß deiner .lpr!
Lädst du die Daten beim Event .onshow etc. werden diese tatsächlich später geladen. Dies würde ich aber nicht machen, da jedes Mal, wenn die Form1 erneut angezeigt wird, diese Vokabeln erneut geladen würden.
Kann das sein, das ich beim Speichern der Programm-Dateien (project0028; Unit0028.pas Unit0028_1.pas) unter neuem Namen in einen neuen Ordner etwas an der Einstellung der IDE verstellt hat?
Das sollte es auch, zumindest der Pfad sollte geändert sein. Ebenfalls muss man aufpassen, dass alle genutzen Units entsprechend mit geändert werden bzw. deren Pfade, da sonst weiterhin die vorherigen genutzt werden (zum Test kann man das Verzeichnis des alten Projekts woanders hin verschieben, wenn der Compiler dann keine Units vermisst, sollte alles gut sein)

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

idefix
Beiträge: 61
Registriert: So 21. Aug 2011, 20:37
OS, Lazarus, FPC: WIN7 /Laz 1,0,8 / FPC 2.6.2/ SVN 40573
CPU-Target: xxBit

Re: Ich habe eine Frage zur procedure TForm2.FormCreate

Beitrag von idefix »

Hallo!

Es funktioniert jetzt.

Sorry, aber ich weiß nicht wiso. :|

Ich hatte natürlich (nach Deinen Tips) gleich versucht, das ursprüngliche Programm zu verbessern.

Was nicht so schnell klappte.

Jetzt bin ich dabei das ursprüngliche Programm zum laufen zu kriegen.

Vielen Dank!

Gruß!
idefix

Antworten