TMDIChild.Create

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Tabak
Beiträge: 4
Registriert: Mo 22. Apr 2013, 22:23

TMDIChild.Create

Beitrag von Tabak »

Hallo zusammen,

ich hab ein Problem beim Konvertieren eines Delphi Projektes (läuft dort).
Gegeben sind 2 Formulare und ein String (FFilename) welchen ich im 2. Fomular unter den Publicvariablen hinzufüge.
das 2. Form erstell ich unter der Laufzeit so:

Code: Alles auswählen

procedure TMainForm.CreateMDIChild(Name: string;lAnz,lECAT,l2dImage,lRaw: boolean);
var
  Child: TMDIChild;
begin
  //LockWindowUpdate(MainForm.Handle);
  Child := TMDIChild.Create( Application );
  Child.Caption := Name;     
...
  TMDIChild(MainForm.ActiveMDIChild).LoadFileList;  
  //LockWindowUpdate(0);
end;  

Das Projekt lässt sich starten, nur wenn ich eine Funktion ausführen will kommt dieser Fehler:

"... External SIGSEGV ausgelöst. In Datei ... lFilenameWOPath := extractfilename(FFilename);"

oder wenn ich den String FFilname verändern oder in Showmessage ausgeben will:

00403C2A 0000 add %al,(%eax)
00403C2C 0000 add %al,(%eax)
00403C2E 0000 add %al,(%eax)
fpc_ansistr_decr_ref
00403C30 833800 cmpl $0x0,(%eax) // <-- Hier zeigt ein grüner Pfeil drauf
00403C33 7501 jne 0x403c36 <fpc_ansistr_decr_ref+6>
00403C35 c3 ret

Für mich ensteht der Eindruck als läge der Fehler nicht beim String sondern an der Erkennung von TMDIChild(MainForm.ActiveMDIChild)

Unter Dlephi liefs problemlos, wenn ich TMDIChild(MainForm.ActiveMDIChild).LoadFileList; durch IChild.LoadFileList; ersetzte läufts auch wieder.
Liegts am auskommentierten LockWindowUpdate?

Kann mir wer helfen? ich brauche TMDIChild(MainForm.ActiveMDIChild) später wieder in anderen Prozeduren, da mehrere Childs vorhanden sind!

Danke schonmal!

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

Re: TMDIChild.Create

Beitrag von wp_xyz »

Ich glaube, irgendwo gelesen zu haben, dass MDI unter Lazarus nicht funktioniert. Es gibt aber die MultiDoc-Bibliothek, mit der das MDI nachgebaut wird (http://wiki.freepascal.org/MultiDoc/de).

Speziell zu deinem Problem (sofern es nicht durch die allgemeine MDI-Problematik mit Lazarus bedingt ist): Hat MainForm.ActiveMDIChild evtl noch den Wert nil?

Tabak
Beiträge: 4
Registriert: Mo 22. Apr 2013, 22:23

Re: TMDIChild.Create

Beitrag von Tabak »

Danke für die Antwort!

nach

Code: Alles auswählen

 Child := TMDIChild.Create( Application ); schauts so aus:  
 
TMDIChild(MainForm.ActiveMDIChild) = nil
TMDIChild <> nil
MDIChildCount = 0
Ich wer mir mal die MulticDoc anschaun und mir ansonsten was neues überlegen :?
Zuletzt geändert von Lori am So 28. Apr 2013, 11:05, insgesamt 1-mal geändert.
Grund: Highlighter

Antworten