Wie ein Eintrag aus DropDownList ansprechen? Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Bekkart
Posts: 27
Joined: 05 Nov 2019, 12:29

Wie ein Eintrag aus DropDownList ansprechen?

13 Nov 2019, 07:50

Hi,

Code: Select all

Gui, Add, DropDownList, vShortcutÜbersicht, Eintrag1|Eintrag 2
Frage 1: Wie kann ich das Feld beschriften, was default ausgesucht ist? Das dort z.B "Eintrag2" steht?
Frage 2: Wie kann ich das ausgewählte nun mit einem Fehl hinterlegen?

z.B "Eintrag 2"::gosub, btn_1

btn_1
winactivate ahk_exe notepad++.exe
send, ^f{raw}Eintrag 2
send,{Enter}{Esc}{Home} ; dect
gregster
Posts: 4252
Joined: 30 Sep 2013, 06:48

Re: Wie ein Eintrag aus DropDownList ansprechen?

13 Nov 2019, 09:28

Zu 1: siehe https://ahkde.github.io/docs/commands/GuiControls.htm#DropDownList : füge || hinter dem designierten Default-Eintrag ein (oder verwende die Choose-Option).

Code: Select all

Gui, Add, DropDownList, vShortcutÜbersicht gEintraggewählt, Eintrag1|Eintrag2||

Zu 2: Kommt drauf: wenn du ein Default-Element vorgibst, dann kann natürlich der Auswahlvorgang selbst (als g-Label) nicht sinnvoll genutzt werden als Trigger, denn der Nutzer wird ja gar nicht die DDL anpacken, wenn er den Default-Eintrag will.

Du könntest dann natürlich einen Button hinzufügen für diesen Fall, um die Auswahl bestätigen zu lassen (ein Default-Button akzeptiert auch Enter )

Code: Select all

Gui, Add, DropDownList, vShortcutÜbersicht , Eintrag1|Eintrag2||
Gui, Add, Button, Default gSelection, OK
Gui, Show
return

Selection:
Gui, Submit, NoHide
Switch ShortcutÜbersicht
{
	case "Eintrag1": msgbox 1		; oder   gosub whatever
	case "Eintrag2": msgbox 2 
}
return
(Switch benötigt AHK vv1.1.31+)
nacken012
Posts: 70
Joined: 22 Jul 2016, 14:39

Re: Wie ein Eintrag aus DropDownList ansprechen?  Topic is solved

13 Nov 2019, 09:30

Ich würde es so machen:

Code: Select all

Gui, Add, DropDownList, vShortcutÜbersicht gAbfrage, Eintrag 2||Eintrag1|Eintrag 2
Return

Abfrage:
if (ShortcutÜbersicht= "Eintrag1")
{
Gosub, .........
}

if (ShortcutÜbersicht= "Eintrag 2")
{
Gosub, .........
}

gregster
Posts: 4252
Joined: 30 Sep 2013, 06:48

Re: Wie ein Eintrag aus DropDownList ansprechen?

13 Nov 2019, 09:36

Dann brauchst du aber zumindest noch ein Gui, Submit, um die v-Variable zu befüllen.
Und was machst du, wenn du einfach die Vorauswahl übernehmen willst ? Dann müsstest du trotzdem nochmal explizit auswählen, trotz der Vorauswahl...

PS: Man könnte den Default-Button, der auf Enter regiert, natürlich auch verstecken (mit hidden)- reagieren würd' er trotzdem.
Bekkart
Posts: 27
Joined: 05 Nov 2019, 12:29

Re: Wie ein Eintrag aus DropDownList ansprechen?

13 Nov 2019, 09:53

gregster wrote:
13 Nov 2019, 09:28
Zu 1: siehe https ahkde.github.io /docs/commands/GuiControls.htm#DropDownList Broken Link for safety : füge || hinter dem designierten Default-Eintrag ein (oder verwende die Choose-Option).

Code: Select all

Gui, Add, DropDownList, vShortcutÜbersicht gEintraggewählt, Eintrag1|Eintrag2||
Danke, funktioniert.
nacken012 wrote:
13 Nov 2019, 09:30
Ich würde es so machen:

Code: Select all

Gui, Add, DropDownList, vShortcutÜbersicht gAbfrage, Eintrag 2||Eintrag1|Eintrag 2
Return

Abfrage:
if (ShortcutÜbersicht= "Eintrag1")
{
Gosub, .........
}

if (ShortcutÜbersicht= "Eintrag 2")
{
Gosub, .........
}

Danke, läuft so.
Bekkart
Posts: 27
Joined: 05 Nov 2019, 12:29

Re: Wie ein Eintrag aus DropDownList ansprechen?

13 Nov 2019, 11:07

Ah funktioniert doch nicht. (Hatte ein Fehler, sodass ich dachte das würde triggern)....
Wo muss ich die Gui, Submit ergänzen?
Ich schau mir das an.

gregster wrote:
13 Nov 2019, 09:36
Und was machst du, wenn du einfach die Vorauswahl übernehmen willst ? Dann müsstest du trotzdem nochmal explizit auswählen, trotz der Vorauswahl...
Das ist nicht weiter wild. Ich hab den Defaulteintrag zur Beschriftung missbraucht. Den will man quasi nicht anklicken.
Last edited by Bekkart on 13 Nov 2019, 11:54, edited 1 time in total.
gregster
Posts: 4252
Joined: 30 Sep 2013, 06:48

Re: Wie ein Eintrag aus DropDownList ansprechen?

13 Nov 2019, 11:26

Bekkart wrote:
13 Nov 2019, 11:07
Ah funktioniert doch nicht. (Hatte ein Fehler, sodass ich dachte das würde triggern)....
Wo muss ich die Gui, Submit ergänzen?
Auf jeden Fall bevor du die v-Variable ShortcutÜbersicht in der Subroutine checkst (vgl. meinen Code oben), also z. B. direkt unterhalb des Labels:

Code: Select all

Abfrage:
Gui, Submit  	; optional, wenn die GUI offen bleiben soll:    , NoHide
if (ShortcutÜbersicht= "Eintrag1")
; [...]
else if (ShortcutÜbersicht= "Eintrag 2")
Da sich die Werte ja gegenseitig ausschließen, könnte man bei den folgenden If-Checks else if verwenden (wäre effizienter), oder eben direkt Switch.

Ich hab den Defaulteintrag zur Beschriftung Missbraucht. Den will man quasi nicht anklicken.
Ah so, dann ist ok.
Bekkart
Posts: 27
Joined: 05 Nov 2019, 12:29

Re: Wie ein Eintrag aus DropDownList ansprechen?

13 Nov 2019, 12:07

hm... Also in einem Testcode, hab ich das nicht hinbekommen. Es erfolgt kein Trigger nach der Auswahl.

Code: Select all

#ifWinActive, ahk_exe notepad++.exe
SetTitleMatchMode 2
{ ;Abschnitt Gruppe Gruppe Damit GUI nur in Editor und Send Fenster aktiv ist
	GroupAdd, Test, ahk_exe AutoHotKey.exe
	GroupAdd, Test, ahk_exe notepad++.exe
	}
TabON: ; Vordergrund / Hintergund
WinWaitActive, ahk_group Test
{ ;GUI allgemeiner Part
Gui, +AlwaysOnTop +Caption
Gui, Color, C0C0C0
Gui, Show, x1314 y416 w400 h400, BlaBliBlub ; Titel GUI - 24 Zoll Variante
Gui, Add, Tab3, w400 h800, BlaBla|Test2|
}
 ;GUI alle Registerkarten und Buttons
Gui, Add, Text, x20 y50 w200 h15, Allgemein
Gui, Add, Button, Default w130 gbtn1, [E] Events  
Gui, Add, DropDownList, vShortcut_Num gAbfrage, Shortcuts (NUM)||Num 1: Event
Gui Add, Text, x25 y293 w350 h2 +0x10 ; Strich
{ 
WinWaitNotActive, ahk_group Test 
Gui, Destroy
;Gui, Minimize
gosub, TabON
return

}
Gui, Submit
Abfrage: 
if (Shortcut_num= "E: Events")
Gosub, btn1
Return

;############################################################ allgemein
btn1:
winactivate ahk_exe notepad++.exe
send, ^f{raw}Events
send,{Enter}{Esc}{Home}{NumpadDown 5} ; Events 
return
^E::gosub, btn1
UnReALiTyy
Posts: 166
Joined: 06 Jun 2017, 11:38

Re: Wie ein Eintrag aus DropDownList ansprechen?

13 Nov 2019, 12:36

Bekkart wrote:
13 Nov 2019, 12:07
hm... Also in einem Testcode, hab ich das nicht hinbekommen. Es erfolgt kein Trigger nach der Auswahl.

Code: Select all

#ifWinActive, ahk_exe notepad++.exe
SetTitleMatchMode 2
{ ;Abschnitt Gruppe Gruppe Damit GUI nur in Editor und Send Fenster aktiv ist
	GroupAdd, Test, ahk_exe AutoHotKey.exe
	GroupAdd, Test, ahk_exe notepad++.exe
	}
TabON: ; Vordergrund / Hintergund
WinWaitActive, ahk_group Test
{ ;GUI allgemeiner Part
Gui, +AlwaysOnTop +Caption
Gui, Color, C0C0C0
Gui, Show, x1314 y416 w400 h400, BlaBliBlub ; Titel GUI - 24 Zoll Variante
Gui, Add, Tab3, w400 h800, BlaBla|Test2|
}
 ;GUI alle Registerkarten und Buttons
Gui, Add, Text, x20 y50 w200 h15, Allgemein
Gui, Add, Button, Default w130 gbtn1, [E] Events  
Gui, Add, DropDownList, vShortcut_Num gAbfrage, Shortcuts (NUM)||Num 1: Event
Gui Add, Text, x25 y293 w350 h2 +0x10 ; Strich
{ 
WinWaitNotActive, ahk_group Test 
Gui, Destroy
;Gui, Minimize
gosub, TabON
return

}
Gui, Submit
Abfrage: 
if (Shortcut_num= "E: Events")
Gosub, btn1
Return

;############################################################ allgemein
btn1:
winactivate ahk_exe notepad++.exe
send, ^f{raw}Events
send,{Enter}{Esc}{Home}{NumpadDown 5} ; Events 
return
^E::gosub, btn1
Wie soll das auch funktionieren? Die Zeile Gui, Submit wird wegen dem return davor niemals erreicht.

Code: Select all

Gui, Submit
Abfrage: 
if (Shortcut_num= "E: Events")
Gosub, btn1
Return
Nach anklicken des Buttons abfrage muss auch Gui, Submit ausgeführt werden.

Code: Select all

Abfrage:
Gui, Submit
if (Shortcut_num= "E: Events")
Gosub, btn1
Return
gregster
Posts: 4252
Joined: 30 Sep 2013, 06:48

Re: Wie ein Eintrag aus DropDownList ansprechen?

13 Nov 2019, 12:56

Yep, du müsstest es schon in die entspechende gelabelte Subroutine inkludieren, eben "direkt unterhalb des Labels" (oder meinetwegen auch später), aber auf jeden Fall noch bevor du auf die Variable zugreifst, wie gezeigt:
gregster wrote: Auf jeden Fall bevor du die v-Variable ShortcutÜbersicht in der Subroutine checkst (vgl. meinen Code oben), also z. B. direkt unterhalb des Labels:

Code: Select all

Abfrage:
Gui, Submit  	; optional, wenn die GUI offen bleiben soll:    , NoHide
if (ShortcutÜbersicht= "Eintrag1")
; [...]
else if (ShortcutÜbersicht= "Eintrag 2")
Davor, sozusagen im Niemandsland, wäre der Code unerreichbar, wie UnReALiTyy korrekt erklärt hat.
UnReALiTyy
Posts: 166
Joined: 06 Jun 2017, 11:38

Re: Wie ein Eintrag aus DropDownList ansprechen?

13 Nov 2019, 13:27

Bekkart wrote:
13 Nov 2019, 12:07
hm... Also in einem Testcode, hab ich das nicht hinbekommen. Es erfolgt kein Trigger nach der Auswahl.

Code: Select all

#ifWinActive, ahk_exe notepad++.exe
SetTitleMatchMode 2
{ ;Abschnitt Gruppe Gruppe Damit GUI nur in Editor und Send Fenster aktiv ist
	GroupAdd, Test, ahk_exe AutoHotKey.exe
	GroupAdd, Test, ahk_exe notepad++.exe
	}
TabON: ; Vordergrund / Hintergund
WinWaitActive, ahk_group Test
{ ;GUI allgemeiner Part
Gui, +AlwaysOnTop +Caption
Gui, Color, C0C0C0
Gui, Show, x1314 y416 w400 h400, BlaBliBlub ; Titel GUI - 24 Zoll Variante
Gui, Add, Tab3, w400 h800, BlaBla|Test2|
}
 ;GUI alle Registerkarten und Buttons
Gui, Add, Text, x20 y50 w200 h15, Allgemein
Gui, Add, Button, Default w130 gbtn1, [E] Events  
Gui, Add, DropDownList, vShortcut_Num gAbfrage, Shortcuts (NUM)||Num 1: Event
Gui Add, Text, x25 y293 w350 h2 +0x10 ; Strich
{ 
WinWaitNotActive, ahk_group Test 
Gui, Destroy
;Gui, Minimize
gosub, TabON
return

}
Gui, Submit
Abfrage: 
if (Shortcut_num= "E: Events")
Gosub, btn1
Return

;############################################################ allgemein
btn1:
winactivate ahk_exe notepad++.exe
send, ^f{raw}Events
send,{Enter}{Esc}{Home}{NumpadDown 5} ; Events 
return
^E::gosub, btn1
Habe mal ein wenig Optimiert, vielleicht passt dir es ja so.

Code: Select all

SetTitleMatchMode 2
 ;Abschnitt Gruppe Gruppe Damit GUI nur in Editor und Send Fenster aktiv ist
	GroupAdd, Test, ahk_exe AutoHotKey.exe
	GroupAdd, Test, ahk_exe notepad++.exe

TabON: ; Vordergrund / Hintergund
WinWaitActive, ahk_group Test

 ;GUI allgemeiner Part
Gui, +AlwaysOnTop +Caption
Gui, Color, C0C0C0
Gui, Add, Tab3, w400 h800, BlaBla|Test2|

 ;GUI alle Registerkarten und Buttons
Gui, Add, Text, x20 y50 w200 h15, Allgemein
Gui, Add, Button, Default w130 gbtn1, [E] Events  
Gui, Add, DropDownList, Choose1 vShortcut_Num gAbfrage, Shortcuts (NUM)|Num 1: Event|
Gui, Add, Text, x25 y293 w350 h2 +0x10 ; Strich
Gui, Show, x1314 y416 w400 h400, BlaBliBlub ; Titel GUI - 24 Zoll Variante

WinWaitNotActive, ahk_group Test 
Gui, Destroy
gosub, TabON

Abfrage:
Gui, Submit ;,nohide
if (Shortcut_num = "Num 1: Event")
gosub, btn1
return

;############################################################ allgemein
^E::
btn1:
WinActivate ahk_exe notepad++.exe
send, ^f{raw}Events
send,{Enter}{Esc}{Home}{NumpadDown 5} ; Events 
return
Bekkart
Posts: 27
Joined: 05 Nov 2019, 12:29

Re: Wie ein Eintrag aus DropDownList ansprechen?

13 Nov 2019, 13:51

> Habe mal ein wenig Optimiert, vielleicht passt dir es ja so.
Danke. Ich schau mir das mal in Ruhe an und schaue ob ich das auf mein Script portieren kann.

Ich hab noch 2 Probleme die eine ähnliche Richtung gehen.
Das ist derzeit mein Test (auf Basis deiner Änderungen)

Code: Select all

SetTitleMatchMode 2
 ;Abschnitt Gruppe Gruppe Damit GUI nur in Editor und Send Fenster aktiv ist
	GroupAdd, Test, ahk_exe AutoHotKey.exe
	GroupAdd, Test, ahk_exe notepad++.exe

TabON: ; Vordergrund / Hintergund
WinWaitActive, ahk_group Test

 ;GUI allgemeiner Part
Gui, +AlwaysOnTop +Caption
Gui, Color, C0C0C0
Gui, Add, Tab3, w400 h800, BlaBla|Test2|

 ;GUI alle Registerkarten und Buttons
Gui, Add, Text, x20 y50 w200 h15, Allgemein
Gui, Add, Button, Default w130 gbtn1, [E] Events  
Gui, Add, DropDownList, Choose1 vShortcut_Num gAbfrage, Shortcuts (NUM)|Num 1: Event|
Gui, Add, Text, x25 y293 w350 h2 +0x10 ; Strich
Gui, Show, x1314 y416 w400 h400, BlaBliBlub ; Titel GUI - 24 Zoll Variante

WinWaitNotActive, ahk_group Test 
Gui, hide
gosub, TabON

Abfrage:
Gui, Submit ,nohide
if (Shortcut_num = "Num 1: Event")
gosub, btn1
return

;############################################################ allgemein
^E::
btn1:
WinActivate ahk_exe notepad++.exe
send, ^f{raw}Events
send,{Enter}{Esc}{Home}{NumpadDown 5} ; Events 
return
Ersetze ich GUI, hide zu GUI destroy läuft alles. In der Variante oben, minimiert er dann auch, wenn er wieder kommt läuft aber in den Fehler und meckert in Zeile 17, weil ich angeblich die gleiche Variable mehrfach benutze (Spec vShortcut_Num gAbfrage).

Und SuperBonusfrage: Ich will, dass er sobald das Fenster aus der Gruppe wieder aktiv wird auch noch ein Redraw auf meine GUI bekommen, damit auch alles wieder angezeigt wird.

WinSet, Redraw,, ahk_exe AutoHotKey.exe
UnReALiTyy
Posts: 166
Joined: 06 Jun 2017, 11:38

Re: Wie ein Eintrag aus DropDownList ansprechen?

13 Nov 2019, 14:00

Ja deshalb hab ich da ein Gui, Destroy hingemacht, was stört dich daran?

Code: Select all

SetTitleMatchMode 2
 ;Abschnitt Gruppe Gruppe Damit GUI nur in Editor und Send Fenster aktiv ist
	GroupAdd, Test, ahk_exe AutoHotKey.exe
	GroupAdd, Test, ahk_exe notepad++.exe

TabON: ; Vordergrund / Hintergund
WinWaitActive, ahk_group Test

 ;GUI allgemeiner Part
Gui, +AlwaysOnTop +Caption
Gui, Color, C0C0C0
Gui, Add, Tab3, w400 h800, BlaBla|Test2|

 ;GUI alle Registerkarten und Buttons
Gui, Add, Text, x20 y50 w200 h15, Allgemein
Gui, Add, Button, Default w130 gbtn1, [E] Events  
Gui, Add, DropDownList, Choose1 vShortcut_Num gAbfrage, Shortcuts (NUM)|Num 1: Event|
Gui, Add, Text, x25 y293 w350 h2 +0x10 ; Strich
Gui, Show, x1314 y416 w400 h400, BlaBliBlub ; Titel GUI - 24 Zoll Variante
WinSet, Redraw,, ahk_exe AutoHotKey.exe

WinWaitNotActive, ahk_group Test 
Gui, Destroy
gosub, TabON

Abfrage:
Gui, Submit, nohide
if (Shortcut_num = "Num 1: Event")
gosub, btn1
return

;############################################################ allgemein
^E::
btn1:
WinActivate ahk_exe notepad++.exe
send, ^f{raw}Events
send,{Enter}{Esc}{Home}{NumpadDown 5} ; Events 
return
Bekkart
Posts: 27
Joined: 05 Nov 2019, 12:29

Re: Wie ein Eintrag aus DropDownList ansprechen?

13 Nov 2019, 14:28

UnReALiTyy wrote:
13 Nov 2019, 14:00
Ja deshalb hab ich da ein Gui, Destroy hingemacht, was stört dich daran?
Ich muss oft die Pos und die Registerkarte ändern (manchmal zweiter Montitor usw), aber es gibt keine festen Koordinaten die helfen, daher ist Destory hinderlich. Dann wird die GUI jedes mal neugestartet. Bei Hide würde beides erhalten bleiben. Daher ist das mein Ziel.
UnReALiTyy
Posts: 166
Joined: 06 Jun 2017, 11:38

Re: Wie ein Eintrag aus DropDownList ansprechen?

13 Nov 2019, 16:34

Bekkart wrote:
13 Nov 2019, 14:28
UnReALiTyy wrote:
13 Nov 2019, 14:00
Ja deshalb hab ich da ein Gui, Destroy hingemacht, was stört dich daran?
Ich muss oft die Pos und die Registerkarte ändern (manchmal zweiter Montitor usw), aber es gibt keine festen Koordinaten die helfen, daher ist Destory hinderlich. Dann wird die GUI jedes mal neugestartet. Bei Hide würde beides erhalten bleiben. Daher ist das mein Ziel.
Ok kein Problem, dann mach es ohne Feste Koordinate am Anfang.

Code: Select all

SetTitleMatchMode 2

 ;Abschnitt Gruppe Gruppe Damit GUI nur in Editor und Send Fenster aktiv ist
GroupAdd, Test, ahk_exe AutoHotKey.exe
GroupAdd, Test, ahk_exe notepad++.exe

 ;GUI allgemeiner Part
Gui, +AlwaysOnTop +Caption
Gui, Color, C0C0C0
Gui, Add, Tab3, w400 h800, BlaBla|Test2|

 ;GUI alle Registerkarten und Buttons
Gui, Add, Text, x20 y50 w200 h15, Allgemein
Gui, Add, Button, Default w130 gbtn1, [E] Events  
Gui, Add, DropDownList, Choose1 vShortcut_Num gAbfrage, Shortcuts (NUM)|Num 1: Event|
Gui, Add, Text, x25 y293 w350 h2 +0x10 ; Strich

TabON: ; Vordergrund / Hintergund
WinWaitActive, ahk_group Test
	Gui, Show, w400 h400, BlaBliBlub ; Titel GUI - 24 Zoll Variante
WinWaitNotActive, ahk_group Test 
	Gui, Hide
gosub, TabON

Abfrage:
Gui, Submit, nohide
if (Shortcut_num = "Num 1: Event")
gosub, btn1
return

;############################################################ allgemein
^E::
btn1:
WinActivate ahk_exe notepad++.exe
send, ^{f}Events{Enter}{Esc}{Home}{NumpadDown 5} ; Events 
return
Bekkart
Posts: 27
Joined: 05 Nov 2019, 12:29

Re: Wie ein Eintrag aus DropDownList ansprechen?

14 Nov 2019, 00:44

Danke! Funktioniert so. Ich sehe auch den Unterschied, aber ich verstehe ehrlich gesagt nicht warum es funktioniert.
Ich schau mir das nochmal an und probiere ein bissel rum.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: Optimus Prime and 13 guests