Programmiere seit fast 30 Jahren mit Delphi und bin vor einiger Zeit umgestiegen auf Lazarus. Habe eine Delphi-App (Filmverwaltung) nach Lazarus portiert (manuell!).
Folgendes Problem stellt sich heute:
Ein Grid zeigt mir meine Filme zeilenweise an. Habe eine Korrekturfunktion eingebaut. Diese öffnet ein Formular mit Feldern, in die ich die aktuellen Daten übertrage.
Danach rufe ich das Form mit
FKorrigieren.Showmodal
auf. Funktioniert auch (kann, während das Korrekturform sichtbar ist, nicht in das Hauptform klicken) - wie ich das von Delphi her kenne.
ABER: Wenn ich das Korrekturform schließe, läuft der Programmcode nicht ab der nächsten Zeile nach FKorrigieren.Showmodal weiter (habe dort einen Breakpoint gesetzt).
Schließe ich allerdings das Hauptformular (Programm beenden), dann steht der Ausführungspunkt auf meinem Breakpoint (was ich natürlich nicht möchte, denn ab dort sollen ja die Veränderungen, die ich im FKorrigieren-Form gemacht habe, gespeichert werden). Ist das ein Lazarus-Bug oder ein normales Verhalten von Lazarus? Falls normal - wie bekomme ich das dann in den Griff?
Hat jemand eine Idee, warum sich Lazurus SO verhält? Von Delphi kenne ich das nicht.
Vielen Dank im voraus für eure Hilfe.
Hier ein Code-Ausschnitt zum besseren Verständnis:
Code: Alles auswählen
procedure TFHaupt.buKorrigierenClick(Sender: TObject);
var
abgebrochen : boolean;
korrektur_id : integer;
s : string;
begin
application.CreateForm (TFKorrigieren, FKorrigieren);
FKorrigieren.Caption := 'Film-Info für ' + qu.FieldByName('titel').asstring + ' (Esc zum Schließen)';
FKorrigieren.teHDName.text := qu.fieldbyname ('hdname').asstring;
FKorrigieren.tedatum.text := qu.fieldbyname ('datum').asstring;
FKorrigieren.tejahr.text := qu.fieldbyname ('jahr').asstring;
FKorrigieren.liformat.itemindex := FKorrigieren.liformat.Items.IndexOf (qu.FieldByName('format').asstring);
FKorrigieren.tetitel.text := qu.fieldbyname ('titel').asstring;
FKorrigieren.tebemerkung.text := qu.fieldbyname ('bemerkung').asstring;
FKorrigieren.tegenre.text := qu.fieldbyname ('genre').asstring;
FKorrigieren.meinfo.text := qu.FieldByName('info').asstring;
FKorrigieren.showmodal; //BIS HIERHER ALLES OK - Form wird modal angezeigt[/color]
abgebrochen := FKorrigieren.modalresult = mrcancel; //HIER HABE ICH BREAKPOINT GESETZT - allerdings komme ich erst hierher, wenn das Hauptform geschlossen wird!
if abgebrochen then
begin
FKorrigieren.free;
exit;
end;
// Daten wurden bereits auf Gültigkeit im FKorrigieren geprüft - alles ok
// Datensatz updaten
with FKorrigieren do
begin
s := 'UPDATE `titel`, `datum`, `format`, `jahr`, `genre`, `bemerkung`, `info`, `hdname`, ' +
'VALUES (' +
#39 + tetitel.text + #39 + ... ... ... USW USW