Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Aus 2 mach 1 (Listbox mit Hotkey weiterblättern)



  • Please log in to reply
8 replies to this topic
Helmut2
  • Members
  • 5 posts
  • Last active: Nov 09 2015 07:02 PM
  • Joined: 25 Sep 2013

Hallo zusammen,

 

ich versuche jetzt schon etliche Tage Autohotkey zu erlernen.

Einige Funktionen habe ich jetzt schon verstanden.

Leider hapert es bei mir Funktionien in einer Datei zu vereinbaren.

 

 

Ich würde gerne folgende Funktion in meinem AHK haben.
Listbox mit F7 aufrufen.
Dann mit derselben Taste F7 in der Listbox weiterblättern (so als wenn es die Pfeiltaste wäre)
und (wenn es überhaupt so eine Lösung gibt) am Ende der Liste wieder oben anfangen, als wenn durchgescrollt wurde.
Wenn ich dann mit der Entertaste den markierten Listboxeintrag auswähle (bzw. mit Doppelklick) möchte ich dass zum Label

weitergegangen wird.

 

Anbei meine beiden Versuche die Einzeln für sich funktionieren aber nicht zusammen.

Versuch1

f7::  ;Hotkeytaste F7
Gui, 8:Add, ListBox, vEigeneListBox gEigeneListBox h100 r7 w180 choose3,  Text1|Text2|Text3|Text4|Text5
Gui, 8:Add, Button, Default, input
Gui, 8:Show, , Fenstername
return
8GuiEscape:  ;schließt die Listbox mit Escape durch Gui , Destroy
8GuiClose:
Gui , Destroy
return

EigeneListBox:
if A_GuiControlEvent <> DoubleClick
    return

8ButtonInput:
GuiControlGet, EigeneListBox  ;liest die Werte aus
Gui , Destroy      ;schließe das Auswahlfenster

Gui Submit  ;nimmt die markierte Auswahl (ebenso geht GuiControlGet, EigeneListBox)
gosub %EigeneListBox%  ;gehe zum ausgewählten Label:
return

Text1:
msgbox Text1 gewählt
return

Text2:
msgbox Text2 gewählt
return

Text3:
msgbox Text3 gewählt
return

Text4:
msgbox Text4 gewählt
return

Text5:
msgbox Text5 gewählt
return

Versuch2

wobei dieser Versuch nur mit Zahlen funktioniert. hm?

F7::
Gui, Add, ListBox, x50 y70 w50 h200 vListe hwndListeHWND, 1||2|3|4|5|6|7|8|9
Gui, Show,  ,Fenstertitel
ControlGet, ItemList, List,,, ahk_id %ListeHWND%
hierhin:
 Loop, parse, ItemList,  `n,
 {
 KeyWait, F5, D ;T1
Control, ChooseString, %A_LoopField%, Listbox1, ahk_class AutoHotkeyGUI
Sleep, 100
If A_LoopField = 9
goto hierhin
 }

GuiClose:
ExitApp

Ich würde mich über eine Hilfe in die richtige Richtung freuen.

Vielen Dank und viele Grüße im Voraus

 

 

 

 



Gurkentoepfer
  • Members
  • 36 posts
  • Last active: May 18 2015 06:55 AM
  • Joined: 28 Nov 2012

zum ersten Versuch könntest Du die Taste F7 remappen, solange das Fenster geöffnet ist,

z.B.

f7::  ;Hotkeytaste F7
IfWinExist, Fenstername
{
	F7::Down
	return
}
Else
{
Gui, 8:Add, ListBox, vEigeneListBox gEigeneListBox h100 r7 w180 choose3,  Text1|Text2|Text3|Text4|Text5
Gui, 8:Add, Button, Default, input
Gui, 8:Show, , Fenstername
return
8GuiEscape:  ;schließt die Listbox mit Escape durch Gui , Destroy
8GuiClose:
Gui , Destroy
return
}

EigeneListBox:
if A_GuiControlEvent <> DoubleClick
    return

8ButtonInput:
GuiControlGet, EigeneListBox  ;liest die Werte aus
Gui , Destroy      ;schließe das Auswahlfenster

Gui Submit  ;nimmt die markierte Auswahl (ebenso geht GuiControlGet, EigeneListBox)
gosub %EigeneListBox%  ;gehe zum ausgewählten Label:
return

Text1:
msgbox Text1 gewählt
return

Text2:
msgbox Text2 gewählt
return

Text3:
msgbox Text3 gewählt
return

Text4:
msgbox Text4 gewählt
return

Text5:
msgbox Text5 gewählt
return

Jedoch marschiert der Cursor nur bis ans Ende der Liste, den Sprung an den Anfang müsstest Du irgendwie anders realisieren.



Helmut2
  • Members
  • 5 posts
  • Last active: Nov 09 2015 07:02 PM
  • Joined: 25 Sep 2013

Holla,

da habe ich eine Antwort.

Vielen Dank dafür, dass ist für mich eine gute Lösung!

Trefferquote 95%.

Ich kann jetzt mit der Aufruftaste(Hotkey),den Pfeiltasten und Enter aussuchen.

Habe das Menü schon um eine zusätzliche Listbox erweitert (funktioniert ebenfalls)

 

Um meinen Versuch2 nicht ganz umsonst gewesen sein zu lassen, habe ich noch ein wenig rumprobiert.

Dazu habe ich, wenn es nicht allzuviel Mühe macht ein paar Fragen, die ich nicht gelöst bekomme.

 

Ich kann mit der Hotkeytaste aussuchen und mit Enter bestätigen dann kommt mein Ergebnis.

Das Makro kann ich aber nur nach einem Reload wieder auffrufen, da immer noch STILL WAITING (10.23): KeyWait,F5,D ansteht.

Kann das mit dem Ergebnis (Textx erscheint) zurückgesetzt werden?

Das ich mit Enter den markierten Text aussuchen kann, hängt mit dem ok-Button zusammen.

Wie suche ich den markierten Text mit einem Doppelklick aus?

In meinem Versuch1 klappt das aussuchen mit dem Doppelklick - hier nicht.

(Habe ich auch nicht reingenommen, da immer gleich aktiviert)

Liegt wahrscheinlich an meiner noch nicht ganz professionellen Programmierung.


F7::
Gui, Add, ListBox, h100 r7 w180 vListe hwndListeHWND, Text1||Text2|Text3|Text4|Text5
Gui, Add, Button, Default, input
Gui, Show,  ,Fenstertitel

Loop
{
ControlGet, ItemList, List,,, ahk_id %ListeHWND%
hierhin:
  Loop , parse, ItemList, `n
 {

 KeyWait, F5, D ; T1
Control, ChooseString, %A_LoopField%, Listbox1, ahk_class AutoHotkeyGUI 
Sleep, 100
If A_LoopField = Text5
goto hierhin
 }

ButtonInput:
GuiControlGet, Liste  ;liest die Werte aus
Gui , Destroy      ;schließe das Auswahlfenster

Gui Submit  ;nimmt die markierte Auswahl (ebenso geht GuiControlGet, EigeneListBox)
gosub %Liste%  ;gehe zum ausgewählten Label:
return
}

Text1:
msgbox Text1 gewählt
return

Text2:
msgbox Text2 gewählt
return

Text3:
msgbox Text3 gewählt
return

Text4:
msgbox Text4 gewählt
return

Text5:
msgbox Text5 gewählt
return

GuiClose:
ExitApp

Ich würde mich über eine Hilfe in die richtige Richtung freuen.

Vielen Dank und viele Grüße im Voraus



hd0202
  • Members
  • 709 posts
  • Last active: Feb 14 2016 08:05 PM
  • Joined: 13 Aug 2006

Versuchs mal so:

window = no
return

f7::  ;Hotkeytaste F7
If window = yes
{
gui 8:default
guiControlGet, liste ; ItemList ,,, ahk_id %ListeHWND%
if liste = text5
  send {home}
else
  send {Down}
return
}
Else
{
window = yes
Gui, 8:Add, ListBox, h100 r7 w180 vListe hwndListeHWND, Text1||Text2|Text3|Text4|Text5
Gui, 8:Add, Button, Default, input
Gui, 8:Show, , Fenstername
return
8GuiEscape:  ;schließt die Listbox mit Escape durch Gui , Destroy
8GuiClose:
Gui , Destroy
return
}

EigeneListBox:
if A_GuiControlEvent <> DoubleClick
    return

8ButtonInput:
window = no
guiControlGet, liste
Gui , Destroy      ;schließe das Auswahlfenster

gosub %liste%  ;gehe zum ausgewählten Label:
return

Text1:
msgbox Text1 gewählt
return

Text2:
msgbox Text2 gewählt
return

Text3:
msgbox Text3 gewählt
return

Text4:
msgbox Text4 gewählt
return

Text5:
msgbox Text5 gewählt
return

Hubert



Helmut2
  • Members
  • 5 posts
  • Last active: Nov 09 2015 07:02 PM
  • Joined: 25 Sep 2013

Hallo Hubert,
 
ich hätte nicht gedacht, dass so viele Antworten kommen.
Auch für deine Antwort möchte ich mich herzlich bedanken.
Habe jetzt schon eine Weile hin und her probiert.
Es funktioniert fast alles so wie es sein sollte bzw. ich mir das vorstelle.
Für den Doppelklick fehlte nur der Befehl "geigeneListbox" in dieser Zeile, vom obigen Beispiel.
(Gui, 8:Add, ListBox, h100 r7 w180 vListe gEigeneListBox hwndListeHWND)
Warum das bei deinem Script so gut funktioniert und bei meinem weiter oben nicht, kann ich noch nicht nachvollziehen.
Zusätzlich habe ich noch das Problem, dass wenn ich das Script mit ESC abbreche, stürzt das Programm ab - dann hilft nur ein Reload.
Das gleiche Problem habe ich auch, wenn ich das Menü erweitere und versehentlich ein gedrücktes Fenster wieder schließen möchte.

 

So ich habe mal ein Menü für mich zusammengeschustert, dass bis auf dass sehr komfortable "durchscrollen" mit Hilfe von

Gurkentoepfer funktioniert.

Ich habe vor das Menü noch um eine Instanz zu erhöhen, dass müßte ich mit dem Winkill-befehl wohl noch schaffen.

 

Falls jemand noch Tipps für mich hat, oder Verbesserungen, oder nicht beantwortete Fragen von weiter oben.

Ich freue mich über alles.

 

 

 

Spoiler



hd0202
  • Members
  • 709 posts
  • Last active: Feb 14 2016 08:05 PM
  • Joined: 13 Aug 2006

Füge in meiner Version hinter 8GuiEscape:

window = no

ein, so kannst du das Fenster nach ESC auch wieder öffnen.

 

Hubert



Helmut2
  • Members
  • 5 posts
  • Last active: Nov 09 2015 07:02 PM
  • Joined: 25 Sep 2013

Hallo Hubert,

 

in dem Script alleine funktioniert es dann!

Nachdem ich das Menü so erweitert habe wie im Post #5 stürzt es dann noch ab, wenn ich F7 und dann F8 drücke.

So ein Menü soll ja auch in allen Lebenslagen funktionieren.

Vielleicht mache ich auch nur mit dem Fensterschließen was falsch, obwohl in Post #5 funktioniert es so.

(Ist allerdings auch eine andere "Programmierart")

Ein Teil 3 soll ebenfalls, wie oben beschrieben, noch folgen und da müssen dann auch alle Tastenkombinationen

durchgeprüft werden.

 

Im Spoiler habe ich auch mal die Version mit Teil2:

 

Spoiler



hd0202
  • Members
  • 709 posts
  • Last active: Feb 14 2016 08:05 PM
  • Joined: 13 Aug 2006
✓  Best Answer

Du musst natürlich auch den Schalter "window" für jedes Fenster separat haben!

Und dann kannst du es auch noch um weitere Fenster erweitern.

Spoiler

Hubert



Helmut2
  • Members
  • 5 posts
  • Last active: Nov 09 2015 07:02 PM
  • Joined: 25 Sep 2013

Hallo Hubert,

 

funktioniert ohne wenn und aber ! Echt Klasse.

Vielen Dank für deine Geduld.

Das ist für mich als Anfänger allerdings nicht ganz so einfach zu verstehen.

Da werde ich noch mal Schritt für Schritt durchspielen.

Ich will dabei ja auch was lernen.

 

Gruß

Helmut