TFileListBox aktualisiert Filename nur bei Klick [gelöst]

Rund um die LCL und andere Komponenten
Antworten
AlterMann
Beiträge: 221
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 2.0.0 r60307 FPC 3.0.4 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

TFileListBox aktualisiert Filename nur bei Klick [gelöst]

Beitrag von AlterMann »

Guten morgen

Ich verwende in einem kleinen Hilfsprogramm zum Zuschneiden unserer Produktfotos eine FileListbox um die Fotos aufzulisten.
Wenn man eines anklickt, wird es angezeigt und kann zum bearbeiten ausgewählt werden.

Da von jedem Produkt mehrere Fotos geschossen werden um das beste auszuwählen, sind anschließend ca. jeweils 5 Bilder zu löschen (ich verschiebe sie allerdings nur mittels Buttonklick in einen Ordner namens "erledigt")

Wenn ich den zu verschiebenden Dateinamen anklicke funktioniert das wunderbar.
Dann lese ich die Dateinamen mittels UpdateFileList neu ein (weil ja die Datei jetzt weg ist) und setze mittels

Code: Alles auswählen

FileListBox1.ItemIndex:=0;
die Markierung auf die erste Datei.

Wenn ich jetzt den Button zum Verschieben Klicke ist allerdings Filename = "".
Was kann ich tun damit nach dem setzen von ItemIndex der Filename aktualisiert wird?

Hoffe das ist halbwegs verständlich
Schönen Tag
Christian
Zuletzt geändert von AlterMann am Mi 16. Dez 2020, 18:53, insgesamt 1-mal geändert.
Früher war alles besser. Und aus Holz!

Benutzeravatar
theo
Beiträge: 8639
Registriert: Mo 11. Sep 2006, 19:01

Re: TFileListBox aktualisiert Filename nur bei Klick

Beitrag von theo »

Könnte mit diesem schon länger bekannten Problem zusammenhängen

https://forum.lazarus.freepascal.org/in ... ic=21029.0
https://bugs.freepascal.org/view.php?id=24515

Du könntest die Diskussion ja wiederbeleben..

Umschiffen kannst du das ja, indem du FileListBox1.Items[0] nimmst, falls FileName leer ist.

Sieben
Beiträge: 106
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: i386

Re: TFileListBox aktualisiert Filename nur bei Klick

Beitrag von Sieben »

Probier mal statt:

Code: Alles auswählen

FileListBox1.ItemIndex := 0;
den hier:

Code: Alles auswählen

FileListBox1.FileName := FileListBox1.Items[0];
Das setzt auch den ItemIndex entsprechend.

(Und natürlich immer testen, ob da überhaupt noch ein Item drin ist...)

AlterMann
Beiträge: 221
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 2.0.0 r60307 FPC 3.0.4 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: TFileListBox aktualisiert Filename nur bei Klick

Beitrag von AlterMann »

Perfekt!

Code: Alles auswählen

FileListBox1.FileName := FileListBox1.Items[0];
Das war genau was ich gesucht hab (Also andersrum wird ein Schuh draus ;) )

Vielen, herzlichen Dank
Christian
Zuletzt geändert von AlterMann am Mi 16. Dez 2020, 18:56, insgesamt 2-mal geändert.
Früher war alles besser. Und aus Holz!

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

Re: TFileListBox aktualisiert Filename nur bei Klick [gelöst]

Beitrag von wp_xyz »

Das klingt nach Bug in der FileListBox. Denn immerhin ist diese ein Abkömmling von TCustomListbox, da ist es nahliegend und auf keinen Fall verboten, mit dem Setzen von ItemIndex einen Listeneintrag auszuwählen, mit allen Konsequencen für die Spezialisierung in TFileListbox, nämlich dass man nun den entsprechenden String in der Eigenschaft FileName hat.

Wenn ich mir die Quellen von TCustomFileListbox ansehen, dann fehlt mit die überschriebenen Prozedur SetItemIndex, in der das FileListbox-typische ausgeführt werden könnte, nämlich die Methode UpdateSelectedFileName. Baue ich diese ein, dann funktioniert die TFileListbox diesbezüglich richtig.

Könntest du bitte folgendes ausprobieren
  • Suche die Unit Filectrl.pp (im Verzeichnis lcl der Lazarusinstallation)
  • Füge oben im Interface-Teil von TCustomFileList, Abschnitt protected, die "procedure SetItemIndex(AIndex: Integer); override" ein (das "override" nicht vergessen!)
  • Und füge unten im Implemenation-Teil folgende kurzen Code ein

    Code: Alles auswählen

    procedure TCustomFileListbox.SetItemIndex(AIndex: Integer);
    begin
      inherited;
      UpdateSelectedFileName;
    end;
    
Versuche nun, den Dateinamen in deinem Programm durch Setzen von ItemIndex auszuwählen. -- bei mir funktioniert's (siehe Anhang). Wenn's bei dir nicht geht, musst du evtl doch die IDE neu kompilieren (Menü "Werkzeuge").
Dateianhänge
filelistbox_bug.zip
(2.01 KiB) 21-mal heruntergeladen

Sieben
Beiträge: 106
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: i386

Re: TFileListBox aktualisiert Filename nur bei Klick [gelöst]

Beitrag von Sieben »

Der Fix tut wie erwartet bei mir.

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

Re: TFileListBox aktualisiert Filename nur bei Klick [gelöst]

Beitrag von wp_xyz »

Danke fürs Testen. Hab' die Änderung für Lazarus-trunk hochgeladen

Sieben
Beiträge: 106
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: i386

Re: TFileListBox aktualisiert Filename nur bei Klick [gelöst]

Beitrag von Sieben »

Danke ebenfalls, schon gezogen.

Antworten