Hallo just me!
Vielen Dank für Deinen Hinweis. Weil diese Fehlermeldung jetzt nicht mehr stört, bin ich noch etwas weitergekommen und habe einiges verbessern können, weshalb das Script jetzt etwas anders aussieht, als in meinem ersten Post. Der wichtigste Unterschied besteht darin, daß die zwei separaten Guis in einem Fenster zusammengefügt sind.
Aber der Reihe nach. Hier kommen erstmal die relevanten Teile des Scripts mit ein paar Erläuterungen dazu:
Code: Select all
; Bildnummer mit Bestandsnamen ergänzen
F12::
AktSignDavorstellen:
If !(ModulAuswahl = 3 or ModulAuswahl = 0)
{
MsgBox, 17, Keine Bestandsvorlage!, Sie müssen zuerst eine Bestandsvorlage auswählen!
IfMsgBox Ok
{
Gosub Auswahlfenster
ModulAuswahl := 3
return
}
else
return
}
else
ModulAuswahl := 3
!l::
GuiNullfragen: ; Ändern der führenden Nullen in der Signatur, ja nach Bestandvorlage auch im Index
Gui, Margin, 30, 20
Gui, Font, s10 , Verdana
Gui, Add, GroupBox, xm yp+10 w350 h50, Aktuelle Bestandsvorlage
Gui, Add, Text, xm+10 yp+25 w350 h20, %VorschauMsg%
Gui, Add, GroupBox, xm yp+35 w350 h50, Signatureinstellungen
Gui, Add, CheckBox, xm+10 yp+25 vCheckNullenSign, Signatur mit führenden Nullen auffüllen
If !(StellenIndex = "0")
{
Gui, Add, GroupBox, xm yp+35 w350 h50, Indexeinstellungen
Gui, Add, CheckBox, xm+10 yp+25 vCheckNullenIndex, Index mit führenden Nullen auffüllen
}
Gui, Add, Button, xm h30 w100 Default gFortfahren, Fortfahren
Gui, Add, Button, xm+125 yp h30 w100 gGuiSpeichern, Vorschau
Gui, Add, Button, xm+250 yp h30 w100 gGuiSchliessen, Abbrechen
GuiLaden:
Gui, Show, x100 y100, Führende Nullen
return
GuiSchliessen:
Gui, Destroy
return
GuiSpeichern: ; Auslesen der Checkboxen und erstellen der neuen Vorschau
If (CheckNullenSign = 1)
VorschauSign := Format("{:0" . StellenSign . "}", 1)
else
VorschauSign := "1"
If (CheckNullenIndex = 1)
VorschauIndex := Format("{:0" . StellenIndex . "}", 1)
else
VorschauIndex := "1"
If (StellenIndex = "0")
VorschauMsg := AktSign . "_" . VorschauSign
else
VorschauMsg := AktSign . "_" . VorschauSign . "_" . VorschauIndex
Gui, Destroy
Gosub, GuiNullfragen
return
Fortfahren: ; ausführen der Umbenennung
Gui, Destroy
;~ MsgBox, 16 , , Hier geht es noch nicht weiter!
;~ gosub, GuiSchliessen
;~ return
Clipboard := ""
SendInput, ^c
Clipwait, 1
DateienAuslese := Clipboard
SignStellen := StellenSign
IndexStellen := StellenIndex
NewAktname := AktSign
Progress, 3: m2 H45 W350 fs16 zh0 ZY11 WS600 ct0000ff CWffffff B, Bin gleich fertig ..., , Vorschau, Verdana ; größeres Fenster und Schrift
Loop, Parse, Dateienauslese, `n, `r
{
SplitPath, A_LoopField, , Verzeichnis, Erweiterung, SignRumpf
SuchAktSign := AktSign . "_"
SignRumpf := StrReplace(SignRumpf, SuchAktSign, , , 1)
SignRumpf := StrReplace(SignRumpf, "-", "_")
If !InStr(SignRumpf, "_")
{
; Wenn NameArray[2] mit einer oder mehreren Ziffer(n) beginnt und mit einer oder keiner 'Nichtziffer' endet ...
If RegExMatch(SignRumpf, "^(\d+)(\D?)$", Match)
{
{
Match1 += 0 ; führende Nullen entfernen
If !(StrLen(Match1) > SignStellen)
{
If (CheckNullenSign = 1)
NewSign := Format("{:0" . SignStellen . "}", Match1) . Match2
else
NewSign := Match1 . Match2
}
}
FileMove, %A_LoopField%, %Verzeichnis%\%NewAktname%_%NewSign%.%Erweiterung%
}
}
else
{
;MsgBox , 262144, , Dies war ein Name mit Index. Fortfahren?
RumpfArray := StrSplit(SignRumpf, "_")
RumpfArray[1] += 0 ; führende Nullen von Signaturteil entfernen
RumpfArray[2] += 0 ; führende Nullen von Indexteil entfernen
If (CheckNullenSign = 1)
{
NewSign := Format("{:0" . StellenSign . "}", RumpfArray[1])
}
else
NewSign := RumpfArray[1]
If (CheckNullenIndex = 1)
{
NewIndex := Format("{:0" . StellenIndex . "}", RumpfArray[2])
}
else
NewIndex := RumpfArray[2]
;Item.Name := AktSign . "_" . LetzteSign . "-" . LetzterIndex . (ShowExt ? "." . Erweiterung : "")
FileMove, %A_LoopField%, %Verzeichnis%\%NewAktname%_%NewSign%_%NewIndex%.%Erweiterung%
}
}
Progress, 3: Off
return
Der Kopf der Anwendung "Bildnummer mit Bestandsnamen ergänzen" (intern "Modul 3" genannt") öffnet die Gui zur Auswahl der Bestandsvorlagen (Modul 0). Dabei hattest Du mir ja schon sehr geholfen. Diese Tabelle wird für mehrere Anwendungen gebraucht und wird aufgerufen, wenn weder sie selbst, noch die begonnene Anwendung direkt vorher durchlaufen wurde, man das Script also neu startet.
Hier der Code dazu:
Code: Select all
; Vorlagen und Auswahlen aufrufen und einlesen
F7::
Auswahlfenster:
Auswahl := FileExist(AuswahlDatei) ? FileOpen(AuswahlDatei, "r").Read() : ""
If !(File := FileOpen(VorgabenDatei, "r")){
MsgBox, 16, Fehler!, Die Datei %VorgabenDatei% konnte nicht geöffnet werden!
; ExitApp
}
Vorgaben := StrSplit(File.Read(), "`n", "`r")
File.Close()
; Auswahlfenster erstellen und anzeigen
Rows := (L := Vorgaben.Length()) > 10 ? 10 : L
GuiText_1 := "W䨬en Sie hier den Standard für das n䣨ste Umbenennungsprojekt aus!"
Gui, Margin, 20, 20
Gui, Font, s10 , Verdana
Gui, Add, Text, xm w350, %GuiText_1%
Gui, Add, ListView, xm wp r%Rows% -Multi vBestandAuswahl Sort, Bestand|Signatur|Index
For Each, Vorgabe In Vorgaben
{
Felder := StrSplit(Vorgabe, "`t")
Option := (Felder[1] = Auswahl) ? "Focus Select" : ""
LV_Add(Option, Felder*)
}
Loop, % LV_GetCount("Column")
LV_ModifyCol(A_Index, "AutoHdr")
If (LizenzKey = "ja") ; Einblendung zus䴺licher Optionen bei der erweiterten Version
{
Gui, Add, Edit, cblue xm h25 w100 vAktSignEingabe, ;%Auswahl%
Gui, Add, Edit, cblue x137 yp h25 w70 vSignEingabe, ;%SignVorlage%
Gui, Add, Edit, cblue x224 yp h25 w70 vIndexEingabe, ;%IndexVorlage%
Gui, Add, Text, x124 yp+5 h25 w13 , % chr(863)
Gui, Add, Text, x211 yp+4 h25 w13 , % chr(862)
Gui, Add, Button, xm h30 w100 Default gAnwenden, Anwenden
; Button "Neu Erstellen" wird in der Standardversion auskommentiert
Gui, Add, Button, x145 yp h30 w100 gNeuerstellen, Neu Erstellen
Gui, Add, Button, x270 yp h30 w100 gAbbrechen, Abbrechen
}
else
{
Gui, Add, Button, xm h30 w145 Default gAnwenden, Anwenden
Gui, Add, Button, x225 yp h30 w145 gAbbrechen, Abbrechen
}
Menu, Tray, Icon, , , 1
GuiControl, Focus, BestandAuswahl
Gui, Show, x100 y100, Signierungsvorlagen
Return
;------------------------------------------------------------------------
; Auswahl übernehmen
Anwenden:
If !(Row := LV_GetNext())
{
MsgBox, 16, Fehler!, Bitte w䨬en Sie einen Bestand aus!
GuiControl, Focus, BestandAuswahl
Return
}
LV_GetText(AktSign, Row, 1)
LV_GetText(SignVorlage, Row, 2)
LV_GetText(IndexVorlage, Row, 3)
StellenSign := StrLen(SignVorlage)
If (IndexVorlage = "-")
{
StellenIndex := 0
}
else
StellenIndex := StrLen(IndexVorlage)
LetzteSign := 0
; hier müߴe wohl auch die externe Abspeicherung stattfinden!
If (AktSign <> Auswahl)
{
Auswahl := AktSign
File := FileOpen(AuswahlDatei, "w")
File.Write(Auswahl)
File.Close()
}
;~ ModulAuswahl := 0
Gui, Destroy
;~ If !(LabelNr = Mod3)
;~ {
;~ Gosub, Anzeige
;~ }
Gosub, Anzeige
;~ LabelNr := Mod0
Menu, Tray, Icon, , , 0
Return
;------------------------------------------------------------------------
; Neue Vorlage abspeichern
Neuerstellen:
Gui, Submit, NoHide ; Speichert die Benutzereingaben für eine neue Vorlage
; AktSignEingabe darf nicht leer sein
AktSignEingabe := Trim(AktSignEingabe)
If (StrLen(AktSignEingabe) = 0)
{
MsgBox, 16, Fehler!, Der Bestandsname darf nicht leer sein!
GuiControl, Focus, AktSignEingabe
Return
}
; AktSignEingabe darf nicht bereits vergeben sein
Loop, % LV_GetCount()
{
LV_GetText(AktSignLV, A_Index)
If (AktSignEingabe = AktSignLV)
{
MsgBox, 16, Fehler!, Der Bestandsname ist bereits vergeben!
GuiControl, Focus, AktSignEingabe
Return
}
}
; SignEingabe darf nicht leer sein
SignEingabe := Trim(SignEingabe)
If (StrLen(SignEingabe) = 0)
{
MsgBox, 16, Fehler!, Die Signaturvorgabe darf nicht leer sein!
GuiControl, Focus, SignEingabe
Return
}
; IndexEingabe darf nicht leer sein
IndexEingabe := Trim(IndexEingabe)
If (StrLen(IndexEingabe) = 0)
{
MsgBox, 16, Fehler!, Die Indexvorgabe darf nicht leer sein!
GuiControl, Focus, IndexEingabe
Return
}
; Alles OK, verarbeiten
AktSignNeu := AktSignEingabe
StellenSignNeu := StrLen(SignEingabe)
SignVorlageNeu := Format("{:0" . StellenSignNeu . "}", 0)
If (IndexEingabe = "-")
{
IndexVorlageNeu := "-"
}
else
{
StellenIndexNeu := StrLen(IndexEingabe)
IndexVorlageNeu := Format("{:0" . StellenIndexNeu . "}", 0)
}
FileAppend , `n%AktSignNeu%`t%SignVorlageNeu%`t%IndexVorlageNeu%, %VorgabenDatei%
; Auswahldatei updaten
If (IndexVorlageNeu = "-")
{
VorschauMsgNeu = %AktSignNeu%_%SignVorlageNeu%
StellenIndex := "-"
LetzteSign := "-"
}
else
{
VorschauMsgNeu = %AktSignNeu%_%SignVorlageNeu%_%IndexVorlageNeu%
StellenIndex := StellenIndexNeu
LetzteSign := 0
}
AktSign := AktSignNeu
StellenSign := StellenSignNeu
If (AktSign <> Auswahl)
{
Auswahl := AktSign
File := FileOpen(AuswahlDatei, "w")
File.Write(Auswahl)
File.Close()
}
; Abschlu߭Message
Gui, Destroy
MsgAnzeige =
(
Ihre neu erstellte Vorlage %VorschauMsgNeu% wurde abgespeichert.
Möchten Sie zurück zur Vorlagenauswahl?
)
MsgBox, 68, , %MsgAnzeige%
IfMsgBox Yes
gosub, Auswahlfenster
else
gosub, Anzeige
Return
;------------------------------------------------------------------------
; Auswahl abbrechen -> Programm beenden
Abbrechen:
GuiClose:
Gui, Destroy
return
;------------------------------------------------------------------------
; Vorschau mit Progresselement statt MsgBox, damit Schrift formatierbar ist
^F7::
Anzeige:
If (AktSign = "")
{
LeerAnzeige = Es ist keine Bestandsvorlage ausgew䨬t!
Progress, m2 fs12 zh0 ct0000ff CWffffff B, %LeerAnzeige%, , Vorschau, Verdana
}
else
{
VorschauSign := Format("{:0" . StellenSign . "}", 1)
If (StellenIndex = "0")
{
VorschauMsg = %AktSign%_%VorschauSign%
}
else
{
VorschauIndex := Format("{:0" . StellenIndex . "}", 1)
VorschauMsg = %AktSign%_%VorschauSign%_%VorschauIndex%
}
Progress, m2 fs12 zh0 ct0000ff CWffffff B, %VorschauMsg%, , Vorschau, Verdana
ModulAuswahl := 0
}
SetTimer, ProgressOff, 1500
Return
Im letzten Teil "Anzeige" wird die Variable
VorschauMsg gefüllt, die dann in der Gui zum "Bestandsnamen ergänzen" als Anzeige des aktuellen Bestandsnamens oben wieder auftaucht. Hier soll man jetzt mit Hilfe der
Checkboxen individuell entscheiden können, ob die Nummern von Signatur und ggf. Index nach der vorgegebenen Bestandsvorlage mit führenden Nullen aufgefüllt werden sollen oder nicht.
1.) Zuerst einmal soll diese Gui direkt nach der Auswahl der Bestandsvorlage erscheinen und nicht erst ein erneutes Starten mit
F12 erfordern!
2.) Der jetzige Code setzt zwar den Bestandsnamen (
AktSign) vor einen Dateinamen, macht also aus einem Bild
20_90.jpg z.B. bei Vorlage
A 123--4_0000_000 das Bild
A 123--4_20_90.jpg, füllt aber die Nullen nicht auf, wenn ich das Häkchen in die Checkbox setze, also nicht korrekt
A 123--4_ 20_090.jpg.
3.) Die Checkboxen in der Gui sollten standardmäßig aktiviert sein, also das Häkchen besitzen, aber die jeweils letzte Änderung solange die Anwendung läuft beibehalten.
4.) Nach der Änderung über den
Button Vorschau wird die Gui neu geladen, dann sollte man unten eigentlich eine Vorschau der Änderung sehen. Es kommt zwar eine Vorschau, aber jedesmal ohne Nullen, egal wie ich die Häkchen gesetzt habe.
5.) Schöner wäre natürlich, würde sich die Vorschau quasi "live" ändern, also direkt bei jeder Änderung einer der Checkboxen sofort anpassen, ohne neuen Aufruf. Dann wäre auch dieser weitere Button obsolet. Das wäre aber eher Luxus. Zuerst soll das Ding überhaupt richtig funktionieren.
Viele Grüße von Meister Lampe