Einrichten und Abfragen von Checkboxen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
Meister Lampe
Posts: 231
Joined: 06 Apr 2014, 13:28

Einrichten und Abfragen von Checkboxen

18 Apr 2024, 16:30

Hallo liebes Forum!

Im Tutorial sind die Steuerelemente für die Gui leider nur recht dürftig und ohne Beispiele erläutert. So auch bei der Checkbox, mit der ich gerade Probleme bei der Auswertung und Abspeicherung habe.
Ich habe folgende Checkboxen entworfen:

Code: Select all

Gui, Add, CheckBox, xm+10 yp+25 vCheckNullenSign, Signatur mit führenden Nullen auffüllen
Gui, Add, CheckBox, xm+10 yp+25 vCheckNullenIndex, Index mit führenden Nullen auffüllen
weiter unten stehen dann die Buttons:

Code: Select all

Gui, Add, Button, xm yp+50 w155 h30 gGuiSpeichern, Speichern
Gui, Add, Button, xm+200 yp w155 h30 gGuiSchliessen, Schließen
und dazu passend:

Code: Select all

GuiSchliessen:
Gui, Destroy
return

GuiSpeichern:
If (CheckNullenSign = 1)
   VorschauSign := Format("{:0" . StellenSign . "}", 1)
else
   VorschauSign := "1"

If (CheckNullenIndex = 1)
   VorschauIndex := Format("{:0" . StellenIndex . "}", 1)
else
   VorschauIndex := "1"
1.) Beim Ablauf wird die Fehlermeldung ausgegeben, ich könne die Variable vCheckNullenSign nicht mehrfach verwenden. Tue ich doch gar nicht! Ich frage sie ja unten nur ab! Außerdem dachte ich eigentlich, die Variable hieße CheckNullenSign (so hatte ich sie jedenfalls ursprünglich genannt!) und das "v" müsse in den Optionen davorgesetzt werden, damit sie als Variable interpretiert wird. Warum geschieht das genau in der Fehlermeldung nicht?
2.) Wie soll ich denn sonst gezielt eine Variable mit dem Status der Checkbox füllen und abfragen? Dafür wurde der Ausdruck vNameVariable doch geschaffen, oder?
3.) Ich möchte, daß die beim letzten Mal eingestellte Auswahl erhalten und gespeichert bleibt und beim nächsten Aufruf der Gui wieder angezeigt wird. Ich habe keinen check-Befehl in die Optionen gesetzt, trotzdem bleibt das leere Kästchen voreingestellt. Muß ich dafür einen anderen Parameter in die Optionen setzen?
4.) Im Kopf von der Gui steht:

Code: Select all

Gui, Font, s10 , Verdana
Umlaute oder "ß" werden aber fehlerhaft angezeigt - auf den Buttons sowie in Beitexten auf der Gui. In einer anderen mit demselben Kopf klappt es aber.

An allen Fragen hier habe ich schon eine Weile herumprobiert, aber leider ohne Erfolg. Vielleicht bekomme ich ja von Euch wieder einen Tipp. ;)

Viele Grüße von Meister Lampe
just me
Posts: 9505
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Einrichten und Abfragen von Checkboxen

19 Apr 2024, 02:04

Moin @Meister Lampe,

wie immer: Ohne das echte Skript kann man nur raten.
Wenn AHK sagt, dass Du die Variable vCheckNullenSign nicht mehrfach verwenden darfst, heißt das: Du versuchst mehrfach, ein und demselben Fenster ein Steuerelement mit der Option vCheckNullenSign hinzuzufügen. Deine Behauptung "Tue ich doch gar nicht! Ich frage sie ja unten nur ab! " ist mit Sicherheit falsch. Um den Rest kannst Du Dich später kümmern.
User avatar
Meister Lampe
Posts: 231
Joined: 06 Apr 2014, 13:28

Re: Einrichten und Abfragen von Checkboxen

24 Apr 2024, 16:24

Hallo just me!

Es handelt sich - wie Du es vielleicht schon geahnt hast - um eine Erweiterung meines Umbenennungstools, auf Wunsch einer Kollegin.
Die möchte in der Anwendung zur Ergänzung der Signaturnummern mit ihren Bestandsnamen über die Einfügung von führenden Nullen bei Nummern und Indizes je nach Bedarf frei entscheiden können, ohne jedesmal dafür eine neue Vorlage eingeben zu müssen.

Code: Select all

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
   gosub GuiVorschau
return

GuiVorschau:            ; Anzeige der aktuellen Vorlage und Frage nach Änderungswunsch
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, Button, xm yp+50 w155 h30 gFortfahren, Fortfahren
Gui, Add, Button, xm+200 yp w155 h30 gAendern, Ändern
Gui, Show, x100 y100, Vorschau
return

Aendern:                ; Schließen des Vorschaufensters und Aufruf des Fensters der führenden Nullen
gosub, GuiSchliessen
;~ VorschauMsg := NeueVorschauMsg
gosub, GuiNullfragen
return

GuiNullfragen:          ; Ändern der führenden Nullen in der Signtur, 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 yp+50 w155 h30 gGuiSpeichern, Speichern
Gui, Add, Button, xm+200 yp w155 h30 gGuiSchliessen, Schließen

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")
   NeueVorschau := AktSign . "_" . VorschauSign
else
   NeueVorschau := AktSign . "_" . VorschauSign . "_" . VorschauIndex

gosub, GuiNullfragen
return

Fortfahren:             ; ausführen der Umbenennung
MsgBox, 16 , , Hier geht es noch nicht weiter!
gosub, GuiSchliessen
return
Auf das Fortfahren - Label käme eigentlich dann die Schleife zur Umbenennung, die muß ich aber noch etwas modifizieren im Vergleich zur vorhergehenden Version und das geht natürlich erst, wenn ich die Checkboxen richtig auswerten kann. Damit aber bim Aufruf des einen Bittons doch was passiert, habe ich dort eine MsgBox hingesetzt.

Viele Grüße von Meister Lampe
just me
Posts: 9505
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Einrichten und Abfragen von Checkboxen

25 Apr 2024, 02:03

Moin,

leider lässt sich der Ablauf mit den eingestellten Skriptteilen nicht komplett verfolgen. Aber immerhin:

Code: Select all

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")
   NeueVorschau := AktSign . "_" . VorschauSign
else
   NeueVorschau := AktSign . "_" . VorschauSign . "_" . VorschauIndex

gosub, GuiNullfragen
return
Am Anfang der Routine werden die Checkboxen abgefragt. Du gehst also davon aus, dass es sie schon gibt.
(Die Abfrage kann so allerdings nur funktionieren, wenn vorher noch mindestens eine bestimmte Anweisung ausgeführt worden ist.)

Am Ende der Routine rufst Du dann bedingungslos GuiNullFragen auf. Damit wird versucht, die beiden Checkboxen nochmals zu erzeugen.

Soviel zum Thema: "Tue ich doch gar nicht! Ich frage sie ja unten nur ab!"
User avatar
Meister Lampe
Posts: 231
Joined: 06 Apr 2014, 13:28

Re: Einrichten und Abfragen von Checkboxen

02 May 2024, 16:45

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
just me
Posts: 9505
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Einrichten und Abfragen von Checkboxen

03 May 2024, 02:54

Moin,
  • Meister Lampe wrote: 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.
    Ich wrote:(Die Abfrage kann so allerdings nur funktionieren, wenn vorher noch mindestens eine bestimmte Anweisung ausgeführt worden ist.)
    Bisher sehe ich keine Stelle, an der die Werte der Checkboxen ausgelesen werden. Du brauchst also zumindest:

    Code: Select all

    GuiSpeichern:           ; Auslesen der Checkboxen und erstellen der neuen Vorschau
    Gui, Submit, NoHide ; dann wollen wir es mal wirklich tun
    Damit solltest Du schon mal weiterkommen.
  • Meister Lampe wrote: 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.
    Dann solltest Du im Kopf des Skripts zwei Variablen mit dem Wert Wahr/True/1 erstellen:

    Code: Select all

    CheckNullenSign := 1
    CheckNullenIndex := 1
    
    und die Anweisungen zum Erstellen der Checkboxen anpassen:

    Code: Select all

    Gui, Add, CheckBox, xm+10 yp+25 vCheckNullenSign Checked%CheckNullenSign%, Signatur mit führenden Nullen auffüllen
    Gui, Add, CheckBox, xm+10 yp+25 vCheckNullenIndex Checked%CheckNullenIndex%, Index mit führenden Nullen auffüllen
    
    Ich bin aber nicht sicher, ob Du das wirklich so haben willst.
  • Meister Lampe wrote: 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.
    Siehe 2.)
  • Meister Lampe wrote: 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.
    Dafür kannst Du dem Textfeld für das Format einen Namen und den Checkboxen ein G-Label spendieren:

    Code: Select all

    ; ...
    Gui, Add, Text, xm+10 yp+25 w350 h20 vVorschau, %VorschauMsg%
    ; ...
    Gui, Add, CheckBox, xm+10 yp+25 vCheckNullenSign Checked%CheckNullenSign% gGuiSpeichern, Signatur mit führenden Nullen auffüllen
    ; ...
    Gui, Add, CheckBox, xm+10 yp+25 vCheckNullenIndex Checked%CheckNullenIndex% gGuiSpeichern, Index mit führenden Nullen auffüllen
    
    Die Routine GuiSpeichern könnte dann so aussehen:

    Code: Select all

    GuiSpeichern:           ; Auslesen der Checkboxen und erstellen der neuen Vorschau
    Gui, Submit, NoHide
    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
    GuiControl, , Vorschau, %VorschauMsg%
    ; Gui, Destroy
    ; Gosub, GuiNullfragen
    return
    Der Button "Vorschau" kann dann entfernt werden.
Das sollte erst einmal reichen. Viel Spaß damit!

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 25 guests