• Vor ein paar Tagen bin ich auf FotoSort von @Oscar gestoßen.
    Ich sortiere regelmäßig viele Bilder in verschiedene Verzeichnisse. Bisher habe ich dazu ACDSee als Bildbetrachter auf dem einem Monitor und 4 geöffnete Datei-Explorer mit den Zielordnern auf der anderen Seite.

    Das war dann mit Oscars Programm viel einfacher - und fehlerfreier.

    Warum?
    Warum habe ich dann eine Neuauflage davon geschrieben?
    Nun, FotoSort stammt z.B. aus 2013. Damals hatte noch nicht jeder hochauflösende Monitore. Nun war mir z.B. die feste Fenstergröße von FotoSort zu klein.
    Mit Größenanpassung wäre doch schön.
    5 Pfade sind auch wenig - gerade wenn man dank Größenanpassung mehr Platz hat ...

    Außerdem war es ein gutes Projekt um zu lernen - meine erste GUI mit gelungener Größenanpassung, das erste mal Drag'n Drop, Mausrad, GUI mit Transparenz ... und vieles mehr. Ich schreib sonst fast nur Kommandozeilentools für die DOS-Box.

    Features:

    • Größe des Fenster anpassbar + maximiert
    • Anzahl der Zielordner nur von der Bildschirmauflösung abhängig
    • Bild vor/zurück auch per Mausrad
    • Drag'n Drop für alle Pfade und das aktuelle Bild mit Pfaden und Dateien
    • Neben Kopieren auch Verschieben des Bildes
    • Suffix für Umbenennen frei wählbar
    • Bildliste ist alphabetisch sortiert
    • Nachfragen Dialog mit Bildvorschau wenn Datei schon vorhanden
    • Sicherung der letzten Sitzung
    • Hilfe
    • Dateiliste als TXT ausgeben
    • Optisches Feedback von dem was man zuletzt gemacht hat
    • Direkte Tastenbedienung (1, 2, 3 ...) für Kopieren, mit zusätzlich Alt verschieben, Entf für Löschen (in Papierkorb)

    Noch zu tun (Features):

    • auch animierte GIF anzeigen
    • GUI DPI Anpassung (ist im Quellcode, hat aber nicht funktioniert, Windows hat bei mir einfach alles gezoomt)

    Bugs:

    • Dateisuche findet nicht nur Test.jpg sondern auch Test.jpg.txt
    • Windows 7: Wenn man auf Start oder Ende klickt geht das Mausrad nicht mehr. Ein Bild weiter geht es wieder?
    • Das Verhalten der Vorschau bei der Größenänderung der GUI ist von Rechner zu Rechner höchst unterschiedlich (funktioniert im Endeffekt aber)

    Die Einstellungen werden in der Registry gespeichert. Der Reset-Button löscht diese Einträge wieder.


    Screenshots:

    FotoSort2017_01.pngFotoSort2017_02.pngFotoSort2017_03.pngFotoSort2017_04.pngFotoSort2017_05.png

    Als Download findet Ihr zum einen nur die -au3 als auch eine .zip welche zusätzlich das Programm-Icon und eine ausführbare .exe enthält


    Danksagungen:

    Nachwort:
    Puhh, gefühlt waren da teilweise einige Klimmzüge von Nöten damit das Programm das macht was es soll. Gerade die Reaktionen der Messages haben sich teilweise ganz verändert nachdem ich etwas neues eingebaut hatte. Nun bin ich froh endlich diesen Stand erreicht zu haben - und freue mich auf die "Animierte GIF" Umsetzung.


    Nun bin ich gespannt auf Fehler die Ihr findet - und auf Verbesserungsvorschläge.
    Und vielleicht ist dem einem oder anderen das Programm auch einfach nur genauso nützlich wie mir.


    BLinz

    Update 28.09.2017:

    Neue Version mit der Unterstützung von animierten GIF,

    Verhält sich nicht immer perfekt beim Wechseln der "Engine" für die Darstellung.

    Und manchmal Komisch bei intensiver Größenänderungen + schnellen Bildwechseln (z.B. per Mausrad)

    => 3-geteilt inclusive GIFAnimation.au3 und xResources.au3

  • Erstmal: Sehr schön gelungen! Ich sortier lieber manuell, aber falls man zu viele Bilder dafür hat, bestimmt nützlich (vielleicht mach ich ja auch mal mehr fotos :D)
    Auch schön, dass du versuchst, an alles zu denken.

    Hier ein paar Tipps:

    BUGS:
    Dateisuche findet nicht nur Test.jpg sondern auch Test.jpg.txt
    Zeile 1680 den Regulären Ausdruck ändern zu:
    (?m)(?i).+\.(BMP|DIB|RLE|JPG|JPEG|JPE|JFIF|GIF|EMF|WMF|TIF|TIFF|PNG|ICO)$
    $ steht für das ende des strings, mit (?m) vorne zusätzlich auch für ein Zeilenende.
    Weiß grad nicht, ob für jede Datei das Pattern durchgegangen wird, schaden sollte es nicht :)
    Dadurch wird dafür gesorgt, dass nur ein .*** am ende gefunden wird.

    Codestyle:
    1. Ich würde die ASCII-Art Funktionskommentare rausnehmen. Die sorgen nur dafür das das Script unnötig groß wird.
    Scrollen ist so denke ich schon schwer genug. SCITE4AutoIt hat dafür extra unter Tools->SciteJump eine nette möglichkeit, Funktionen schnell zu finden.
    Die sortierung der Funktionen ist aber super :)
    2. Insbesondere, wenn so viele externe Ressourcen eingebunden werden, würde ich sie in ein weiteres Script einlagern. Das sind Funktionen die werden einmal erstellt und dann nie wieder angefasst.
    Deshalb kann man sie getrößt auslagern und dann mit #include einbinden. Das sorgt für mehr Übersichtlichkeit, insbesondere, wenn du noch daran arbeiten möchtest.
    Außerdem wiederholt sich da in jeder Funktion der gleiche Code, das schreit geradezu nach optimierung, wo nur der Resource-String und Filename übergeben wird ;)
    3. An einigen Stellen sieht man noch sehr ähnlichen Code mit nur geringfügig geänderten Variablewerte,...
    den würde ich persönlich in ein Array packen und dann in einer Schleife durchlaufen, das spart an der Stelle, wo bearbeitet, also auch nachgedacht wird, viel Platz und ist übersichtlicher.
    Das ist aber eher fürs nächste Projekt, bevor du hier alles änderst ;)
    z.B.: Zeile 213-241, 270-309, 278-1095, Die ganzen ressource natürlich (siehe oben), 1420-1455, ....

    Ich denke du könntest das Script damit auf 1/3 oder 1/4 der größe bringen und dadurch effektiver arbeiten, aber das ist meine Meinung :)
    (Hat bei mir ne weile gedauert, bis ich das soweit hinbekommen habe. Mich in deinem Script besser zurechtzufinden würde ne weile dauern :D)

    MfG Kanashius

  • Bugs: Das $ am Ende war was fehlte, ein (?m) braucht es glaube ich nicht.
    Die Vorschau/Test meines RegExBuddy war diesmal auch nicht wirklich hilfreich.

    Ich würde die ASCII-Art Funktionskommentare rausnehmen. Die sorgen nur dafür das das Script unnötig groß wird

    Naja, ich programmiere (oder besser: Skripte) in vielen Sprachen - SciTE Jump ist immer das erste was ich starte, doch den habe ich eben nur in SciTE (welches ich liebe und schätze), sonst schreibe ich in Notepad++
    Solange die ASCII-Banner das Programm nicht langsamer machen ...
    Ist aber eindeutig Geschmackssache - genau wie das ich die Funktionen immer oben habe (habe ich mir wohl bei VB so angewöhnt)

    Insbesondere, wenn so viele externe Ressourcen eingebunden werden, würde ich sie in ein weiteres Script einlagern

    Das klingt sinnvoll, auch wenn ich immer gerne alles in einem Script habe

    3. An einigen Stellen sieht man noch sehr ähnlichen Code mit nur geringfügig geänderten Variablewerte,...

    Tja, das ist immer der Punkt wo ich bei anderen Staune wie die das wieder so klein / kurz hinbekommen haben ( neben dem Stauen was für Funktionen die ausgegraben haben)
    Wobei - 213 bis 241: Mein Funktion für die "Button aktiv/nicht aktiv" ist 3 Zeilen kürzer als die von Oscar - dem stehen 0 Kommentare bei Oscar und 7 Zeilen bei mir. Und ich habe noch die Zusatzfunktion mit den optischen Rahmen drin und die Platzraubende If-Then Schreibweise

  • Nun bin ich gespannt auf Fehler die Ihr findet - und auf Verbesserungsvorschläge.
    Und vielleicht ist dem einem oder anderen das Programm auch einfach nur genauso nützlich wie mir.

    Fehler finde ich eh nicht. :saint: Style und Design ist immer so am besten, wie es dem Entwickler gefällt.

    Ich möchte erst mal Danke sagen. Danke für die Bereitstellung des Codes.

    Das Programm würde ich allerdings anders benennen. Oscar hat seine Fassung. Du Deine. Wenn man in Google sucht und sich nicht auskennt, ist ein einziger Name für 2 verschiedene Programme nicht unbedingt förderlich, weil man von 2 verschiedenen Autoren Resulate erzielt.

    Als Verbesserungsvorschlag:

    1. Etwas zur Erstellung der Filelist.

    - Anzahl der gesamten Dateien ausgeben
    - Größe aller Dateien ausgeben
    - Speicherort von  Local $_s_FilenamesTXT = @TempDir & "\" & StringReplace(StringReplace(GUICtrlRead($id_InputSourceDirectory), "\", "-"), ":", "-") & ".txt" nach ScriptDiR\Data\Dateiname.txt wechseln.

    Mir persönlich gefällt die Ausgabe der FieleList am besten, wie sie die Konsole (cmd) mit diesen Parametern ausgibt. Ist aber Geschmacksache.
    $_s_FilenamesTXT= RunWait(@ComSpec & ' /c ' & 'dir /n /os /4 /s > fileindex.txt' & '"', $makefileindextxt, @SW_HIDE)

    2. Wenn die Hilfe aufgerufen wird, kann diese nicht abgebrochen werden. Das Programm auch nicht. Man benötigt den Taskmanager.

    Insgesamt finde ich, Du hast das Programm sehr gut erweitert. :thumbup: Was ich richtig klasse finde ist die Größeanpassung und die Speicherung der letzten Sitzung. :klatschen:

  • Das Programm würde ich allerdings anders benennen. Oscar hat seine Fassung. Du Deine. Wenn man in Google sucht und sich nicht auskennt, ist ein einziger Name für 2 verschiedene Programme nicht unbedingt förderlich, weil man von 2 verschiedenen Autoren Resulate erzielt.

    Naja, ich wollte damit schon Oscars Original "ehren", die Ähnlich der Programm, auch optisch, ist ja nun frappierend. Weshalb ich ja auch gleich in der ersten Zeile auf das Original verweise.
    Eine kleine Testsuche bei Tante Google ergab das es einige andere Produkte und Programme mit gleichen Namen gibt. Grenzt man die Suche ein so erscheint Oscar zuerst.
    Soll sich Oscar zu äußern.

    1. Etwas zur Erstellung der Filelist.
    - Anzahl der gesamten Dateien ausgeben
    - Größe aller Dateien ausgeben
    - Speicherort von Local $_s_FilenamesTXT = @TempDir & "\" & StringReplace(StringReplace(GUICtrlRead($id_InputSourceDirectory), "\", "-"), ":", "-") & ".txt" nach ScriptDiR\Data\Dateiname.txt wechseln.

    Anzahl - ok könnte ich an das Ende oder den Anfang setzten - kein Problem.
    Größe ... da hatte ich schon drüber nachgedacht. Aber wenn er dann bei 13.000 Dateien in einem Ordner FileGetSize() durchführt wäre der ganz schön beschäftigt / auf der Platte am Rödeln. Und deshalb hatte ich es wieder verworfen.
    Speicherort: Wiederum Absicht. In dem Temp-Ordner darf man immer schreiben, in den Script-Ordner nur vielleicht. Ggf. vorher einen Dialog - wobei man dann nicht mehr auf Knopfdruck die Liste hätte. Die ja im Standard-Editor für Textdateien geöffnet wird (bei mir Notepad++) - und man kann sie ja dann noch woanders hinspeichern. Falls ich doch noch mal einen extra Setup-Dialog einführe könnte man dort einen Pfad angeben.

    2. Wenn die Hilfe aufgerufen wird, kann diese nicht abgebrochen werden. Das Programm auch nicht. Man benötigt den Taskmanager.

    Hatte ich als nicht so schlimm angesehen, stimmt aber. Ich lasse mir etwas einfallen um diese abzubrechen (2. Button)

    Danke für das Testen!

    • Offizieller Beitrag

    Naja, ich wollte damit schon Oscars Original "ehren", die Ähnlich der Programm, auch optisch, ist ja nun frappierend. Weshalb ich ja auch gleich in der ersten Zeile auf das Original verweise.
    Eine kleine Testsuche bei Tante Google ergab das es einige andere Produkte und Programme mit gleichen Namen gibt. Grenzt man die Suche ein so erscheint Oscar zuerst.
    Soll sich Oscar zu äußern.

    Ich denke, Du hast da schon etwas Eigenes geschaffen (übrigens: Glückwunsch und gut gemacht!), deswegen ist es durchaus angebracht, dem Kind einen eigenen Namen zu geben.
    Nur weil Du einen Teil meines Codes benutzt, musst Du Dich nicht dahingehend verpflichtet fühlen. Ich habe jetzt auch bei Heise-Download gesehen, dass es noch ein FotoSort gibt.
    Es wird also wohl Zeit für einen anderen Namen. ^^

  • Größe ... da hatte ich schon drüber nachgedacht. Aber wenn er dann bei 13.000 Dateien in einem Ordner FileGetSize() durchführt wäre der ganz schön beschäftigt / auf der Platte am Rödeln. Und deshalb hatte ich es wieder verworfen.

    Mit dem Konsolen-Befehl, den ich Dir bereits in Beitrag 4 nannte, habe ich soeben rekursiv in 4,8 Sekunden "2.200 Verzeichnisse mit über 21.000 Dateien" indexiert, in eine .txt geschrieben und die .txt geöffnet.
    Eine durchaus vertretbare Zeit. Ich zumindest finde die Informationen (wie viele Dateien insgesamt und die Größe der Dateien selbst als auch die indexierte Festplattenbelegung) nützlich.

  • Mit dem Konsolen-Befehl, den ich Dir bereits in Beitrag 4 nannte, habe ich soeben rekursiv in 4,8 Sekunden "2.200 Verzeichnisse mit über 21.000 Dateien" indexiert, in eine .txt geschrieben und die .txt geöffnet.

    Stimmt, hatte ich nicht mehr dran gedacht.

    Die Frage ist was man haben will. Ich wollte eine Liste der Dateien mit vollständigen Pfad - um diese dann in anderen Programmen weiter zu verwenden (ich hatte mir das mal so geschrieben wie ich es brauche),
    Dabei konnte ich anderen Schnickschnack nicht gebrauchen ;)

    Ich grüble mal nach wie man das unter einen Hut bekommen kann ohne das ganze zu überfrachten.

    Ich habe bereits die Version 1.1 fertig - mit der Unterstützung von animierten GIF und Profilen bei der Zielordnerliste.
    Leider finde ich den Code für die Profilunterstützung noch schrecklich ... ineffektiv. Es sind 5 Funktionen in denen viel das gleiche steht. Ein erster Versuch gestern das zu bereinigen führte nur bei dreien zum Erfolg.

  • Ich habe oben nun auch die 3-geteilte Version angehängt die auch mit animierten GIF umgehen kann.

    Manchmal verhält sich das Programm nicht perfekt. Aber ich nutze es nun schon in der Form eine ganze Weile und lass es erst einmal so.