IntelliSenseBox

  • Als StandardControl haben wir ja mit der ComboBox die Möglichkeit eine eingabesensitive Auswahl zu ermöglichen.
    Ich habe hier mal ein Beispiel erstellt, wie man diese Funktionalität auch für z.B. Input-Ctrl erreichen kann.
    Gründe dafür:
    - ich finde es optisch nicht sehr ansprechend, wenn die Schaltfläche der ComboBox die GUI 'verschandelt'
    - ich habe hiermit die Möglichkeit eigene Auswahllisten auch für Fremdanwendungen (so sie denn Standard Windows Controls verwenden) zu nutzen



    Funktionsweise:
    Wird in das Inputfeld ein Buchstabe eingegeben, der auch als Anfangsbuchstabe in der Liste hinterlegt ist, popt das Auswahlfenster auf.
    Der Focus bleibt aber beim Inputfeld.
    Ist in der Liste kein Eintrag mit diesem Buchstaben, wird sie auch nicht eingeblendet.
    Es wird mit jedem weiteren Buchstaben auf Übereinstimmung geprüft und entsprechend der erste Eintrag markiert, auf den die bisherige Eingabe zutrifft.
    Mit PFEIL AUF / PFEIL AB kann in der Liste die Auswahl verschoben werden.
    Mit ENTER wird der momentan markierte Eintrag aus der Liste in das Input übernommen.
    Mit ESC kann die Liste ohne Übernahme gechlossen werden.


    Edit 08.03.09:
    Habe das Skript nochmal etwas bearbeitet. Alle bisher im Thread besprochenen Änderungen/Ergänzungen sind enthalten.
    Es ist jetzt allgemein gehalten, sodass es für Input- und ComboBox-Ctrl gleichermaßen verwendet werden kann. Es brauchen auch keine Anpassungen in den Funktionen für die Control-ID's erfolgen.
    Es muß zur Anwendung nur noch folgendes getan werden:
    - Einmalig bei der Erstellung eine Zuweisung auf den allgemeinen Namen ($SenseGui u. $SenseCtrl)
    - Befüllen des DatenArray mit den Auswahldaten
    Edit zum Edit: $nNotifyCode für ComboBox fehlte noch :S - jetzt komplett



    DL bisher: 70

  • Sehr schön.


    Kann man sehr gut gebrauchen. Habe ich mir immer schon gewünscht.


    ALLERDINGS:
    Es fehlt noch ein #include <File.au3> im DownloadScript. Zumindest funktioniert es bei mir sonst nicht.


    Gruß und besten Dank
    Autoirrer

  • Hab mal eingebaut, dass die Liste beim Focus-Verlust ausgeblendet wird und man das Fenster auch verschieben kann :)
    Auch Auswahl mit Klick auf den Eintrag möglich.
    Außerdem Beide Bugs Gefixt :)

  • Ja, das hab ich oben in meinem Edit geschrieben ;-)
    Die Ctrl-Erkennung erfolgt automatisch.
    Hier mal ein Bsp. (Code ist identisch, bis auf die Region Main also deine GUI mit Control):

  • Vielen Dank an BugFix & CoCoder, genau das habe ich lange gesucht!!


    Ich wuerde gerne das Script anpassen und in mein Projekt uebernehmen. Allerdings mit folgenen 2 Modifikationen:


    1. Die dargestellten Treffer in der ListBox sollten waehrend der Eingabe eingeschraenkt werden, d.h. nur die Treffer anzeigen, die aufgrund der bisherigen Eingabe noch relevant sind.
    2. Die ListBox sollte bei Bedarf auch entsprechend der Anzahl der Treffer in der Hoehe dynamisch angepasst werden.


    Kann mir bitte jemand einen Tipp geben, wo ich im Code drehen muss, um diesen Effekt zu erreichen?


    Vielen Dank im voraus.
    - George

  • Hallo


    Wo wir schon dabei sind. Ich mag die Umsetzung mit IsPressed überhaupt nicht. Hier mal eine Version mit OnEvent + AcceleratorKeys:


    Gruß
    Spider

  • Wirklich gut gemacht.


    Drei kleine Fehler hab ich trotzdem entdeckt:


    1. Wenn man nichts markiert hat, und trotzdem Enter drückt, wird 0 in das Input geschrieben.
    2. Das Fenster, welches du erstellst, wird in der Taskleiste angezeigt.
    3. Wenn man etwas in die Box reinschreibt, dies dann aber wieder löscht, ist die Box trotzdem noch da.


    Sind zwar nicht wirklich Fehler, hab sie trotzdem behoben. Ich hoffe, du bist mir nicht böse. ;)


    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:


    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P


    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

  • funktioniert genial!


    Eine SQL Tabelle mit 1500 Einträgen als Quelle für die Listbox und läuft Super.


    Wo ich lange gestolpert bin, einige Werte meines eingelesenes array´s hatten zusätzlich ein @lf hinter dem wert. Dann funktioniert die intellisensebox nicht! Falls jemand mal so ein Problem haben sollte...


    vielen Dank Bugfix für dieses Script!

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • Hallo @BugFix und natürlich alle anderen :)


    ich suchte die Möglichkeit Auswahlfenster für eine GUI zu erstellen. Auch wenn der Thread schon alt ist, scheint mir das Skript das beste (passendste) für mich zu sein unter den Alternativen, die ich gefunden habe. In einer GUI habe ich mehrere Inputboxen wunderbar mit Auswahllisten ausstatten können. Das klappt ganz toll! Vielen Dank dafür.


    Nun wollte ich versuchen, Auswahllisten in einer anderen GUI zu platzieren. Allerdings stoße ich hier an Verständnis-Probleme und wäre für Hilfe sehr dankbar.

    - ich habe hiermit die Möglichkeit eigene Auswahllisten auch für Fremdanwendungen (so sie denn Standard Windows Controls verwenden) zu nutzen


    Wenn ich im vorliegenden Skript die Region Main herausnehme, die GUI in einem zweiten Skript laufen lasse und hier die Handles von Fenster und Controls als $SenseGui und $SenseCtrl nutze, erscheint das Auswahlfenster nicht.



    Bei genauerer Betrachtung scheint das auch klar zu sein, weil das Fenster in der MY_WM_COMMAND-Funktion angezeigt wird. Wie kann ich da überhaupt die Events von fremden GUIs empfangen? Wie ist das vielleicht sonst gedacht?