Form1.Create landet im Nirvana
-
- Beiträge: 5
- Registriert: So 9. Mär 2008, 14:48
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Westmünsterland
Form1.Create landet im Nirvana
Hallo zusammen,
vielleicht kann mir jemand von Euch helfen, dem Problem auf die Spur zu kommen:
ich bin dabei eine kleine Applikation zu entwickeln. Diese zeichnet ein Haus, speziell ein Dach auf den Bildschirm und dieses Dach kann der Anwender "bearbeiten". Bis zu einer entscheidenden Änderung ging auch alles ganz gut. Im Programm gibt es eine Prozedur "Calculate_roof". Diese hatte ich fälschlicherweise zu häufig aufgerufen, so dass das Panel, dass "den Dachstuhl" bildet die "Dacheeindeckung" (eine Paintbox) übermalte. Also habe ich mein Programm durchforstet und "Calculate_roof"-Aufroofe (sorry: Aufrufe) herausgeworfen, bis auf an zwei Stellen, an denen die Dachdimensionen vom Anwender geändert werden.
Von der Programmlogik her auch so richtig.
Anschließend erschien beim Starten des Programms kein Form mehr.
Ich habe jetzt geforscht und festgestellt:
die Initialisierung der Hauptform läuft durch. Wenn ich mit F8 durchsteppe landet der Balken schließlich auf "end." und möchte die system.inc öffnen. Erlaube ich ihm, bzw. gebe den Speicherort an. Das Programmm verzweigt zurück in die Haupt-lpr stellt den Balken auf die zweite Zeile:
Application.CreateForm(TForm1, Form1);
Ich drücke F8 und nichts passiert mehr. Im Win-Taskmanager sehe ich das Programm mit hoher CPU-Nutzung laufen, aber "it never returns".
"Halt" funktioniert, anschließend muss ich den Debugger zurücksetzen, was meist mit dem Absturz von Lazaraus endet.
Form1 hat ein Show-Event:
procedure TForm1.FormShow(Sender: TObject);
var DUMMY:String;
begin
DUMMY:='Hier sind wird';
{Adressdaten einlesen}
Form3Einstellungen.FormShow(Sender);
Memo1.Text:=Form3Einstellungen.Memo1.Text;
Memo1.ReadOnly:=true;
Form2Uebersicht.Memo1.Text:=Memo1.Text;
N_Waagerecht:=1;
N_Senkrecht:=1;
with Paintbox2 do begin
Visible:=false;
Repaint;
end;
Form2Uebersicht.Memo1.Text:=Memo1.Text;
Form2Uebersicht.Memo1.ReadOnly:=true;
Form2Uebersicht.Image1.Picture:=Image3.Picture;
Form2Uebersicht.Show;
Form1.SetFocus;
end;
Die erste Zeile (mit DUMMY) hatte ich eingesetzt, um ein "Start bis Cursor" durchführen zu können, aber da kommt das Programm nicht mehr an.
Ich habe auch ein "Alles neu erstellen" gemacht, um die unit1main.lrs neu zu bekommen, hat aber nixe genützt.
Jetzt hoffe ich, dass mir einer von Euch einen Tipp geben kann, wie ich dem Bug näher komme.
Danke schonmal im Voraus
Robert
Edit: Ich habe mich jetzt mal per F7 in die tiefsten Tiefen von Lazarus begeben, das letzte was ich durchsteppen kann ist in der reader.inc eine Schleife:
for i := 0 to FLoaded.Count - 1 do
TComponent(FLoaded).Loaded;
Leider weiss ich nicht, wie ich an den Wert von Floaded.Count kommen kann, im Evaluate-Fenster komme ich nur an Floaded. Zumindest, wenn ich hier dann F8 festhalte ist auf einmal Schicht. Auch, wenn ich das Programm zurücksetze (Halt, Debuger zurücksetzen) und dann den Cursor auf die anschließende Zeile setzte, dann F4 drücke, ist Schluss. Scheinbar geht es nicht hierüber hinaus. Vielleicht hilft ja diese zusätzliche Info. Danke.
vielleicht kann mir jemand von Euch helfen, dem Problem auf die Spur zu kommen:
ich bin dabei eine kleine Applikation zu entwickeln. Diese zeichnet ein Haus, speziell ein Dach auf den Bildschirm und dieses Dach kann der Anwender "bearbeiten". Bis zu einer entscheidenden Änderung ging auch alles ganz gut. Im Programm gibt es eine Prozedur "Calculate_roof". Diese hatte ich fälschlicherweise zu häufig aufgerufen, so dass das Panel, dass "den Dachstuhl" bildet die "Dacheeindeckung" (eine Paintbox) übermalte. Also habe ich mein Programm durchforstet und "Calculate_roof"-Aufroofe (sorry: Aufrufe) herausgeworfen, bis auf an zwei Stellen, an denen die Dachdimensionen vom Anwender geändert werden.
Von der Programmlogik her auch so richtig.
Anschließend erschien beim Starten des Programms kein Form mehr.
Ich habe jetzt geforscht und festgestellt:
die Initialisierung der Hauptform läuft durch. Wenn ich mit F8 durchsteppe landet der Balken schließlich auf "end." und möchte die system.inc öffnen. Erlaube ich ihm, bzw. gebe den Speicherort an. Das Programmm verzweigt zurück in die Haupt-lpr stellt den Balken auf die zweite Zeile:
Application.CreateForm(TForm1, Form1);
Ich drücke F8 und nichts passiert mehr. Im Win-Taskmanager sehe ich das Programm mit hoher CPU-Nutzung laufen, aber "it never returns".
"Halt" funktioniert, anschließend muss ich den Debugger zurücksetzen, was meist mit dem Absturz von Lazaraus endet.
Form1 hat ein Show-Event:
procedure TForm1.FormShow(Sender: TObject);
var DUMMY:String;
begin
DUMMY:='Hier sind wird';
{Adressdaten einlesen}
Form3Einstellungen.FormShow(Sender);
Memo1.Text:=Form3Einstellungen.Memo1.Text;
Memo1.ReadOnly:=true;
Form2Uebersicht.Memo1.Text:=Memo1.Text;
N_Waagerecht:=1;
N_Senkrecht:=1;
with Paintbox2 do begin
Visible:=false;
Repaint;
end;
Form2Uebersicht.Memo1.Text:=Memo1.Text;
Form2Uebersicht.Memo1.ReadOnly:=true;
Form2Uebersicht.Image1.Picture:=Image3.Picture;
Form2Uebersicht.Show;
Form1.SetFocus;
end;
Die erste Zeile (mit DUMMY) hatte ich eingesetzt, um ein "Start bis Cursor" durchführen zu können, aber da kommt das Programm nicht mehr an.
Ich habe auch ein "Alles neu erstellen" gemacht, um die unit1main.lrs neu zu bekommen, hat aber nixe genützt.
Jetzt hoffe ich, dass mir einer von Euch einen Tipp geben kann, wie ich dem Bug näher komme.
Danke schonmal im Voraus
Robert
Edit: Ich habe mich jetzt mal per F7 in die tiefsten Tiefen von Lazarus begeben, das letzte was ich durchsteppen kann ist in der reader.inc eine Schleife:
for i := 0 to FLoaded.Count - 1 do
TComponent(FLoaded).Loaded;
Leider weiss ich nicht, wie ich an den Wert von Floaded.Count kommen kann, im Evaluate-Fenster komme ich nur an Floaded. Zumindest, wenn ich hier dann F8 festhalte ist auf einmal Schicht. Auch, wenn ich das Programm zurücksetze (Halt, Debuger zurücksetzen) und dann den Cursor auf die anschließende Zeile setzte, dann F4 drücke, ist Schluss. Scheinbar geht es nicht hierüber hinaus. Vielleicht hilft ja diese zusätzliche Info. Danke.
-
- Beiträge: 5
- Registriert: So 9. Mär 2008, 14:48
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Westmünsterland
Hallo Christian,
es gibt keinen von mir geschriebenen OnCreate.
Oder meinst Du das:
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2Uebersicht, Form2Uebersicht);
Application.CreateForm(TSplash, Splash);
Application.CreateForm(TForm4Splash, Form4Splash);
Application.CreateForm(TForm3Einstellungen, Form3Einstellungen);
Application.Run;
?
Könnte ich mit einem selbstverzapften OnCreate-Event dem Fehler näher kommen? Was wäre da sinnvoll?
Gruß
Robert
es gibt keinen von mir geschriebenen OnCreate.
Oder meinst Du das:
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2Uebersicht, Form2Uebersicht);
Application.CreateForm(TSplash, Splash);
Application.CreateForm(TForm4Splash, Form4Splash);
Application.CreateForm(TForm3Einstellungen, Form3Einstellungen);
Application.Run;
?
Könnte ich mit einem selbstverzapften OnCreate-Event dem Fehler näher kommen? Was wäre da sinnvoll?
Gruß
Robert
-
- Beiträge: 5
- Registriert: So 9. Mär 2008, 14:48
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Westmünsterland
Hallo Christian,
das hatte ich bereits gemacht (und mein Ursprungsposting editiert). Es geht irgendwo in die Tiefen der Systemroutinen und dann läuft er in eine Schleife
for i := 0 to FLoaded.Count - 1 do
TComponent(FLoaded).Loaded;
hinter der nix mehr ausgeführt wird. Die Schleife kann ich durchsteppen, hatte dann aber, weil sie wieder und wieder durchlief, den Finger draufgehalten und dann kam der Hänger.
Anschließend habe ich nochmal den Cursor auf die nächste Zeile positioniert, die erreicht er bei erneutem Start nicht mehr...
Schönen Abend und danke
Robert
das hatte ich bereits gemacht (und mein Ursprungsposting editiert). Es geht irgendwo in die Tiefen der Systemroutinen und dann läuft er in eine Schleife
for i := 0 to FLoaded.Count - 1 do
TComponent(FLoaded).Loaded;
hinter der nix mehr ausgeführt wird. Die Schleife kann ich durchsteppen, hatte dann aber, weil sie wieder und wieder durchlief, den Finger draufgehalten und dann kam der Hänger.
Anschließend habe ich nochmal den Cursor auf die nächste Zeile positioniert, die erreicht er bei erneutem Start nicht mehr...
Schönen Abend und danke
Robert
-
- Beiträge: 5
- Registriert: So 9. Mär 2008, 14:48
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Westmünsterland
Hallo Alle, speziell Christian:
habe den Fehler gefunden: ich hatte ein Notebook im Form und rief, da ich mir selbst ein Bein mit dem neugemalten Panel (s.o) gestellt hatte, sowohl in Notebook.OnChange als auch in Notebook.Changing Routinen auf, die zu der Endlosschleife beim Aufbau des Forms führten.
Ich habe die Events "geleert" und jetzt läuft's.
Und das, wo ich schon mit einer neuen Version angefangen hatte und die mir besser gefällt, gnarrgh.....
Ich danke für's Interesse und die Hilfe
schönen Abend
Robert
habe den Fehler gefunden: ich hatte ein Notebook im Form und rief, da ich mir selbst ein Bein mit dem neugemalten Panel (s.o) gestellt hatte, sowohl in Notebook.OnChange als auch in Notebook.Changing Routinen auf, die zu der Endlosschleife beim Aufbau des Forms führten.
Ich habe die Events "geleert" und jetzt läuft's.
Und das, wo ich schon mit einer neuen Version angefangen hatte und die mir besser gefällt, gnarrgh.....
Ich danke für's Interesse und die Hilfe
schönen Abend
Robert