Hallo, Falko! Ich habe Deinen Code kopiert und nur die Pfade für die beiden Bitmaps und die txt.Datei geändert. Das Ergebnis ist leider nicht annähernd so, wie es auf Deinen Rechnern der Fall ist:
- Ich sehe keinen Effekt aufgrund der BMPs (das ist vielleicht auch nicht so wichtig)
- Die Combobox-Dropdown-Liste öffnet sich nicht (gut, das kann ich mit dem Ergänzen um den entsprechenden SendMessage-Befehl erreichen, funktioniert bei Dir das Ausklappen ohne diesen Befehl?)
- außerdem muss ich die "If GetGadgetState(0)<0"-Abfrage abschalten, um überhaupt eine Auswahl aus der Item-Liste zu erreichen. Wenn ich dies nicht tue, bleibt das Programm nach der Eingabe von 2 Buchstaben auf dem ersten Eintrag "hängen".
Vielleicht hast Du ja noch eine Idee!!?
Gruß, Andreas
Combobox und Autocomplete
- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Hallo Andi,
ich glaube ich hatte da was falsch verstanden. Also wenn du editieren willst,
dann soll sich der AutoComplete-String in der oberen Combobox komplett selectieren.
Dazu musst du den Platz für #CB_SETCURSEL nach unten stellen, wie im nachfolgenden Source:
Dann brauchst du die beiden VK nicht mehr einsetzen, da auch nach Eingabe der komplette automatisch eingesetzte String markiert wird, der in der Liste auftaucht.
Das aufklappen, habe ich bei mir mit dem Pfeilunten-Button in der oberen
Combobox gemacht. Da muss ich noch mal nachschauen
Gruß, Falko
ich glaube ich hatte da was falsch verstanden. Also wenn du editieren willst,
dann soll sich der AutoComplete-String in der oberen Combobox komplett selectieren.
Dazu musst du den Platz für #CB_SETCURSEL nach unten stellen, wie im nachfolgenden Source:
Code: Alles auswählen
Procedure cmbAutoComplete(WindowID, Message, wParam, lParam)
Protected comboWert.s, comboIndex.l, comboLang.l, comboStart.l, parameter.l
Protected start.l, ende.l
result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_COMMAND
Select lParam
Case GadgetID(0)
; If GetGadgetState(0)<0
; SetGadgetState(0, 1)
;EndIf
Select (wParam >> 16 & $FFFF)
Case #CBN_EDITUPDATE
If GetAsyncKeyState_(#VK_BACK) Or GetAsyncKeyState_(#VK_DELETE)
;tu nix
Else
comboWert = GetGadgetText(#comboTest)
comboIndex = SendMessage_(lParam, #CB_FINDSTRING, -1, @comboWert)
comboStart = Len(comboWert)
;Länge des eingegebenen Textes
SendMessage_(lParam, #CB_SETTOPINDEX, 1, 0)
If comboIndex >= 0
;SendMessage_(lParam, #CB_SETCURSEL, comboIndex, 0); hier ausklammern
comboLang = Len(GetGadgetText(#comboTest))
;Länge des gefundenen Textes
parameter = (comboLang << 16 & $FFFFFFFF) + comboStart
SendMessage_(lParam, #CB_SETEDITSEL, 0, parameter)
; eybd_event_(#VK_DOWN, 0, 0, 0)
; eybd_event_(#VK_END, 0, 0, 0)
SendMessage_(lParam,#CB_SETCURSEL,comboIndex,0); und hier hinschreiben
EndIf
EndIf
EndSelect
EndSelect
EndSelect
ProcedureReturn result
EndProcedureDas aufklappen, habe ich bei mir mit dem Pfeilunten-Button in der oberen
Combobox gemacht. Da muss ich noch mal nachschauen
Gruß, Falko
Vielen Dank, Falko, für Deine hilfreichen Anregungen und Tipps, wodurch ich es geschafft habe, mein Problem zu lösen.
Konkret: Am Ende der Autocomplete-Prozedur frage ich den Index des vervollständigten Eintrags ab:
Außerdem führe ich in der Repeat-Schleife ein Combobox-Event-Handling durch, indem ich nach der Cursor-down-Taste abfrage:
Klappt einwandfrei! Nochmals besten Dank! Andi
Konkret: Am Ende der Autocomplete-Prozedur frage ich den Index des vervollständigten Eintrags ab:
Code: Alles auswählen
index_auto = GetGadgetState(#combobox)
Code: Alles auswählen
If EventGadget() = #combobox
If GetAsyncKeyState_(#VK_DOWN)
ind = index_auto + 1
SetGadgetState(#combobox, ind)
index_auto = ind
EndIf
endif
PB + B4X = greatest tools on earth
Win 10 | PB 5.72
Win 10 | PB 5.72
