Autor Beitrag
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 12.04.18 14:54 
- Nachträglich durch die Entwickler-Ecke gelöscht -
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 169
Erhaltene Danke: 9



BeitragVerfasst: Do 12.04.18 15:00 
Danke jaenicke, Funktion Max war mir unbekannt. Nach Einfügen der Uses Math funktioniert mein Programm mit den Änderungen von Holgerx bestens. Es werden nun alle Dateien angezeigt. Zumindest hatte ich auf meinem Rechner bisher noch keinen Ordner bei dem Fehler aufgetreten sind.
Allerdings - und dies bitte nicht als Kritik - durch das zweimalige Laden ist bei großen Verzeichnissen der Geschwindigkeitsverlust spürbar - zumindest im Vergleich zum Dateimanager. Es gibt also "effizientere" Methoden.

Nachtrag:
Noch ein Letztes, bevor ich dieses Thema schließe. In meinem Beispiel steht etwas versteckt noch eine zweite unbeantwortete Frage:
Während ich mit Image.Hint die Dateiparameter anzeigen kann, fehlt mir noch die Lösung beim TlistItem; dort gibt es kein Hint. Ich habe schon einiges probiert, z.B
item.SubItems.Add('Text'); Aber der Text erscheint nicht beim Zeigen aufs Item. Welche schreibweise erzeugt einen "Hint-Effekt"?
Möchte mich dieser Stelle nochmals ganz herzlich für die großartige Unterstützung bedanken !!!
MfG hRb
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 12.04.18 16:41 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Holgerx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55
Erhaltene Danke: 22

Win95 - Win8.1 / MSServer2000 - MSServer2012
Delphi 6pro / XE4
BeitragVerfasst: Fr 13.04.18 09:03 
Hmm..

user profile iconhRb hat folgendes geschrieben Zum zitierten Posting springen:

Allerdings - und dies bitte nicht als Kritik - durch das zweimalige Laden ist bei großen Verzeichnissen der Geschwindigkeitsverlust spürbar - zumindest im Vergleich zum Dateimanager. Es gibt also "effizientere" Methoden.


Alles kann 'Optimiert' werden!

Jedoch haben wir anhand des Dateinamens keine Proportionen (Größe) des Bildes, um vorab zu berechnen, ob wir die Höhe oder die Breite der ImageList als Max für GetThumbnail brauchen..

Der Zweite Aufruf von GetThumbnail wird ja auch nur gemacht, wenn das Thumbnail zu hoch sein würde bei Generierung mit der Breite der ImageList...

Dies ließe sich nur optimieren, indem Du vor GetThumbNail die Größe des Bildes ermittelst, jedoch ist es hier dann meist notwendig das gesamte Bild einzulesen und auch der entsprechenden Graphic dann die Höhe und breite auszulesen.
Alternativ kannst Du natürlich eine optimierte Einlese-Routine für die 'verschiedenen' Headers der Images schreiben, um so nur immer den Anfang einzulesen. Dies jedoch dann für jedes Grafik-Format separat (BMP/JPG/PNG/GIF....).

Eine weitere Option würde sein, dass Du 'immer' ein zu großes ThumbNail generieren läst und dieses dann mit StrechDraw nochmals auf die maximale Einpassgröße runter reduzierst. Was nun wirklich schneller ist, k.A.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 169
Erhaltene Danke: 9



BeitragVerfasst: Fr 13.04.18 19:55 
Hallo Frühlingsrolle,
Dein Vorschlag Listview.Hint zu benutzen ist eine Option. Allerdings ist hierzu ein Maus-Klick erforderlich, erfüllt also nicht ganz exakt die Hint-Funktion. Wenn die einzelnen Item kein Hint haben, müsste man wohl die Mausbewegung auszuwerten. Dies ist im Moment aber nicht mein Hauptziel.
Wer die Diskussion hier verfolgt dem sei gesagt: Auf der Basis Deines Vorschlags und der folgenden kleinen Abänderung erscheinen Dateigröße und Dateidatum als Hint-Info.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.ListView1Click(Sender: TObject);
var i:integer;
begin
 if ListView1.ItemFocused <> nil then
//    ListView1.Hint := ListView1.ItemFocused.Caption;
  with StringGrid1 do begin
   i:= ListView1.ItemIndex + 1;
   ListView1.Hint:=
     Cells[1,i] +#10 + 'Byte=' +    //Dateiname +
     Cells[2,i] +#10 + Cells[3,i];  //Dateigröße + Datum
  end;
end;

Zum Thema Optimierung gibt es sicherlich Potential. Im Hinblick auf die erwähnten Create und Free in der Schleife der Procedure ButtonFuelleListViewClick gebe ich zu, dass ich die empfohlenen Anweisungen einfach in eine Schleife setzte. Andererseits hatte ich vor den Änderungen von Holgerx - als ich Create einmalig vor der Schleife aufrief - permanent Laufzeit-Error. Allerdings habe ich den Laufzeitfehler nicht nachhaltig untersucht. In meiner neuesten "optimierten" Version (Create nur einmal) tritt der Fehler nicht mehr auf. Werde dies beobachten!
Ansonsten bitte ich meinen Einwand zur Optimierung nicht zu ernst zu nehmen. Ich habe einen Ordner mit ca. 300 Bildern mehrfach aufgerufen und durchaus akzeptable Zeiten erreicht. Vielleicht lief beim ersten Test noch etwas im Hintergrund.

Was mir nach dem ersten Hurra allerdings noch auffällt ist, dass z.B. die Icons von Nicht-Grafikdateien in der Listview-Darstellung aufgebläht wird auf 160 x 120 Pixel, während es in der Image-Darstellung in Originalgröße (klein) bleibt. Werde mir die AddThumb-Funktion nochmal genauer ansehen, ob dies anzupassen geht.
Zunächst möchte ich aber mit Vorrang mein Hauptziel weiter verfolgen - die optische Sortierung und danach Umbennnennung von Dateien. Vielleicht kann ich demnächst ein kleines Tool vorstellen.
Gruß hRb
Holgerx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55
Erhaltene Danke: 22

Win95 - Win8.1 / MSServer2000 - MSServer2012
Delphi 6pro / XE4
BeitragVerfasst: Sa 14.04.18 11:44 
Hmm..

user profile iconhRb hat folgendes geschrieben Zum zitierten Posting springen:

Was mir nach dem ersten Hurra allerdings noch auffällt ist, dass z.B. die Icons von Nicht-Grafikdateien in der Listview-Darstellung aufgebläht wird auf 160 x 120 Pixel, während es in der Image-Darstellung in Originalgröße (klein) bleibt. Werde mir die AddThumb-Funktion nochmal genauer ansehen, ob dies anzupassen geht.


Bedenke bitte, das die Icons nicht von AddThumb erstellt werden, sondern direkt, wenn AddThumb scheitert.

Zitat:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
    if not AddThumb(s, ImageList1) then
    begin // Icon der Nicht-Grafik-Datei  nach Frühlingsrolle
      ico := TIcon.Create;
      try
        GetFileIcon(s, ico); // gibt das Icon der momentanen Anwendung
        ImageList1.AddIcon(ico);
      finally
        ico.Free;
      end;
    end;


Wenn Du hier, wie in AddThumb, das Icon auf ein Zwischen-Bitmap malen würdest, statt direkt mit AddIcon zuzuweisen, dann würde das Icon auch die Original-Größe haben, jedoch bei 32x32 Pixel auf einem 160x120 Pixel Bitmap würde dies recht klein sein.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 169
Erhaltene Danke: 9



BeitragVerfasst: Fr 15.06.18 22:52 
Hallo Entwickler-Gemeinde,
Meine Frage ist ja schon seit geraumer Zeit beantwortet. Höchste Zeit das Thema zu schließen (werde es morgen tun). Ich habe solange gewartet,
weil Frühlingsrolle schrieb:
Zitat:
Jetzt fehlt nur noch ein funktionstüchtiges Anwendungsbeispiel. :gruebel:

Also habe ich getüfftelt, es liegen lassen und immer wieder verbessert. Als Anhang kann ich heute eine lauffähige Anwendung zum Sortieren und Umbenennen von Dateien beifügen. Selbstverständlich habe ich noch eine Menge Fragen zu Listview, die zu Verbesserungen führen könnten. Diese will ich wegen der Länge dieses Beitrages und zur Trennung der Probleme jedoch in getrennten Fragen stellen. Werde mich aber in den Zusatzfragen auf diese Anwendung beziehen. Vielleicht kann/will jemand das Programm selbst nutzen bevor man eine Profiprogramm kauft. (siehe Anlage).
Allen Helfern nochmals Danke. hRb
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18709
Erhaltene Danke: 1621

W10 x64 (Chrome, IE11)
Delphi 10.2 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 16.06.18 08:35 
Dort könntest du übrigens gut die Ribbonbar einsetzen. Dann sähe es etwas moderner aus und du könntest die verschiedenen Möglichkeiten gruppiert unterbringen, wenn es später mehr werden.
Aber es ist schon gut gemacht, auch wenn es noch nicht viele Möglichkeiten bietet.

Was mir beim Umbenennen von Dateien fehlt sind Regular Expressions. Ohne die hilft mir solch ein Programm leider nichts. Denn damit kann ich den Dateinamen nach meinen Regeln auseinander nehmen und anders wieder zusammensetzen.

Und statt nur ganze Ordner auswählen zu können würde ich auch einfach einzelne Dateien drauf ziehen lassen.

Gut finde ich, dass du auch eine Vorschau drin hast.

user profile iconhRb hat folgendes geschrieben Zum zitierten Posting springen:
Vielleicht kann/will jemand das Programm selbst nutzen bevor man eine Profiprogramm kauft. (siehe Anlage).
Kaufen muss man das nicht, das gibt es für private Zwecke auch kostenlos (mit Bitte um Spenden):
www.advancedrenamer.com
Das benutze ich mit Regular Expressions dann z.B. (als ganz einfaches Beispiel) so, diese Möglichkeit würde ich auf jeden Fall einbauen:

AdvancedRenamer
Einloggen, um Attachments anzusehen!
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 169
Erhaltene Danke: 9



BeitragVerfasst: Sa 16.06.18 14:07 
Hallo Jaenicke,
so ganz habe ich Deinen Hinweis mit den "Regular Expressions" noch nicht verstanden (Begriff noch nie gehört). Mit meiner Formel
[N6-8][N1-5][N9-30] oder [C] [N1-5][N9-30] (beachte Blank als Textzeichen dazwischen) erreiche ich das gleiche Ergebnis wie bei Deinem Beispiel. Dabei erscheint mir meine Formel etwas verständlicher. Ist allerdings nur der erste Eindruck. Muss mir das genannte Programm mal laden und genauer ansehen. (Hab ich inzwischen - jedoch nicht so genau)
Allerdings, eines sehe ich schon jetzt: Mein Hauptziel liegt nicht im Umbenennen. Ich will zuerst sortieren (Bilder) und da brauche ich für jede Datei das Vorschaubild. Das kommt beim Advanced Renamer etwas kurz. Ich werde mir aber überlegen die Ansichten komplett umzuschalten (von StringGrid auf Listview) Dann habe ich mehr Fläche zum Verschieben der Bilder und auch einige andere Probleme (siehe neue Zusatzfragen) weniger. Aber danke für Tipp.
Gruß hRb
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18709
Erhaltene Danke: 1621

W10 x64 (Chrome, IE11)
Delphi 10.2 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 16.06.18 17:38 
Stell dir einfach vor du hättest folgende Dateinamen:
Test 02 - blub.txt
Einerlei 04 - auweia.txt
Obstsalatschale 08 - nix.txt

Mit der Regular Expression funktioniert das ganz genauso wie das erste Beispiel. Dein Ausdruck wird damit vermutlich aber nicht mehr funktionieren.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 169
Erhaltene Danke: 9



BeitragVerfasst: So 17.06.18 14:29 
Hallo jaenicke, Du hast mich überzeugt. Ich hoffe in Deinem Verweis auch einen PascalCode zu finden. Gruß hRb
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18709
Erhaltene Danke: 1621

W10 x64 (Chrome, IE11)
Delphi 10.2 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 17.06.18 16:34 
In aktuellen Delphiversionen gibt es dafür TRegEx.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1179
Erhaltene Danke: 96

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: Di 19.06.18 17:11 
Ich will dich auf keinen Fall davon abhalten selber, was vieleicht viel besseres, zu entwickeln, aber als weitere Inspiration schlage ich mal Irfan View vor.
Du kannst Bilder, umbenenen, konvertieren, sortieren, ...
Ich bin Hobbyfotograf, über die Jahre ist einiges zusammengekommen was sortiert werden musste, ich kann mir kein Leben ohne Irfan View vorstellen. :P

_________________
Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.