Hallo zusammen,
habe ein Anfänger Problem.
Möchte während der Eingabe in ein StringGadget das der Text in einen ListViewGadget selektiert wird und beim erreichen des richtigen Eintrags durch drücken der Tab Taste übernommen wird, andere Eingaben als die im ListViewGadget sollen nicht erlaubt sei.
Ganz schön viel auf einmal.
für Eure Hilfe wäre ich dankbar.
wenn es möglich wäre könntet ihr bitte das Ganze mit Kommentaren versehen, möchte gerne verstehen was da steht und aufarbeiten.
Grüße
Pure_Beginner
ListViewGadget Text mit StrigGadget auswählen
- Pure_Beginner
- Beiträge: 247
- Registriert: 29.09.2011 21:49
- Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
- Wohnort: Brühl
ListViewGadget Text mit StrigGadget auswählen
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Re: ListViewGadget Text mit StrigGadget auswählen
Code: Alles auswählen
; | --------------------- |
; | SIMPLE AUTOCOMPLETE |
; | |
; | Author: Andesdaf (de) |
; | |
; | --------------------- |
; Last change: 2012-03-01
; PB 4.60 B1
EnableExplicit
Enumeration ; Zuweisung Fenster
#WIN_MAIN
EndEnumeration
Enumeration ; Zuweisung Gadgets
#STR_EINGABE
#LIV_AUSWAHL
EndEnumeration
Enumeration ; Zuweisung Menüereignisse
#VMI_TAB
EndEnumeration
Procedure AddElements()
; Elemente am Ende (-1) zum ListView hinzufügen
AddGadgetItem(#LIV_AUSWAHL, -1, "Hund")
AddGadgetItem(#LIV_AUSWAHL, -1, "Katze")
AddGadgetItem(#LIV_AUSWAHL, -1, "Maus")
AddGadgetItem(#LIV_AUSWAHL, -1, "Pferd")
AddGadgetItem(#LIV_AUSWAHL, -1, "Schildkröte")
EndProcedure
Procedure ShowResults()
; Text in String und ListView vergleichen und Eintrag markieren
Protected i.i = 0 ; zum Hochzählen
Protected iResultPosition.i = -1 ; gefundene Position im ListView
Protected sItem.s = "" ; Text an Position im ListView
Protected sString.s = "" ; Text im String
SetGadgetState(#LIV_AUSWAHL, -1) ; ListView-Markierung aufheben
sString = GetGadgetText(#STR_EINGABE) ; Inhalt des Strings einlesen
For i = 0 To CountGadgetItems(#LIV_AUSWAHL) ; alle Einträge im ListView durchgehen
sItem = GetGadgetItemText(#LIV_AUSWAHL, i) ; Item-Text zuweisen
If sString = sItem ; Vergleich, ob Text im String = Text im Item
iResultPosition = i ; Wenn ja, Zuweisung der Position im ListView
EndIf
Next i
If iResultPosition <> -1 ; Wenn gefunden
SetGadgetState(#LIV_AUSWAHL, iResultPosition) ; Status des ListViews auf gefundene Position setzen
EndIf
EndProcedure
Procedure MainWindow()
Protected iEvent.i = 0
; Hauptfunktion
If OpenWindow(#WIN_MAIN, 0,0, 150, 185, "Auswahl", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
StringGadget(#STR_EINGABE, 5,5, 140, 20, "")
ListViewGadget(#LIV_AUSWAHL, 5, 30, 140, 150)
AddElements() ; Elemente zum ListView hinzufügen
AddKeyboardShortcut(#WIN_MAIN, #PB_Shortcut_Tab, #VMI_TAB) ; Tastatur-Shortcut erstellen
Repeat
iEvent = WaitWindowEvent()
Select iEvent
Case #PB_Event_Gadget
Select EventGadget()
Case #STR_EINGABE ; wen Aktion im String
ShowResults() ; Vergleichsfunktion aufrufen
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case #VMI_TAB ; wenn Shortcut betätigt
If GetGadgetText(#LIV_AUSWAHL) <> "" ; prüfen ob Inhalt im String
Debug GetGadgetText(#LIV_AUSWAHL) ; wenn ja, Ausgabe des Inhaltes im ListView
Else
Debug "Nichts ausgewählt" ; wenn nein, Hinweis
EndIf
EndSelect
EndSelect
Until iEvent = #PB_Event_CloseWindow
EndIf
EndProcedure
MainWindow() ; Aufruf der Hauptfunktion
Win11 x64 | PB 6.20
- Pure_Beginner
- Beiträge: 247
- Registriert: 29.09.2011 21:49
- Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
- Wohnort: Brühl
Re: ListViewGadget Text mit StrigGadget auswählen
Hallo zusammen,
Andesdaf Ansatz ist schon super und geht in die richtige Richtung,
Was ich suche ist aber noch etwas verzwickter.
beim Eintippen des Textes in das StringGadget soll der Text im Listview bereits beim Eintippen des ersten Buchstaben nur noch die entsprechenden Einträge anbieten und selektieren welche man dann mit der Tab Taste übernehmen kann.
Hoffentlich habe ich mich verständlich ausgedrückt.
Besten Dank für Eurere Unterstützung .
Und dir Andesdaf für die gute Kommentierung des Textes und deine Mühe.
Andesdaf Ansatz ist schon super und geht in die richtige Richtung,
Was ich suche ist aber noch etwas verzwickter.
beim Eintippen des Textes in das StringGadget soll der Text im Listview bereits beim Eintippen des ersten Buchstaben nur noch die entsprechenden Einträge anbieten und selektieren welche man dann mit der Tab Taste übernehmen kann.
Hoffentlich habe ich mich verständlich ausgedrückt.
Besten Dank für Eurere Unterstützung .
Und dir Andesdaf für die gute Kommentierung des Textes und deine Mühe.

PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Re: ListViewGadget Text mit StrigGadget auswählen
Gesucht wird der Einfachheit halber im gesamten String.
[UPDATE] - ich habe den Code noch einmal erweitert, jetzt ist es möglich, mit den Pfeiltasten
im ListView zu navigieren. Die Suche erfolgt jetzt unabhängig von Groß- oder Kleinschreibung.
[UPDATE 2] - wenn nichts im String steht, wird auch nichts mehr im ListView markiert.
[UPDATE] - ich habe den Code noch einmal erweitert, jetzt ist es möglich, mit den Pfeiltasten
im ListView zu navigieren. Die Suche erfolgt jetzt unabhängig von Groß- oder Kleinschreibung.
[UPDATE 2] - wenn nichts im String steht, wird auch nichts mehr im ListView markiert.
Code: Alles auswählen
; | --------------------- |
; | SIMPLE AUTOCOMPLETE |
; | |
; | Author: Andesdaf (de) |
; | |
; | --------------------- |
; Last change: 2012-03-01
; PB 4.60 B1
EnableExplicit
Enumeration ; Zuweisung Fenster
#WIN_MAIN
EndEnumeration
Enumeration ; Zuweisung Gadgets
#STR_EINGABE
#LIV_AUSWAHL
EndEnumeration
Enumeration ; Zuweisung Menüereignisse
#VMI_TAB
#VMI_UP
#VMI_DOWN
EndEnumeration
Global NewList Eintraege.s() ; Erstellen einer neuen LinkedList
Procedure AddElements()
; Elemente zur LinkedList hinzufügen
AddElement(Eintraege()) ; Element zur Liste hinzufügen
Eintraege() = "Hund" ; Bezeichnung des Elements
AddElement(Eintraege())
Eintraege() = "Hase"
AddElement(Eintraege())
Eintraege() = "Hundeleine"
AddElement(Eintraege())
Eintraege() = "Hasenkäfig"
AddElement(Eintraege())
Eintraege() = "Hasenfutter"
SortList(Eintraege(), #PB_Sort_NoCase | #PB_Sort_Ascending) ; Liste sortieren
EndProcedure
Procedure AddElementsToListView()
; Elemente aus der LinkedList in das ListView übertragen
ForEach Eintraege()
AddGadgetItem(#LIV_AUSWAHL, -1, Eintraege()) ; für jedes Element in der Liste Eintrag erstellen
Next
EndProcedure
Procedure ShowResults()
; Suchergebnisse anzeigen
ClearGadgetItems(#LIV_AUSWAHL) ; ListView leeren
ResetList(Eintraege()) ; LinkedList auf Anfang setzen
While NextElement(Eintraege()) ; Jedes Element der LinkedList durchgehen
If FindString(LCase(Eintraege()), LCase(GetGadgetText(#STR_EINGABE))) <> 0 ; Nach in String eingegebener Kombination suchen, egal ob Groß/Kleinschreibung (LowerCase)
AddGadgetItem(#LIV_AUSWAHL, -1, Eintraege()) ; wenn ja, Eintrag zur Liste hinzufügen
EndIf
Wend
If GetGadgetText(#STR_EINGABE) = "" ; prüfen, ob etwas im String steht
AddElementsToListView() ; wenn nein, die Standardelemente zum ListView hinzufügen
Else
SetGadgetState(#LIV_AUSWAHL, 0) ; ListView auf den ersten Eintrag stellen
EndIf
EndProcedure
Procedure MainWindow()
Protected iEvent.i = 0
; Hauptfunktion
If OpenWindow(#WIN_MAIN, 0,0, 150, 185, "Auswahl", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
StringGadget(#STR_EINGABE, 5,5, 140, 20, "")
ListViewGadget(#LIV_AUSWAHL, 5, 30, 140, 150)
AddElements() ; Elemente zur Liste hinzufügen
AddElementsToListView() ; Listenelemente zum ListView hinzufügen
AddKeyboardShortcut(#WIN_MAIN, #PB_Shortcut_Tab , #VMI_TAB ) ; Tastatur-Shortcut erstellen
AddKeyboardShortcut(#WIN_MAIN, #PB_Shortcut_Up , #VMI_UP ) ; für Navigation im ListView
AddKeyboardShortcut(#WIN_MAIN, #PB_Shortcut_Down, #VMI_DOWN) ; für Navigation im ListView
Repeat
iEvent = WaitWindowEvent()
Select iEvent
Case #PB_Event_Gadget
Select EventGadget()
Case #STR_EINGABE ; wen Aktion im String
ShowResults() ; Vergleichsfunktion aufrufen
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case #VMI_TAB ; wenn Shortcut betätigt
If GetGadgetText(#LIV_AUSWAHL) <> "" ; prüfen ob Inhalt im String
Debug GetGadgetText(#LIV_AUSWAHL) ; wenn ja, Ausgabe des Inhaltes im ListView
Else
Debug "Nichts ausgewählt" ; wenn nein, Hinweis
EndIf
Case #VMI_UP
If GetGadgetState(#LIV_AUSWAHL) > 0 ; prüfen, ob mindestens oberster Eintrag im ListView markiert ist
SetGadgetState(#LIV_AUSWAHL,GetGadgetState(#LIV_AUSWAHL) - 1) ; wenn nicht, Markierung um 1 nach oben verschieben
EndIf
Case #VMI_DOWN
SetGadgetState(#LIV_AUSWAHL,GetGadgetState(#LIV_AUSWAHL) + 1) ; Markierung um 1 nach unten verschieben
EndSelect
EndSelect
Until iEvent = #PB_Event_CloseWindow
EndIf
EndProcedure
MainWindow() ; Aufruf der Hauptfunktion
Win11 x64 | PB 6.20
Re: ListViewGadget Text mit StrigGadget auswählen
Wollt ich grade sagen... das is ja mal sowas von vorbildlichPure_Beginner hat geschrieben:... Und dir Andesdaf für die gute Kommentierung des Textes und deine Mühe.

sorry für OT.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: ListViewGadget Text mit StrigGadget auswählen
danke, ich habe den Code oben noch leicht verbessert.
Win11 x64 | PB 6.20
Re: ListViewGadget Text mit StrigGadget auswählen
Habe es mal mit diesen Code erweitert. Aber nach Remove TAB geht die Taste TAB nicht mehr?

Code: Alles auswählen
Case #STR_EINGABE ; wen Aktion im String
Select EventType()
Case #PB_EventType_Change
ShowResults() ; Vergleichsfunktion aufrufen
Case #PB_EventType_Focus
Debug "Add..."
AddKeyboardShortcut(#WIN_MAIN, #PB_Shortcut_Tab , #VMI_TAB ) ; Tastatur-Shortcut erstellen
AddKeyboardShortcut(#WIN_MAIN, #PB_Shortcut_Up , #VMI_UP ) ; für Navigation im ListView
AddKeyboardShortcut(#WIN_MAIN, #PB_Shortcut_Down, #VMI_DOWN) ; für Navigation im ListView
Case #PB_EventType_LostFocus
Debug "Remove..."
RemoveKeyboardShortcut(#WIN_MAIN, #PB_Shortcut_Tab) ; Tastatur-Shortcut erstellen
RemoveKeyboardShortcut(#WIN_MAIN, #PB_Shortcut_Up) ; für Navigation im ListView
RemoveKeyboardShortcut(#WIN_MAIN, #PB_Shortcut_Down) ; für Navigation im ListView
Code: Alles auswählen
Case #VMI_TAB ; wenn Shortcut betätigt
If GetGadgetText(#LIV_AUSWAHL) <> "" ; prüfen ob Inhalt im String
Debug GetGadgetText(#LIV_AUSWAHL) ; wenn ja, Ausgabe des Inhaltes im ListView
Else
Debug "Nichts ausgewählt" ; wenn nein, Hinweis
EndIf
SetActiveGadget(GetActiveGadget() +1)

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive