ListBox Multi-Auswahl in chronologischer Reihenfolge

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
Holle
Posts: 187
Joined: 01 Oct 2013, 23:19

ListBox Multi-Auswahl in chronologischer Reihenfolge

12 Nov 2013, 06:18

Hallo,
ich versuche eine Multiauswahl meiner ListBox in einer chonologischen Reihenfolge zu bekommen.

Hier ist erst mal ein Beispielscript:

Code: Select all

Gui, Add, ListBox, vListBox gAuswahl r5 w100 Multi, Blau|Gelb|Grün|Rot|Weiß
Gui, Show, Center, Multi-Auswahl

Return

Auswahl:
	GuiControlGet, ListBox
	ToolTip, Auswahl = %ListBox%
return

GuiClose:
ExitApp
Wenn ich nun "Rot" auswähle und danach mit Strg "Blau" dazu mit auswähle, dann ist in der Variable "Blau|Rot" (alphabetisch sortiert). Ich hätte da aber gerne "Rot|Blau" (chronologisch sortiert).
Ist das möglich?

Das gleiche Problem habe ich wenn ich mit Shift oder Maus eine Mehrfachauswahl mache. Also wenn ich z.B. von "Gelb" bis "Rot" auswähle, dann steht in der Variable "Gelb|Grün|Rot" (so soll es auch sein), aber wenn ich von "Rot" bis "Gelb" auswähle steht da ebenfalls "Gelb|Grün|Rot".
Auch hier wäre mir eine chronologische Reihenfolge wichtig.

Sollte es dafür keinen Befehl geben (DLL, SendMessage, oder was auch immer), dann müsste ich mir die chronologische Reihenfolge mit Hilfe einer "vorher" Variable zusammen basteln. Da hätte ich dann aber gleich auch noch ein Problem:
Solange ich die Mehrfachauswahl per Strg oder Shift+Cursertasten erstelle wird immer schön das G-Label aufgerufen. Wenn ich nun aber per "Mausziehen" oder per Shift+Klick auswähle, dann wird das G-Label aufgerufen und in der Variable befinden sich x neue Einträge. Wie kann ich dann herausfinden ob von "Rot" nach "Blau" ausgewählt wurde, oder von "Blau" nach "Rot" ?

Falls sich jemand fragt wozu das gut sein soll...
Ich möche ein Vorshaubildchen der letzten Auswahl anzeigen, so dass man gleich sieht ob das dich richtige Auswahl war , und diese ggf. noch korrigieren kann.

Vielen Dank.
just me
Posts: 9458
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: ListBox Multi-Auswahl in chronologischer Reihenfolge

12 Nov 2013, 10:42

Hallo,

ich bin mir noch nicht sicher, ob und inwieweit das machbar ist. Ich habe aber auch noch ein Verständnisproblem:

Bei einer Mehrfachauswahl wird die Auswahl wohl immer in der Reihenfolge der Darstellung im der ListBox in die GUI-Variable gestellt. Welchen Unterschied macht es für den Benutzer, ob er die Einträge in der Reihenfolge 3 -> 6 oder 6 -> 3 ausgewählt hat? Die Auswahl umfasst in beiden Fällen die Einträge 3, 4, 5 und 6 und wird in der ListBox korrekt dargestellt. :roll:
User avatar
Holle
Posts: 187
Joined: 01 Oct 2013, 23:19

Re: ListBox Multi-Auswahl in chronologischer Reihenfolge

13 Nov 2013, 05:32

Ja, das stimmt soweit, aber...

Da ich für die Auswahl eine Vorschau benutze möchte ich bei einer Mehrfachauswahl die letzte Auswahl in der Vorschau anzeigen.

Beispiel:
Ich wähle "Rot" und bekomme "Rot" in der Vorschau angezeigt. Nun wähle ich per Strg "Blau" dazu. Nun ist Blau die letzte Auswahl und dementsprechend soll Blau in der Vorschau angezeigt werden (damit man gleich sieht dass die Auswahl auch das richtige ist (bei Namen wie xs1256 und xs1257 könnte man ohne Vorschau leicht das falsche auswählen). Nun ist in der Variable aber immer eine alphabetische Reihenfolge, also wird "Blau|Rot" angezeigt und nicht "Rot|Blau". Dementsprechend kann ich nicht einfach den letzten String nach dem Delimiter als letzte Auswahl nehmen.
Wenn man per Shift und Maus mehrere Einträge auf einmal auswählt wäre es nützlich wenn der Eintrag "auf dem geklickt" wurde als letztes erscheint, weil man die "anderen" auswahlen anscheined kennt (sonst würde man ja nicht alle auf einmal auswählen). Der letzte Eintrag allerdings kann durchaus "unsicher" sein, aber den würde man dann ja in der Vorschau sehen (wenn es dann doch zuviel war kann man den ja immer noch abwählen).
Also wenn ich z.B. "Gelb , Grün und Rot" sicher auswählen will, aber nicht sicher bin ob "Blau" auch meiner Vorstellung entspricht würde ich ja im Idealfall "Rot" markieren und dann mit gehaltener Shift-Taste auf Blau klicken. Wenn ich nun "Blau" in der Vorschau sehe weiß ich ob die Auswahl korrekt war, oder ob ich "Blau" wieder abwählen muß.

Bei Einzelauswahlen (Strg oder Shift+Cursor) kann ich ja jedesmal die Auswahl von vorher mit der neuen Auswahl vergleichen und somit die letzte Auswahl ermitteln (sofern es dafür nicht eine bessere Möglichkeit gibt), aber bei einer Mehrfachauswahl (Shift+Buchstabe , Maustaste+ziehen) sehe ich im vorher/nachher Vergleich nur welche Auswahlen hinzugekommen sind, jedoch nicht welche davon die letzte war.
Notfalls müsste ich dann noch prüfen ob zuletzt ein klick oder ein Tastendruck stattgefunden hat und dementsprechend ermitteln wo die Maus gerade steht, bzw. welche Taste gedrückt wurde (Buchstabe, PageDown,...) und wo man dann gelandet ist.
Das wäre jedoch ein enormer Aufwand, deswegen wäre mir eine DLL-,SendMessage,-WasAuchImmer-Lösung lieber.
just me
Posts: 9458
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: ListBox Multi-Auswahl in chronologischer Reihenfolge

13 Nov 2013, 06:21

... Notfalls müsste ich dann noch prüfen ob zuletzt ein klick oder ein Tastendruck stattgefunden hat und dementsprechend ermitteln wo die Maus gerade steht, bzw. welche Taste gedrückt wurde (Buchstabe, PageDown,...) und wo man dann gelandet ist. Das wäre jedoch ein enormer Aufwand ...
Ich fürchte, Du wirst genau das versuchen müssen. Mit den passenden OnMessage() Funktionen (WM_LBUTTONDOWN, WM_LBUTTONUP, WM_KEYDOWN, etc.) könnte sich vielleicht etwas machen lassen.

Folgen kann ich Dir allerdings immer noch nicht wirklich. Wenn das Ergebnis einer Mehrfachauswahl als "Vorschau" anzeigt werden soll, sind doch alle Elemente der Auswahl am Ergebnis beteiligt, nicht nur das zuletzt gewählte. Wenn durch Ziehen oder Shift-Klick mehrere Elemente auf einem Schlag ausgewählt werden, gibt es kein (letztes) Element, das allein für die Veränderungen verantwortlich ist. Solange die Elemente einzeln ausgewählt werden, kannst Du aber die alte Auswahl mit der neuen vergleichen, um herauszufinden, welches Element neu dazugekommen ist.
User avatar
Holle
Posts: 187
Joined: 01 Oct 2013, 23:19

Re: ListBox Multi-Auswahl in chronologischer Reihenfolge

13 Nov 2013, 07:31

just me wrote:Ich fürchte, Du wirst genau das versuchen müssen. Mit den passenden OnMessage() Funktionen (WM_LBUTTONDOWN, WM_LBUTTONUP, WM_KEYDOWN, etc.) könnte sich vielleicht etwas machen lassen.
Das sollte mit meiner Funktion "LastKey" machbar sein. Doch mit der letzten Taste alleine ist es nicht getan, denn je nachdem ob PageDown, ein Buchstabe, Tab, usw. gedrückt wurde geht´s erst richtig los, dann muss "errechnet" werden welcher Eintrag der letzte war ;-). Wenn ich die anderen Punkte meiner Liste abgearbeitet habe und ich dann noch die Zeit finde setze ich mich mal da dran, bis dahin muss ich ohne diese Funktion auskommen (ist nicht so wichtig).
just me wrote:Folgen kann ich Dir allerdings immer noch nicht wirklich. Wenn das Ergebnis einer Mehrfachauswahl als "Vorschau" anzeigt werden soll, sind doch alle Elemente der Auswahl am Ergebnis beteiligt, nicht nur das zuletzt gewählte.
In der Vorschau kann immer nur ein Eintrag dargestellt werden (ist ein Bild). Solange man alle Einträge kennt ist das kein Problem, aber wenn man nicht alle auswendig kennt ist die Vorschau eine "Unterstützung".

Beispiel:
Nehmen wir mal an, ich habe lauter "Namen" in der ListBox und als Vorschau sehe ich das dazugehörige Passfoto.
Wenn ich jede Person kenne kann ich die einfach "zusammenstellen". Wenn ich mir bei manchen Personen jedoch "unsicher" bin hilft mir das Vorschaubildchen auf die Sprünge. Nun sehe ich bei jeder Auswahl das dazugehörige Bild und weiß dass ich "richtig" ausgewählt habe (oder ob ich mich vertan habe). Wenn ich nun "Meier,A." , "Meier,K." , "Meier,M." auswählen will und mir nicht mehr sicher bin, ob "Meier,U." auch einer von "denen" ist wähle ich einfach von "Meier,K." bis "Meier,U." aus und sehe dann den letzten Eintrag "Meier,U.". So weiß ich gleich ob der "dazu" gehört oder nicht (in dem Fall wähle ich ihn wieder ab).
Die Anderen der Mehrfachauswahl bekomme ich nicht angezeigt (außer wenn ich einen nach dem anderen auswähle), aber da ich mir bei den "Anderen" ja sicher bin ist das auch nicht nötig.

Alternativ kann ich auch einfach die zusammen auswählen bei denen ich mir sicher bin und danach den "unsicheren" einzeln dazu wählen, das wäre dann kein Problem.
...aber was zeige ich dann in der Vorschau, nachdem die Mehrfachauswahl getroffen wurde? Wenn ich diese nicht aktualisiere würde die letzte Einzelauswahl darin zu sehen sein, was völlig irritieren würde. Eine Möglichkeit wäre in diesem Fall ein leeres Bild anzuzeigen, aber schöner wäre halt wenn der letzte Eintrag darin zu sehen ist.
just me
Posts: 9458
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: ListBox Multi-Auswahl in chronologischer Reihenfolge

13 Nov 2013, 08:01

Vielleicht habe ich doch zu kompliziert gedacht. Probier doch mal, ob das tut, was Du Dir vorgestellt hast:

Code: Select all

#NoEnv

Gui, Add, ListBox, vListBox gAuswahl hwndHLB r5 w100 Multi, Blau|Gelb|Grün|Rot|Weiß
Gui, Show, Center, Multi-Auswahl

Return

Auswahl:
   GuiControlGet, ListBox
   ControlGet, Letzte, Choice, , , ahk_id %HLB%
   ToolTip, Auswahl = %ListBox%`r`nLetzte = %Letzte%
Return

GuiClose:
ExitApp
User avatar
Holle
Posts: 187
Joined: 01 Oct 2013, 23:19

Re: ListBox Multi-Auswahl in chronologischer Reihenfolge

13 Nov 2013, 08:53

GENIAL !!!
Das ist die Perfekte Lösung.
Vielen dank !

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 61 guests