Autor Beitrag
hRb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 267
Erhaltene Danke: 12



BeitragVerfasst: Fr 15.06.18 23:41 
Hallo zusammen,
Unter der Frage "ImageList - schnelle Anzeige" habe ich zum Abschluss ein lauffähiges Beispiel beigefügt. Dort wird eine StrinGrid-Liste mit Dateinamen angezeigt und in einer Listview die zugehörigen Icons. Die beiden Listen sind in ihrer Reihenfolge synchron.
Mein Wunsch ist diese beiden Ansichten optisch zu synchronisieren. D.h. wird in StringGrid eine Zeile angeklickt (sie färbt sich ein), so soll das Icon in der Listview markiert werden und in den sichtbaren Bereich verschoben werden. Genau so auch umgekehrt: Item anklicken bewirkt StringListzeile markieren.
Hinweis: Row in StringGrid entspricht ItemIndex in der Listview. Hat jemand eine Idee?
Danke und Gruß hRb
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 16.06.18 18:13 
Ich hatte gerade unter ListView Item EnsureVisible funktioniert nicht eine ähnliche Frage beantwortet (wenn auch für C#). Aber mit den Stichworten "EnsureVisible", "TopItem" und evtl. "ScrollTo(View)" müßtest du auch bei den VCL-Controls weiterkommen.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 267
Erhaltene Danke: 12



BeitragVerfasst: Mi 07.11.18 23:22 
Hallo Th69 und alle im Forum,
mit Ensurevisible und ScrollTo bin entweder ich gescheitert oder mein Delphi Berlin 10.1 wollte meinen Code nicht compilieren. Aber mit
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
// StringGrid in Bildmitte scrollen
  with StrinGrid1 do begin 
   vScroll:= Arow - ((VisibleRowCount-5div 2);
   visible:=false;  // zur Beschleunigung
     Perform(WM_VSCROLL, SB_TOP, 0); 
     for i:=2 to vScroll{ARow} do
     Perform(WM_VSCROLL, SB_LINEDOWN, 0); 
   visible:=true;
  end;

funktionierte es. Damit war aber nur ein Teil meines Problems gelöst. Lange habe ich benötigt, um auch optisch die Objekte gleichzuschalten.
Mir wurde bei vielen Fragen in diesem Forum geholfen. Oft war es ein Rat, manchmal fertige Befehlsfolgen. Als Autodidakt war ich immer für lauffähigen Code dankbar. Deshalb stelle ich für andere nun mein über viele Monate entwickeltes Programm zur Verfügung (siehe Anhang). Es eignet sich zum Sortieren und Umbenennen von Bildern. Im Code finden sich zahlreiche Lösungen für unterschiedliche Fragen die ich in letzter Zeit hier gestellt habe. Vielleicht ist nicht immer alles elegant gelöst, aber funktionsfähig. Im zip-Ordner sind alle Dateien enthalten (übersetz mit Berlin 10.1, ebenso eine lauffähige exe).
Anmerkung: ich habe zwar mit Delphi7 begonnen, inzwischen sind jedoch Objekte enthalten, die mit D7 nicht mehr compilierbar sind. PS: einige Wünsche bleiben dennoch.
Mein besonderer Dank gehen an Frühlingsrolle und jaenicke.
hRb
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: Mathematiker
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 08.11.18 20:34 
- Nachträglich durch die Entwickler-Ecke gelöscht -
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 267
Erhaltene Danke: 12



BeitragVerfasst: So 11.11.18 21:45 
Hallo Frühlingsrolle,
Zitat:
Ein Problem beim Neuladen eines Ordners habe ich feststellen müssen:

Nun, im Grunde macht das Programm das was es soll: in der FileListBox stehen alle Dateien des eingelesenen Ordners, während über die FilterComboBoxErw (Parameter Filter) lediglich die Auswahl selektiert wird. Solange ins angewählte Verzeichnis nicht durch andere Programme (z.B. Explorer) keine neuen Dateien hinzukommen oder gelöscht werden, besteht also überhaupt kein Anlass die Funktion "OrdnerNeuLaden" anzustoßen (dafür war sie gedacht = Kurzanwahl).
In FilterComboBoxErw.Filter stehen feste, vorgegebene Dateiendungen zur Auswahl. Als Erkennungsmerkmal für das Freie-Filter habe ich '*.' gewählt. Nach Aktivierung nutzt das Programm als Erweiterung die Werte aus Edit1.Text (standardmäßig würde es '*.' nutzen, also keine Dateianzeige). Genau dies geschieht jedoch beim OrdnerNeuLaden.

Dennoch, ich gebe ich, '*.' ist unglücklich gewählt. Das "Problem gegen Fehlbedienung" ist jedoch leicht zu beheben:
1. Ersetze in der FilterComboBoxErw.Filter den Teiltext 'Filter frei wählen (*.)|*.' gegen 'Filter frei wählen (*.**)|*.**', also zweimal ** im Suffix. Damit sollte das Problem weg sein.
2. Wichtiger erscheint mir den Meldetext zu verbessern, nämlich in:
'Dieses Verzeichnis ist entweder leer oder enthält keine Dateien mit der gewählten Dateiendung. ' + FileListBox1.Mask + ' Eventuelle Unter-Verzeichnisse werden hier nicht angezeigt.'

Danke für die weiteren Tipps. Verstehe nicht, warum man diese Art der Positionierung in der Hilfe nicht findet. Genannte Befehle funktionieren, sind vielleicht auch ein wenig schneller, allerdings scrollt meine Befehlsfolge das markierte Objekt in Bild-Mitte, während die vorgestellten Löungen u.U. am unteren oder oberen Rand "kleben".
hRb
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 14.11.18 00:40 
- Nachträglich durch die Entwickler-Ecke gelöscht -