Selfmade AutoComplete für eine Editcontrol
-
Hallo,
ich habe gesehen da war schon mal jedmand kürzlich auf der Suche nach sowas, aber das unterscheidet sich etwas zu meinem Problem. Also ich erkläre mal kurz wie ich mir die Funktionsweise vorstelle.
1. man hat eine vorgegebene Wortliste
2. man gibt ein Zeichen in eine Editfeld ein, an dieser Stelle denke ich benötige ich "EN_UPDATE" oder "EN_CHANGE" und ich vergleiche ob die bishierhin getätigte Eingabe dem ersten Teil eines Wortes der Wortliste entspricht.
3a. wenn nein, dann mache nix
3b. wenn ja dann füge den fehlenden Teil den bereits eingegenen Zeichen hinzuDas Einfügen des fehlenden Teils soll folgendermasen aussehen: die bereits eingegeben Zeichen sind scharz auf weiss (also nicht selektiert), die automatisch hinzugefügten Zeichen sind weiss auf blau, also selektiert, hierzu benötige ich warscheinlich "EM_SETSEL". So jetzt habe ich einen String der vorne schwarz auf weiss und hinten weiss auf blau ist. Jetzt kommt der Teil wo ich nicht weiter weiss. Wo befindet sich nun der Eingabecursor? Ferner möcht ich so fortfahren, dass wenn ich ein weiteres Zeichen eingebe, dieses hinter dem scharz/weissen und vor dem weiss/blauen Text eingefügt wird. Danach wird wieder die Funktion oben an Stelle (2) ausgeführt (unter der Voraussetzung, dass der manuell schwarz/weisse Text für den Vergleich beachtet und der automatisch eingefügte weiss/blaue Text unbeachtet bleibt) usw. Kann mir jemand für den letzten Teil zu einer Vorgehensweise raten und/oder mir generell sagen ob der Ablauf mit "EN_UPDATE" oder "EN_CHANGE" (was nehm ich da?) und "EM_SETSEL" so korrekt ist? Ich gehe mal davon aus, dass ich nicht subclassen muss, oder?
-
hallo,
dass der Text automatisch eingefügt wird, ist denk ich keine so gute Idee, da dann immer nur eines der Wörter aus der Liste angezeigt wird. Normalerweise öffnet sich ja unter dem Eingabefeld eine Liste mit Wörtern.
Zu dem blau/weiß Problem. Du weißt ja wie viele Buchstaben der Benutzer eingegeben hat. Sobald der Vorschlag im Textfeld steht, markierst du einfach den Bereich ab zB 2, wenn der Benutzer 2 Buchstaben eingegeben hatte, bis zum Ende. Durch das Markieren wird der Text in deinen Farben eingefärbt und das Cursorproblem besteht nicht, weil wenn der Benutzer jetzt weiterschreibt, wird sowieso das Autovervollständigte ersetzt.
greetz KN4CK3R
-
Autocomplete ist Native in Win32
Sie können fragen auf Professional Win32-API-Newsgroup:
news://nntp.aioe.org/comp.os.ms-windows.programmer.win32
-
KN4CK3R schrieb:
hallo,
dass der Text automatisch eingefügt wird, ist denk ich keine so gute Idee, da dann immer nur eines der Wörter aus der Liste angezeigt wird. Normalerweise öffnet sich ja unter dem Eingabefeld eine Liste mit Wörtern.Ja soweit hast du recht, deshalb hab ich für den Fall, daß ein Wort gefunden wurde den Event Pfeil rechts und Pfeil links so umbegogen das man damit das nächste oder das vorherige Wort aus der Wortliste anscrollen kann, das ebenfalls ins Suchmuster passt, praktisch eine endlos Schleife, wurde zuvor kein Wort gefunden funktionieren die Pfeiltasten wie original vorgesehen. Achso ja hab ich vergessen zu erwähnen, das Ganze mußte ich für den Editteil einer ComboBoxEx realisieren. Hab dann das Editfeld gesubclassed und die einsprechenden Events WM_CHAR, WM_KEYDOWN etc. abgefangen und mit eigenen Funktionen versehen.
fred100 schrieb:
Autocomplete ist Native in Win32
Sie können fragen auf Professional Win32-API-Newsgroup:
news://nntp.aioe.org/comp.os.ms-windows.programmer.win32Danke für den Hinweis, werde mich dort auch mal umschauen.