2 Einträge statt 1 mit Items.Append und OpenDialog

Für Fragen rund um die Ide und zum Debugger
Antworten
Gustav Gans
Beiträge: 25
Registriert: Mi 12. Sep 2007, 19:28

2 Einträge statt 1 mit Items.Append und OpenDialog

Beitrag von Gustav Gans »

Code: Alles auswählen

procedure TForm1.OpenDialog1Close(Sender: TObject);
begin
  Form1.CheckListBox1.Items.Append(Form1.OpenDialog1.FileName);
end;
Das ist meine Prozedur, die auch an sich funktioniert, aber irgendwie bekommt die CheckListBox1 immer 2 Einträge gleichzeitig spendiert. Wenn ich im OpenDialog z.B. "test" eingebe und auf OK gehe, dann landet in der CheckListBox 2 mal "test".

Ich habe als Ereignis für die Prozedur "OnClose" genommen vom OpenDialog.

Was nun?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Kann sein, das OnClose fälschlicherweise 2x aufgerufen wird. Mach doch bitte nen Bugreport dazu und viele Wege führen nach rom. Ich weiss nicht warum du das auf eine solche "komische" art machst :)

Im Normalfall funktioniert

if OpenDialog1.execute then
CheckListBox1.Items.Append(OpenDialog1.FileName);

perfekt wie geagt weiss ja nicht was du machen willst
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Gustav Gans
Beiträge: 25
Registriert: Mi 12. Sep 2007, 19:28

Beitrag von Gustav Gans »

Danke. Ich glaube, jetzt habe ich den Fehler verstanden. Ich habe nämlich noch das hier drin (damit rufe ich den Dialog auf):

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.OpenDialog1.Execute;
end;
Das wird wohl der Fehler sein. Aber mit welchem Befehl ruft man denn stattdessen auf Buttonklick einen OpenDialog auf?

Nachtrag: Jetzt habe ich's kapiert:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Form1.OpenDialog1.Execute then
    Form1.CheckListBox1.Items.Append(Form1.Opendialog1.FileName);
end;
Klappt! Aber, was ich noch nicht erwähnt habe: Ich bekomme nach wie vor eine Exception, wenn ich das Programm mit F9 erstelle und dann noch im Debugger im Programm den OpenDialog aufrufe. Dann hängt das Programm und ich muss den Debugger anhalten.
Wenn ich aber nun ins Ausgabeverzeichnis gehe und dort die erstellte .exe aufrufe, kommt keine Exception. Ist das ein Bug, oder habe ich da wieder irgendwo was falsch gemacht?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Gustav Gans hat geschrieben: Klappt! Aber, was ich noch nicht erwähnt habe: Ich bekomme nach wie vor eine Exception, wenn ich das Programm mit F9 erstelle und dann noch im Debugger im Programm den OpenDialog aufrufe. Dann hängt das Programm und ich muss den Debugger anhalten.
Wenn ich aber nun ins Ausgabeverzeichnis gehe und dort die erstellte .exe aufrufe, kommt keine Exception. Ist das ein Bug, oder habe ich da wieder irgendwo was falsch gemacht?
Wenn es OHNE debugger (direkt von der Console gestartet) funktioniert, es gibt da (schön formuliert) noch einige Ungereimtheiten mit den gdb (Debugger) und den Dialogen. Scheint aber in der Bug-Liste irgendwo weit hinten zu liegen.

Momentan liegt da eher Quantität als Qualität bei den Entwicklern an.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Momentan liegt da eher Quantität als Qualität bei den Entwicklern an.
Die Exceptions kommen vom gdb nicht von Lazarus
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Aber der gdb ist eingebaut worden, weiters sind die Dialoge auch Bestandteil des Systems.

Wenn die Dialoge also mit dem gdb nicht funktionieren, dann ist entweder der gdb auszutauschen oder die Dialoge oder ein vernünftiger Workaround zu finden. Es ist mühsam jedesmal zuz hinterfragen, ist ein Problem von mir oder von Lazarus.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Das find ich jetzt ungerecht. Man bedenke Lazarus ist OpenSource und wird freiwillig und in Freizeit betreut. Bezahls mir und ich seh zu das ich die Probleme finde und eliminiere egal ob in gdb oder der LCL oder Freepascal.

Kannst auch Borland oder Codegear das Geld in den Rachen werfen aber ich bezweifel das du da viel weniger Probleme haben wirst.

Ebenso kannst du gern einen neuen Debugger schreiben oder den angefangenen fertig entwickeln.

Aber Meckerei über die Arbeit der anderen an der man sich kostenlos bereichert find ich ungerecht.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6763
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

EOT hier. Geht bei Dies&Das weiter
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten