Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Optimus Prime
Posts: 69
Joined: 04 Feb 2020, 02:47

Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by Optimus Prime » 31 May 2020, 02:32

Hallo Zusammen,

besteht die Möglichkeit gezielte Informationen aus einem String (der in einem Eingabefeld steht) herauszufiltern und als Variablen weiter zu verarbeiten?
Als Beispiel taucht der String "ABC1234???" in einer Eingabemaske auf. AHK erzeugt aus diesem Inhalt dann 3 Variablen:
%VAR1% - diese Variable enthält die Zeichen ABC (Stelle 1-3)
%VAR2% - diese Variable enthält die Zeichen 1234 (Stelle 4 -7)
%VAR3% - diese Variable enthält die Zeichen ??? (Stelle 8-10)
Die Inhalte der Variablen sollen über die Position im Code herausgefiltert werden.
Im Nachgang sollen die Variablen separat weiter verarbeitet werden...

Grüße


Optimus Prime
Posts: 69
Joined: 04 Feb 2020, 02:47

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by Optimus Prime » 31 May 2020, 03:06

Hallo haichen,

anbei ein Test und ich stolpere wieder über die gLabel :(

Code: Select all

Gui, Add, Edit, x42 y69 w360 h80 gEingabe, 
Gui, Add, Button, x302 y189 w100 h30 gButton , Button
Gui, Add, Text, x42 y39 w360 h20 , Code eingeben
; Generated using SmartGUI Creator 4.0
Gui, Show, x127 y87 h379 w479, New GUI Window
Return

GuiClose:
ExitApp

Button:

Var1 := SubStr, Eingabe, 1, 4


MsgBox,Folgende Variablen kenne ich `n test1 %Var1%     `ntest2          `ntest3
return
Im Edit soll der Text eingegeben werden. Durch den Button sollen dann die Inhalte aus dem Text gezielt als Msgbox dargestellt werden.
Geht das als gLabel oder muss ich hier grundsätzlich anders vorgehen?
Die reinste Form des Wahnsinns ist es, alles so zu belassen wie es ist und zu hoffen, dass sich etwas ändert [Albert Einstein]

User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by haichen » 31 May 2020, 04:00

Zweite Zeile bei deinem Code: gEingabe heißt, dass du in dem Editfeld bei einer Eingabe zu dem Label (Unterroutine) namens Eingabe springst. Dort führst du den Skriptcode aus.
Es gibt auch immer eine Fehlermeldung, wenn ein solches Label nicht existiert.

Du willst aber, dass der Inhalt des Editfeldes in einer Variablen namens Eingabe gespeichert wird. Dafür mußt du vEingabe schreiben.

In der Subroutine (Label) Button muß noch ein Gui, Submit, NoHide eingefügt werden, damit wird dann der Inhalt des Editfeldes in der Variablen Eingabe gespeichert wird.
Die Funktion Substr() hast du falsch verwendet. Im link sind ein paar Beispiele.

Ich habe mal meine Anmerkungen in dein Skript eingebaut.

Code: Select all

Gui, Add, Edit, x42 y69 w360 h80 vEingabe, 
Gui, Add, Button, x302 y189 w100 h30 gButton , Button
Gui, Add, Text, x42 y39 w360 h20 , Code eingeben
; Generated using SmartGUI Creator 4.0
Gui, Show, x127 y87 h379 w479, New GUI Window
Return

GuiClose:
ExitApp

Button:
Gui, Submit , NoHide                          ;https://ahkde.github.io/docs/commands/Gui.htm#Submit
Var1 := SubStr(Eingabe, 1, 4)
Var2 := SubStr(Eingabe, 5, 7)
Var3 := SubStr(Eingabe, 8, 17)
MsgBox,Folgende Variablen kenne ich `n test1 %Var1%     `ntest2  %Var2%           `ntest3  %Var3%  
return

Optimus PrimeII
Posts: 5
Joined: 02 Jun 2020, 03:27

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by Optimus PrimeII » 02 Jun 2020, 05:01

Hallo Zusammen,
leider geht mein alter Account nicht mehr, deshalb von nun an als Optimus PrimeII. Fragt lieber nicht weshalb :(
@haichen: Dein Skript funktioniert und soweit habe ich das Thema auch verstanden.
Die Informationen daraus habe ich nun weiter verwendet und stolpere wieder über das G-Label.

Die Idee: Inhalt der Variable nutzen um gezielt Aktionen auszuführen:

Code: Select all

Gui, Add, Edit, x202 y209 w460 h30 r1 vEingabe, 
Gui, Add, Button, x682 y209 w140 h30 gStart, Start
Gui, Add, CheckBox, gCheckbox x22 y289 w190 h30 , Parameter 1

Start:
Var1 := SubStr(Eingabe, 11, 1)				;Für CB1
If (%Var1% =1) {
	GuiControl, , Checkbox, 1
}else{
	GuiControl, , Checkbox, 0
}

Sleep, 2000


MsgBox,geht
Wenn im Edit an der richtigen Position die richtige Zahl auftaucht und der Startbutton gedrückt wurde, soll Checkbox 1 aktiviert werden. Alle anderen Zustände deaktivieren die Checkbox. Auch hier erhalte ich wieder einen Fehler wegen dem G-Label. Weiß jemand was noch zu beachten ist?

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by BoBo » 02 Jun 2020, 05:48

Wäre ja mal nett den Fehler 1:1 zu sehen zu bekommen! Dazu den Fehler provozieren, bei Anzeige der Fehlermeldung Ctrl-c drücken, und anschließend ins Forum pusten.
Verdacht: du hast zwar ein gLabel im GUI-command gesetzt, allerdings danach die zugehörige Sprungmarke nicht angelegt!?
2ter Verdacht: das gLabel hätte eigentlich eine Variable werden sollen, denn ansonsten fehlt diese zur Zuordnung + Auswertung der GUI-Inhalte!

Zudem scheint dir die Verwendung von Variablen bzgl expression-Schreibweise noch immer nicht geläufig zu sein: (%variable% != variable)

... ud als einer der Moderatoren dieses Forum darf ich dir final nun genau diese Frage stellen: "Warum geht dein alter Account nicht mehr?!" :eh: :wtf: :?:

User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by haichen » 02 Jun 2020, 06:36

gCheckbox in Gui, Add, CheckBox, gCheckbox x22 y289 w190 h30 , Parameter 1 soll doch bestimmt keine Sprungmarke zum Label Checkbox sein.

Optimus PrimeII
Posts: 5
Joined: 02 Jun 2020, 03:27

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by Optimus PrimeII » 02 Jun 2020, 06:52

Hallo ihr 2, anbei der Code:

Code: Select all


Gui, Show, x205 y106 h719 w663 , Spielwiese
Gui, Color, FFFFFF
Gui, Destroy
OnMessage(0x53, "WM_HELP")
Gui, Font, S12
Gui, Add, Edit, x202 y209 w460 h30 r1 vEingabe, 
Gui, Add, Button, x682 y209 w140 h30 gStart, Start
Gui, Add, Text, x202 y179 w460 h20 , Text hier eingeben
Gui, Add, CheckBox, gCheckbox x22 y289 w190 h30 , Parameter 1
Gui, Add, CheckBox, x22 y329 w190 h30 , Parameter 2
Gui, Add, CheckBox, x22 y369 w190 h30 , Parameter 3
Gui, Add, CheckBox, x22 y409 w190 h30 , Parameter 4
Gui, Add, CheckBox, x22 y449 w190 h30 , Parameter 5
Gui, Add, CheckBox, x22 y489 w190 h30 , Parameter 6
Gui, Add, Radio, x262 y289 w170 h30 , Parameter 7
Gui, Add, Radio, x262 y329 w170 h30 , Parameter 8
Gui, Add, Radio, x262 y369 w170 h30 , Parameter 9
Gui, Add, Radio, x262 y409 w170 h30 , Parameter 10
Gui, Add, Radio, x262 y449 w170 h30 , Parameter 11
Gui, Add, Radio, x262 y489 w170 h30 , Parameter 12
Gui, Add, DropDownList, r4 x472 y289 w190 h30 , DDL1|DDL2|DDL3
Gui, Add, DropDownList, r4 x472 y329 w190 h21 , 25`%|50`%|75`%|100`%
Gui, Add, DropDownList, r4 x472 y369 w190 h21 , DDL4|DDL5|DDL6|DDL7
Gui, Add, Edit, r1 x472 y409 w190 h30 , 
Gui, Add, Edit, r1 x472 y449 w190 h30 , 
Gui, Add, Edit, r1 x472 y489 w190 h30 , 
; Generated using SmartGUI Creator 4.0
Gui, Show, x127 y87 h706 w857, New GUI Window
Return

GuiClose:
ExitApp


Start:


Gui, Submit , NoHide                          ;https ahkde.github.io /docs/commands/Gui.htm#Submit  Broken Link for safety
Var1 := SubStr(Eingabe, 11, 1)				;Für CB1
Var2 := SubStr(Eingabe, 12, 1)
Var3 := SubStr(Eingabe, 13, 1)
Var4 := SubStr(Eingabe, 14, 1)
Var5 := SubStr(Eingabe, 15, 1)
Var6 := SubStr(Eingabe, 16, 1)
Var7 := SubStr(Eingabe, 17, 1)				; Für Radio
Var8 := SubStr(Eingabe, 18, 1)
Var9 := SubStr(Eingabe, 19, 1)
Var10 := SubStr(Eingabe, 20, 1)
Var11 := SubStr(Eingabe, 21, 1)
Var12 := SubStr(Eingabe, 22, 1)
Var13 := SubStr(Eingabe, 23, 1)				; Für Listbox
Var14 := SubStr(Eingabe, 24, 1)
Var15 := SubStr(Eingabe, 25, 1)
Var16 := SubStr(Eingabe, 26, 5)				; Buchstaben
Var17 := SubStr(Eingabe, 31, 5)				; Zahlen
Var18 := SubStr(Eingabe, 36, 8)				; Text


If (%Var1% =1) {
	GuiControl, , Checkbox, 1
}else{
	GuiControl, , Checkbox, 0
}

Sleep, 2000


MsgBox,Folgende Variablen kenne ich `n test1 %Var1%     `ntest2  %Var2%           `ntest3  %Var3% `n %Var18%
return

Ansonsten war es so gedacht wie haichen es beschrieben hat :)
Zum Account schicke ich eine PN an Dich Bobo.
Fehlertext ist im Anhang
Attachments
Fehler.JPG
Fehler.JPG (5.3 KiB) Viewed 2455 times
Last edited by Optimus PrimeII on 02 Jun 2020, 07:42, edited 1 time in total.

Optimus PrimeII
Posts: 5
Joined: 02 Jun 2020, 03:27

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by Optimus PrimeII » 02 Jun 2020, 06:53

Hoppla. Kontakt über PN geht nicht :(

BNOLI
Posts: 548
Joined: 23 Mar 2020, 03:55

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by BNOLI » 02 Jun 2020, 09:26

Yep, Neuankömmlinge können genauso wenig PM's schreiben wie unantastbare Hyperlinks setzen. ;)
Und was Haichen geschrieben hatte, hat BoBo doch vorher auch bereits beschrieben, und der screenshot der Fehlermeldung bestätigt dies auch noch, was ist also nun noch die Frage?? :think:

Lediglich eine einzige auswertbare (GUI)Variable, zwei gLabel (eins davon überflüssig, oder verwaist), und eine Variable in 'legacy schreibweise' anstatt im expession-style.
Habe erstmal fertig :)

Noch ein Tipp: wie bereits anderweitig angemerkt, Ctrl+c wenn die Fehlermeldung erscheint! Und dann einfach den text aus der Zwischenablage hierher kopieren, geht ohne umständlichen Upload eines vorab (ohne die Fehlermeldung!) zurechtgeschnippelten Screenshots!
Ist dann einfach so ...


---------------------------
Test.ahk
---------------------------
Error: Target label does not exist.

Specifically: gCheckBox x22 y289 w190 h30

Line#
---> 001: Gui,Add,CheckBox,gCheckBox x22 y289 w190 h30,Parameter1
002: Gui,Show,,FrunzShow
003: Return
004: Exit
005: Exit
005: Exit

The current thread will exit.
---------------------------
OK
---------------------------
Remember to use [code]CODE[/code]-tags for your multi-line scripts. Stay safe, stay inside, and remember washing your hands for 20 sec !

Optimus PrimeII
Posts: 5
Joined: 02 Jun 2020, 03:27

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by Optimus PrimeII » 02 Jun 2020, 12:52

Okay okay. Thema Fehlercode habe ich verstanden. Die Expression Schreibweise habe ich in allen nur erdenklichen Varianten ausprobiert. Letzter Stand ist hier:

Code: Select all

Gui, Show, x205 y106 h719 w663 , Test
Gui, Color, FFFFFF
Gui, Destroy
Gui, Font, S12
Gui, Add, Edit, x202 y209 w460 h30 r1 vEingabe, 
Gui, Add, Button, x682 y209 w140 h30 gStart, Start
Gui, Add, Text, x202 y179 w460 h20 , Text hier eingeben
Gui, Add, CheckBox, gCheckbox x22 y289 w190 h30 , Parameter 1
Gui, Add, CheckBox, x22 y329 w190 h30 , Parameter 2
Gui, Add, CheckBox, x22 y369 w190 h30 , Parameter 3
Gui, Add, CheckBox, x22 y409 w190 h30 , Parameter 4
Gui, Add, CheckBox, x22 y449 w190 h30 , Parameter 5
Gui, Add, CheckBox, x22 y489 w190 h30 , Parameter 6
Gui, Add, Radio, x262 y289 w170 h30 , Parameter 7
Gui, Add, Radio, x262 y329 w170 h30 , Parameter 8
Gui, Add, Radio, x262 y369 w170 h30 , Parameter 9
Gui, Add, Radio, x262 y409 w170 h30 , Parameter 10
Gui, Add, Radio, x262 y449 w170 h30 , Parameter 11
Gui, Add, Radio, x262 y489 w170 h30 , Parameter 12
Gui, Add, DropDownList, r4 x472 y289 w190 h30 , Drucker 1|Drucker 2|Drucker 3
Gui, Add, DropDownList, r4 x472 y329 w190 h21 , 25`%|50`%|75`%|100`%
Gui, Add, DropDownList, r4 x472 y369 w190 h21 , Normalpapier|Papier glänzend|Altpapier|Pappe
Gui, Add, Edit, r1 x472 y409 w190 h30 , 
Gui, Add, Edit, r1 x472 y449 w190 h30 , 
Gui, Add, Edit, r1 x472 y489 w190 h30 , 
; Generated using SmartGUI Creator 4.0
Gui, Show, x127 y87 h706 w857, New GUI Window
Return

GuiClose:
ExitApp


Start:


Gui, Submit , NoHide                          ;https ahkde.github.io /docs/commands/Gui.htm#Submit  Broken Link for safety
Var1 := SubStr(Eingabe, 11, 1)				;Für CB1
Var2 := SubStr(Eingabe, 12, 1)
Var3 := SubStr(Eingabe, 13, 1)
Var4 := SubStr(Eingabe, 14, 1)
Var5 := SubStr(Eingabe, 15, 1)
Var6 := SubStr(Eingabe, 16, 1)
Var7 := SubStr(Eingabe, 17, 1)				; Für Radio
Var8 := SubStr(Eingabe, 18, 1)
Var9 := SubStr(Eingabe, 19, 1)
Var10 := SubStr(Eingabe, 20, 1)
Var11 := SubStr(Eingabe, 21, 1)
Var12 := SubStr(Eingabe, 22, 1)
Var13 := SubStr(Eingabe, 23, 1)				; Für Listbox
Var14 := SubStr(Eingabe, 24, 1)
Var15 := SubStr(Eingabe, 25, 1)
Var16 := SubStr(Eingabe, 26, 5)				; Buchstaben
Var17 := SubStr(Eingabe, 31, 5)				; Zahlen
Var18 := SubStr(Eingabe, 36, 8)				; Text
VarA := 1


If (%Var1% != VarA) {
	GuiControl, , Checkbox, 1
}else{
	GuiControl, , Checkbox, 0
}

Sleep, 2000


MsgBox,Folgende Variablen kenne ich `n test1 %Var1%     `ntest2  %Var2%           `ntest3  %Var3% `n %Var18%
return
Fehlerbild ist unverändert. Hinweise in der Dokumentation zu weiteren Lösungsversuchen sehe ich gerade 0. Geht das überhaupt?
@Bobo: Habe z.Z. viel Zeit zum Basteln. Coronabedingte Kündigung :|

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by BoBo » 02 Jun 2020, 13:48

Du weißt deine Supporter aber auch zu zermürben. Bis jetzt haben dir drei Helfer gesagt das du ein gLabel zu viel hast, die Fehlermeldung sagt dir das du ein Problem mit einem gLabel hast, sogar noch genauer: dessen Ziel existiert nicht!! Und was machst du, postest den selben fehlerhaften Code ein Drittes mal. :lolno: :wtf:

Stellt sich die Frage: wie sind deine Englischkenntnisse? Denn die Fehlermeldung ist schlicht eindeutig! Du solltest ernsthaft mal zwei Tage ein paar AHK-Grundlagen zur GUI (Variablen und gLabel), und zur Schreibweise von Ausdrücken/expressions wälzen, das würde helfen!

:)

Optimus PrimeII
Posts: 5
Joined: 02 Jun 2020, 03:27

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by Optimus PrimeII » 02 Jun 2020, 15:19

Ich stimme dir zu, stehe aber nach wie vor auf dem Schlauch! gLabel, Variable, weder noch. Der Zusammenhang ist für mich nicht schlüssig und ich komme einfach nicht drauf.
Benötige ich eine Variable oder ein Label im Gui oder nichts von beiden?
Und wir sieht die If Formel aus? Wenn ich das Label weglasse, kann ich das Skript ausführen! Ziel soll es ja sein, dass die Checkbox gesetzt wird wenn die 11. Zahl im Edit eine 1 ist! Die Checkbox wird jedoch immer in allen Situationen gesetzt oder auch nicht gesetzt?
Nutze ich dann GuiControl oder Control zum steuern??
Anbei mein Code jetzt:

Code: Select all

Gui, Show, x205 y106 h719 w663 , Test
Gui, Color, FFFFFF
Gui, Destroy
Gui, Font, S12
Gui, Add, Edit, x202 y209 w460 h30 r1 vEingabe, 
Gui, Add, Button, x682 y209 w140 h30 gStart, Start
Gui, Add, Text, x202 y179 w460 h20 , Text hier eingeben
Gui, Add, CheckBox, vCheck x22 y289 w190 h30 , Parameter 1
Gui, Add, CheckBox,  x22 y329 w190 h30 , Parameter 2
Gui, Add, CheckBox, x22 y369 w190 h30 , Parameter 3
Gui, Add, CheckBox, x22 y409 w190 h30 , Parameter 4
Gui, Add, CheckBox, x22 y449 w190 h30 , Parameter 5
Gui, Add, CheckBox, x22 y489 w190 h30 , Parameter 6
Gui, Add, Radio, x262 y289 w170 h30 , Parameter 7
Gui, Add, Radio, x262 y329 w170 h30 , Parameter 8
Gui, Add, Radio, x262 y369 w170 h30 , Parameter 9
Gui, Add, Radio, x262 y409 w170 h30 , Parameter 10
Gui, Add, Radio, x262 y449 w170 h30 , Parameter 11
Gui, Add, Radio, x262 y489 w170 h30 , Parameter 12
Gui, Add, DropDownList, r4 x472 y289 w190 h30 , Drucker 1|Drucker 2|Drucker 3
Gui, Add, DropDownList, r4 x472 y329 w190 h21 , 25`%|50`%|75`%|100`%
Gui, Add, DropDownList, r4 x472 y369 w190 h21 , Normalpapier|Papier glänzend|Altpapier|Pappe
Gui, Add, Edit, r1 x472 y409 w190 h30 , 
Gui, Add, Edit, r1 x472 y449 w190 h30 , 
Gui, Add, Edit, r1 x472 y489 w190 h30 , 
; Generated using SmartGUI Creator 4.0
Gui, Show, x127 y87 h706 w857, New GUI Window
Return

GuiClose:
ExitApp


Start:


Gui, Submit , NoHide                          ;https ahkde.github.io /docs/commands/Gui.htm#Submit  Broken Link for safety
Var1 := SubStr(Eingabe, 11, 1)				;Für CB1
Var2 := SubStr(Eingabe, 12, 1)
Var3 := SubStr(Eingabe, 13, 1)
Var4 := SubStr(Eingabe, 14, 1)
Var5 := SubStr(Eingabe, 15, 1)
Var6 := SubStr(Eingabe, 16, 1)
Var7 := SubStr(Eingabe, 17, 1)				; Für Radio
Var8 := SubStr(Eingabe, 18, 1)
Var9 := SubStr(Eingabe, 19, 1)
Var10 := SubStr(Eingabe, 20, 1)
Var11 := SubStr(Eingabe, 21, 1)
Var12 := SubStr(Eingabe, 22, 1)
Var13 := SubStr(Eingabe, 23, 1)				; Für Listbox
Var14 := SubStr(Eingabe, 24, 1)
Var15 := SubStr(Eingabe, 25, 1)
Var16 := SubStr(Eingabe, 26, 5)				; Buchstaben
Var17 := SubStr(Eingabe, 31, 5)				; Zahlen
Var18 := SubStr(Eingabe, 36, 8)				; Text
VarA := 1


If (%Var1% != %VarA%)
{
	Control, Check,, Check
}else
{
	Control, Uncheck ,, Check
}

Sleep, 2000


MsgBox,Folgende Variablen kenne ich `n test1 %Var1%     `ntest2  %Var2%           `ntest3  %Var3% `n %Var18%
return
Ich klinke mich aus für heute. Das hat mir nun die Kraft geraubt :(

Optimus Prime
Posts: 69
Joined: 04 Feb 2020, 02:47

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by Optimus Prime » 02 Jun 2020, 15:23

PS. Account geht wieder. Button an Tastatur defekt :)
Die reinste Form des Wahnsinns ist es, alles so zu belassen wie es ist und zu hoffen, dass sich etwas ändert [Albert Einstein]

User avatar
haichen
Posts: 631
Joined: 09 Feb 2014, 08:24

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by haichen » 03 Jun 2020, 03:12

Ich versuch mal v und g im Gui zu erklären. Bitte nicht böse sein, wenn es zu einfach oder zu unverständlich sein sollte.

g<text> und v<text> werden so nur im GUI verwendet.
Sie kennzeichnen den <text> als Variable oder als adresse eines existierenden Labels.

g<text>: Du brauchst es, wenn etwas passieren soll sobald du mit dem GUI interagierst. Es wird automatisch ausgeführt, wenn du den Button drückst, die Checkbox/Radiobox anklickst oder etwas in ein Editfeld schreibst.
Dafür muß im GUI stehen welchen Code du ausführen willst. Ein Label namens <text> muß existieren.

Code: Select all

Gui, Add, Edit,  w200 h100 gmachwasundzwarsofort, 
Gui, Show, h706 w300 h200, label test
Return

machwasundzwarsofort:
tooltip, ich schreibe gerade etwas in das Editfeld.
return
v<text>: brauchst du, wenn das GuiControl irgendeine Inhalt hast, den du auswerten/verändern willst. Den Inhalt des Editfeldes zB.
Du brauchst es auch um das GUI aus dem Programm zu ändern. zB möchtest du in dem Edit/textfeld etwas anzeigen, was du im Programm erzeugt hast.

Code: Select all

Gui, Add, Edit,  w200 h100 gmachwasundzwarsofort vInhaltdesEditfeldes, 
Gui, Add, Button,   gwegmittooltip, lösche Tooltip
Gui, Add, Button,   gAddGreetings, Grüße
Gui, Show, ,label test
Return

machwasundzwarsofort:
Gui,submit, NoHide      ;Inhalt einer GUIvariable (hier "InhaltdesEditfeldes") wird gebraucht. 
tooltip, % "ich schreibe`n`n" InhaltdesEditfeldes "`n`nin das Editfeld"
return

wegmittooltip:
;Hier wird nichts aus dem GUI gebraucht, deshalb muß oben auch kein v<text> stehen
tooltip,
return

AddGreetings:
Gui,submit, NoHide     ;Inhalt einer GUIvariable (hier "InhaltdesEditfeldes") wird gebraucht. 
neu := "Moin Leute,`n" . InhaltdesEditfeldes . "`n`nEuer Optimus"
GuiControl,,InhaltdesEditfeldes, % neu  ;der inhalt von neu wird das Guicontrol geschrieben, das die Variable InhaltdesEditfeldes enthält
return
Last edited by BoBo on 03 Jun 2020, 04:23, edited 1 time in total.
Reason: Entfernung von [c][/c]-tags welche innerhalb der Code-Box gesetzt wurden, obwohl dort wirkungslos.

Optimus Prime
Posts: 69
Joined: 04 Feb 2020, 02:47

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by Optimus Prime » 03 Jun 2020, 12:51

Mahlzeit in die Runde,
danke für euren Support Bobo und haichen, die Informationen habe ich verstanden und werde sie auch weiter nutzen. Bei der aktuellen Anfrage hilft es allerdings nicht weiter.
Hintergund ist der, dass durch die Betätigung des Startbuttons die Variablen "gesetzt" werden und im Anschluss diese Variablen mit den Inhalten aus dem Edit überprüft werden sollen.
Wenn im Edit dann keine Zeichen oder Kauderwelsch stehen, bleibt die Checkbox "unchecked".
Steht im Edit z.B.: "111111111111111111111111111111111111111111111111" dann soll die Checkbox als checked gesetzt werden.
Mit dem aktuellen Skript kann ich das Gui starten, die Interaktion mit der Checkbox bleibt jedoch aus!

Code: Select all

Gui, Show, x205 y106 h719 w663 , Test
Gui, Color, FFFFFF
Gui, Destroy
Gui, Font, S12
Gui, Add, Edit, x202 y209 w460 h30 r1 vEingabe, 
Gui, Add, Button, x682 y209 w140 h30 gStart, Start
Gui, Add, Text, x202 y179 w460 h20 , Text hier eingeben
Gui, Add, CheckBox, gCheck1 x22 y289 w190 h30 , Parameter 1
Gui, Add, CheckBox, x22 y329 w190 h30 , Parameter 2
Gui, Add, CheckBox, x22 y369 w190 h30 , Parameter 3
Gui, Add, CheckBox, x22 y409 w190 h30 , Parameter 4
Gui, Add, CheckBox, x22 y449 w190 h30 , Parameter 5
Gui, Add, CheckBox, x22 y489 w190 h30 , Parameter 6
Gui, Add, Radio, x262 y289 w170 h30 , Parameter 7
Gui, Add, Radio, x262 y329 w170 h30 , Parameter 8
Gui, Add, Radio, x262 y369 w170 h30 , Parameter 9
Gui, Add, Radio, x262 y409 w170 h30 , Parameter 10
Gui, Add, Radio, x262 y449 w170 h30 , Parameter 11
Gui, Add, Radio, x262 y489 w170 h30 , Parameter 12
Gui, Add, DropDownList, r4 x472 y289 w190 h30 , Drucker 1|Drucker 2|Drucker 3
Gui, Add, DropDownList, r4 x472 y329 w190 h21 , 25`%|50`%|75`%|100`%
Gui, Add, DropDownList, r4 x472 y369 w190 h21 , Normalpapier|Papier glänzend|Altpapier|Pappe
Gui, Add, Edit, r1 x472 y409 w190 h30 , 
Gui, Add, Edit, r1 x472 y449 w190 h30 , 
Gui, Add, Edit, r1 x472 y489 w190 h30 , 
; Generated using SmartGUI Creator 4.0
Gui, Show, x127 y87 h706 w857, New GUI Window
Return

GuiClose:
ExitApp


Start:


Gui, Submit , NoHide                          ;https ahkde.github.io /docs/commands/Gui.htm#Submit  Broken Link for safety
Var1 := SubStr(Eingabe, 11, 1)				;Für CB1
Var2 := SubStr(Eingabe, 12, 1)
Var3 := SubStr(Eingabe, 13, 1)
Var4 := SubStr(Eingabe, 14, 1)
Var5 := SubStr(Eingabe, 15, 1)
Var6 := SubStr(Eingabe, 16, 1)
Var7 := SubStr(Eingabe, 17, 1)				; Für Radio
Var8 := SubStr(Eingabe, 18, 1)
Var9 := SubStr(Eingabe, 19, 1)
Var10 := SubStr(Eingabe, 20, 1)
Var11 := SubStr(Eingabe, 21, 1)
Var12 := SubStr(Eingabe, 22, 1)
Var13 := SubStr(Eingabe, 23, 1)				; Für Listbox
Var14 := SubStr(Eingabe, 24, 1)
Var15 := SubStr(Eingabe, 25, 1)
Var16 := SubStr(Eingabe, 26, 5)				; Buchstaben
Var17 := SubStr(Eingabe, 31, 5)				; Zahlen
Var18 := SubStr(Eingabe, 36, 8)				; Text

sleep, 500


Check1:

If (%Var1% != 1)
{
	GuiControl, ,Check1, 1
}else
{
	GuiControl, ,Check1, 0
}

Sleep, 2000


MsgBox,Folgende Variablen kenne ich `n test1 %Var1%     `ntest2  %Var2%           `ntest3  %Var3% `n %Var18%
return
Wenn ich solche Kombinationen bisher umgesetzt habe habe ich die einzelnen Befehle untereinander aufgeführt.
Scheinbar geht das bei dieser Variante jedoch nicht.
Wenn ich das Thema mit dem gLabel nun also nach dem Motto "Hat sich stets bemüht - eine 4 ist auch bestanden" umgesetzt habe, stolpere ich scheinbar über eine weitere Baustelle :)
Die Checkbox bleibt bei mir immer "unchecked.
Was muss ich an dieser Stelle noch beachten?

Grüße

Update:

Code: Select all


Gui, Show, x205 y106 h719 w663 , Test
Gui, Color, FFFFFF
Gui, Destroy
Gui, Font, S12
Gui, Add, Edit, x202 y209 w460 h30 r1 vEingabe, 
Gui, Add, Button, x682 y209 w140 h30 gStart , Start
Gui, Add, Text, x202 y179 w460 h20 , Text hier eingeben
Gui, Add, CheckBox, gCheck1 x22 y289 w190 h30 , Parameter 1
Gui, Add, CheckBox, x22 y329 w190 h30 , Parameter 2
Gui, Add, CheckBox, x22 y369 w190 h30 , Parameter 3
Gui, Add, CheckBox, x22 y409 w190 h30 , Parameter 4
Gui, Add, CheckBox, x22 y449 w190 h30 , Parameter 5
Gui, Add, CheckBox, x22 y489 w190 h30 , Parameter 6
Gui, Add, Radio, x262 y289 w170 h30 , Parameter 7
Gui, Add, Radio, x262 y329 w170 h30 , Parameter 8
Gui, Add, Radio, x262 y369 w170 h30 , Parameter 9
Gui, Add, Radio, x262 y409 w170 h30 , Parameter 10
Gui, Add, Radio, x262 y449 w170 h30 , Parameter 11
Gui, Add, Radio, x262 y489 w170 h30 , Parameter 12
Gui, Add, DropDownList, r4 x472 y289 w190 h30 , Drucker 1|Drucker 2|Drucker 3
Gui, Add, DropDownList, r4 x472 y329 w190 h21 , 25`%|50`%|75`%|100`%
Gui, Add, DropDownList, r4 x472 y369 w190 h21 , Normalpapier|Papier glänzend|Altpapier|Pappe
Gui, Add, Edit, r1 x472 y409 w190 h30 , 
Gui, Add, Edit, r1 x472 y449 w190 h30 , 
Gui, Add, Edit, r1 x472 y489 w190 h30 , 
; Generated using SmartGUI Creator 4.0
Gui, Show, x127 y87 h706 w857, New GUI Window
Return

GuiClose:
ExitApp



Start:


Gui, Submit , NoHide                          ;https ahkde.github.io /docs/commands/Gui.htm#Submit  Broken Link for safety
Var1 := SubStr(Eingabe, 11, 1)				;Für CB1
Var2 := SubStr(Eingabe, 12, 1)
Var3 := SubStr(Eingabe, 13, 1)
Var4 := SubStr(Eingabe, 14, 1)
Var5 := SubStr(Eingabe, 15, 1)
Var6 := SubStr(Eingabe, 16, 1)
Var7 := SubStr(Eingabe, 17, 1)				; Für Radio
Var8 := SubStr(Eingabe, 18, 1)
Var9 := SubStr(Eingabe, 19, 1)
Var10 := SubStr(Eingabe, 20, 1)
Var11 := SubStr(Eingabe, 21, 1)
Var12 := SubStr(Eingabe, 22, 1)
Var13 := SubStr(Eingabe, 23, 1)				; Für Listbox
Var14 := SubStr(Eingabe, 24, 1)
Var15 := SubStr(Eingabe, 25, 1)
Var16 := SubStr(Eingabe, 26, 5)				; Buchstaben
Var17 := SubStr(Eingabe, 31, 5)				; Zahlen
Var18 := SubStr(Eingabe, 36, 8)				; Text

sleep, 500


goto, Check1

return

Check1:
sleep, 500





If (%Var1% != 1)
{
	GuiControl, ,Check1, 1
}
else
{
	GuiControl, ,Check1, 0
}

Sleep, 2000


MsgBox,Folgende Variablen kenne ich `n test1 %Var1%     `ntest2  %Var2%           `ntest3  %Var3% `n %Var18%
return
Goto und Gosub helfen an dieser Stelle auch nicht weiter :(
Die reinste Form des Wahnsinns ist es, alles so zu belassen wie es ist und zu hoffen, dass sich etwas ändert [Albert Einstein]

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by BoBo » 04 Jun 2020, 00:02

Sobald nachvollziehbar ist, das du dies verstanden hast: :arrow: Variablen & Ausdrücke, kann es hier weiter gehen. Und belegen lässt sich das damit, indem du den Fehler in der Bedingung/condition selbst findest und beseitigst.

just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by just me » 04 Jun 2020, 03:28

Moin!

1. Kurze Antwort:

Worauf BoBo so nachdrücklich hinweist, ist das hier:

Code: Select all

If (%Var1% != 1)
Die Klammern umschließen einen Ausdruck. In Ausdrücken werden Variablen normalerweise ohne umschließende %-Zeichen angesprochen:

Code: Select all

If (Var1 != 1)
Außerdem glaube ich, dass Du die Checkbox nur dann anwählen willst, wenn der Inhalt von Var1 = 1 ist:

Code: Select all

If (Var1 = 1)
Lies dazu den von BoBo verlinkten Bereich der Hilfe in Ruhe durch.

Ich melde mich nachher noch mal mit einer etwas längeren Antwort.

Bis dann!

just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable  Topic is solved

Post by just me » 04 Jun 2020, 05:12

2. Längere Antwort:

AHK-Fenster bestehen in der Regel aus mehreren Teilen:

Das "Elternfenster" (Gui):
Es stellt den Rahmen samt Überschriftenzeile und ggf. das Fenstermenü bereit und umschließt eine Fläche (client area), auf der die weiteren Teile untergebracht werden können.

Ein oder mehrere "Kindfenster" (Control):
Das sind in der Regel vorgefertigte Steuerelemente, die von Windows mitgeliefert werden. Sie werden normalerweise innerhalb des Fensters positioniert.

Die vordefinierten Steuerelemente bringen sogenannte 'Fensterprozeduren' mit, die Ereignisse wie Benutzereingaben automatisch verarbeiten. Das ist einerseits sehr praktisch, weil sich das Skript darum nicht kümmern muss. Andererseits bekommt AHK von diesen Änderungen/Ereignissen aber erst einmal nichts mit. Um gezielt auf Ereignisse in einem Steuerelement zu lauschen, muss man diesen deshalb ein g-Label verpassen. Der Begriff steht für den Namen einer Subroutine, die bei bestimmten Ereignissen automatisch aufgerufen wird.

Code: Select all

Gui, Add, Button, w200 gGeklickt, Mein Button
fügt z.B. einem Fenster einen Button hinzu, bei dem automatisch eine vorhandene Routine Geklickt aufgerufen wird, wenn man auf den Button klickt oder ihn sonstwie 'drückt'.

Ein weiteres Problem besteht darin, den Steuerelementen zu jedem beliebigen Zeitpunkt den aktuellen Inhalt/Zustand zu entlocken bzw. ihn durch das Skript zu verändern. Es gibt mehrere Möglichkeiten, ein Steuerelement für die Anweisungen Gui, Submit, GuiControl bzw. GuiControlGet eindeutig zu identifizieren. Eine davon ist es, dem Steuerelement per v-Name einen Namen und gleichzeitig eine Ausgabevariable zu verpassen; die anderen sollte man meiner Meinung nach vermeiden. Wenn man das macht, empfiehlt es sich, möglichst "sprechende" Namen zu verwenden. Man spart sich damit manchmal bei der Fehlersuche ein ständiges Blättern im Skript.

Ich habe Dein Skript erst einmal mit v-Namen ausgestattet, damit Du die Steuerelemente gezielt verändern kannst. Vorhandene g-label habe ich bis auf das Label Start: entfernt. Dazu können wir bei Bedarf noch später kommen.

Code: Select all

#NoEnv
; Gui, Show, x205 y106 h719 w663 , Test
; Gui, Color, FFFFFF
; Gui, Destroy
Gui, Font, S12
Gui, Add, Edit, x202 y209 w460 h30 r1 vEingabe,
Gui, Add, Button, x682 y209 w140 h30 gStart , Start
Gui, Add, Text, x202 y179 w460 h20 , Text hier eingeben
Gui, Add, CheckBox, x22 y289 w190 h30 vCB1, Parameter 1
Gui, Add, CheckBox, x22 y329 w190 h30 vCB2, Parameter 2
Gui, Add, CheckBox, x22 y369 w190 h30 vCB3, Parameter 3
Gui, Add, CheckBox, x22 y409 w190 h30 vCB4, Parameter 4
Gui, Add, CheckBox, x22 y449 w190 h30 vCB5, Parameter 5
Gui, Add, CheckBox, x22 y489 w190 h30 vCB6, Parameter 6
Gui, Add, Radio, x262 y289 w170 h30 vRB1, Parameter 7
Gui, Add, Radio, x262 y329 w170 h30 vRB2, Parameter 8
Gui, Add, Radio, x262 y369 w170 h30 vRB3, Parameter 9
Gui, Add, Radio, x262 y409 w170 h30 vRB4, Parameter 10
Gui, Add, Radio, x262 y449 w170 h30 vRB5, Parameter 11
Gui, Add, Radio, x262 y489 w170 h30 vRB6, Parameter 12
Gui, Add, DropDownList, r4 x472 y289 w190 h30 vDDL1, Drucker 1|Drucker 2|Drucker 3
Gui, Add, DropDownList, r4 x472 y329 w190 h21 vDDL2, 25`%|50`%|75`%|100`%
Gui, Add, DropDownList, r4 x472 y369 w190 h21 vDDL3, Normalpapier|Papier glänzend|Altpapier|Pappe
Gui, Add, Edit, r1 x472 y409 w190 h30 vED1,
Gui, Add, Edit, r1 x472 y449 w190 h30 vED2,
Gui, Add, Edit, r1 x472 y489 w190 h30 vED3,
; Generated using SmartGUI Creator 4.0
Gui, Show, x127 y87 h706 w857, New GUI Window
Return
; --------------------------------------------------------------------------------------------------
GuiClose:
ExitApp
; --------------------------------------------------------------------------------------------------
Start:
Gui, Submit , NoHide             ; https ahkde.github.io /docs/commands/Gui.htm#Submit  Broken Link for safety
Var1 := SubStr(Eingabe, 11, 1)   ; Für CB1
Var2 := SubStr(Eingabe, 12, 1)
Var3 := SubStr(Eingabe, 13, 1)
Var4 := SubStr(Eingabe, 14, 1)
Var5 := SubStr(Eingabe, 15, 1)
Var6 := SubStr(Eingabe, 16, 1)
Var7 := SubStr(Eingabe, 17, 1)   ; Für Radio
Var8 := SubStr(Eingabe, 18, 1)
Var9 := SubStr(Eingabe, 19, 1)
Var10 := SubStr(Eingabe, 20, 1)
Var11 := SubStr(Eingabe, 21, 1)
Var12 := SubStr(Eingabe, 22, 1)
Var13 := SubStr(Eingabe, 23, 1)  ; Für Listbox
Var14 := SubStr(Eingabe, 24, 1)
Var15 := SubStr(Eingabe, 25, 1)
Var16 := SubStr(Eingabe, 26, 5)  ; Buchstaben
Var17 := SubStr(Eingabe, 31, 5)  ; Zahlen
Var18 := SubStr(Eingabe, 36, 8)  ; Text
; Beispiel für CB1
If (Var1 = 1)
   GuiControl, , CB1, 1
Else
   GuiControl, , CB1, 0
Return
Das Ganze ist absichtlich sehr 'schlicht' gehalten. Es lässt reichlich Raum für Optimierungen.

Von mehreren Radio-Buttons in einer Gruppe kann übrigens immer nur einer ausgewählt sein. Wenn Du mehreren Variablen für die Buttons eine 1 gibst, gewinnt immer die letzte.

Optimus Prime
Posts: 69
Joined: 04 Feb 2020, 02:47

Re: Auswertung eines Strings und gezielte Nutzung definierter Inhalte als Variable

Post by Optimus Prime » 04 Jun 2020, 06:04

Hallo Zusammen, und vielen Dank für die Hinweise. Ich habe heute morgen auch endlich verstanden, dass Variablen in Ausdrücken ohne %-Zeichen angesprochen werden. Habe es dann z.T auch ohne gLabel zum einsatz bekommen. Vielen Dank an dieser Stelle für die Informationen und die von euch mitgebrachte Geduld. Die gute Nachricht bei diesem Topic ist jedoch für mich: Lerneffekt = riesig :)
Anbei meine erste funktionierende Umsetzung:

Code: Select all

Gui, Show, x205 y106 h719 w663 , Test
Gui, Color, FFFFFF
Gui, Destroy
Gui, Font, S12
Gui, Add, Edit, x202 y209 w460 h30 r1 vEingabe, 
Gui, Add, Button, x682 y209 w140 h30 gStart , Start
Gui, Add, Text, x202 y179 w460 h20 , Text hier eingeben
Gui, Add, CheckBox, x22 y289 w190 h30 , Parameter 1
Gui, Add, CheckBox, x22 y329 w190 h30 , Parameter 2
Gui, Add, CheckBox, x22 y369 w190 h30 , Parameter 3
Gui, Add, CheckBox, x22 y409 w190 h30 , Parameter 4
Gui, Add, CheckBox, x22 y449 w190 h30 , Parameter 5
Gui, Add, CheckBox, x22 y489 w190 h30 , Parameter 6
Gui, Add, Radio, x262 y289 w170 h30 , Parameter 7
Gui, Add, Radio, x262 y329 w170 h30 , Parameter 8
Gui, Add, Radio, x262 y369 w170 h30 , Parameter 9
Gui, Add, Radio, x262 y409 w170 h30 , Parameter 10
Gui, Add, Radio, x262 y449 w170 h30 , Parameter 11
Gui, Add, Radio, x262 y489 w170 h30 , Parameter 12
Gui, Add, DropDownList, r4 x472 y289 w190 h30 vDDL1 , Drucker 1|Drucker 2|Drucker 3
Gui, Add, DropDownList, r4 x472 y329 w190 h21 vDDL2 , 25`%|50`%|75`%|100`%
Gui, Add, DropDownList, r4 x472 y369 w190 h21 vDDL3 , Normalpapier|Papier glänzend|Altpapier|Pappe
Gui, Add, Edit, r1 x472 y409 w190 h30 vEdit1, 
Gui, Add, Edit, r1 x472 y449 w190 h30 vEdit2 , 
Gui, Add, Edit, r1 x472 y489 w190 h30 vEdit3 , 
; Generated using SmartGUI Creator 4.0
Gui, Show, x127 y87 h706 w857, New GUI Window
Return

GuiClose:
ExitApp

Start:

Gui, Submit , NoHide                          ;https ahkde.github.io /docs/commands/Gui.htm#Submit  Broken Link for safety
Var1 := SubStr(Eingabe, 11, 1)				;Für CB1
Var2 := SubStr(Eingabe, 12, 1)
Var3 := SubStr(Eingabe, 13, 1)
Var4 := SubStr(Eingabe, 14, 1)
Var5 := SubStr(Eingabe, 15, 1)
Var6 := SubStr(Eingabe, 16, 1)
Var7 := SubStr(Eingabe, 17, 1)				; Für Radio
Var8 := SubStr(Eingabe, 18, 1)
Var9 := SubStr(Eingabe, 19, 1)
Var10 := SubStr(Eingabe, 20, 1)
Var11 := SubStr(Eingabe, 21, 1)
Var12 := SubStr(Eingabe, 22, 1)
Var13 := SubStr(Eingabe, 23, 1)				; Für Listbox
Var14 := SubStr(Eingabe, 24, 1)
Var15 := SubStr(Eingabe, 25, 1)
Var16 := SubStr(Eingabe, 26, 5)				; Buchstaben
Var17 := SubStr(Eingabe, 31, 5)				; Zahlen
Var18 := SubStr(Eingabe, 36, 10)				; Text

sleep, 500

Gui, Submit , NoHide 

If (Var1 != 1)
{
	GuiControl, ,Parameter 1, 0
}
else
{	
	GuiControl, ,Parameter 1, 1
}
Sleep, 200
return
Ich werde die gLabel noch komplett einfügen, damit alles seine Ordnung hat :)

Vielen Dank an alle :D
Die reinste Form des Wahnsinns ist es, alles so zu belassen wie es ist und zu hoffen, dass sich etwas ändert [Albert Einstein]

Post Reply

Return to “Ich brauche Hilfe”