ListIconGadget Suchfunktion (Windows)

Für allgemeine Fragen zur Programmierung mit PureBasic.
jogo
Beiträge: 123
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE

ListIconGadget Suchfunktion (Windows)

Beitrag von jogo »

Hallo zusammen,
wenn ich im ListIconGadget irgend etwas eintippe, hüpft in Windows ja das ListIconGadget auf den passenden Eintrag, wenn dieser in Spalte 1 mit meinen eingetippten Text beginnt.

Gibt es für Windows eine Möglichkeit oder Ansatz, dass die Suche auch Treffer liefert, wenn der eingetippte Text irgendwo in einen Eintrag der 1. Spalte vorkommt? :)
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: ListIconGadget Suchfunktion (Windows)

Beitrag von jacdelad »

Das geht doch schon von sich aus (wenn der Fokus auf dem ListIconGadget liegt):

Code: Alles auswählen

OpenWindow(0,0,0,500,400,"Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ListIconGadget(0,0,0,500,400,"Spalte 1",100,#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
AddGadgetColumn(0,1,"Spalte 2",100)
AddGadgetColumn(0,2,"Spalte 3",100)
AddGadgetColumn(0,3,"Spalte 4",100)

For a=65 To 90
  For b=1 To 10
    temp$=ReplaceString("..........",".",Chr(a))
    AddGadgetItem(0,-1,temp$+#LF$+temp$+#LF$+temp$+#LF$+temp$+#LF$)
  Next
Next

SetActiveGadget(0)
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
...und jetzt tippe mal einen Buchstaben ein.

Edit: Ich sehe gerade, du willst bestimmt mehr als einen Buchstaben haben?! Dann musst du die Tasteneingabe abfangen, zusammenfügen und anschließend suchen lassen (dafür gibt's #LVM_FINDITEM und du brauchst noch die Struktur LVFINDINFO); oh und achte auf das Timing, nach einer bestimmten Zeit verfällt ja deine Eingabe. Da kommt einiges an Arbeit auf dich zu.
https://learn.microsoft.com/en-us/windo ... m-finditem
https://learn.microsoft.com/en-us/windo ... vfindinfoa
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
jogo
Beiträge: 123
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE

Re: ListIconGadget Suchfunktion (Windows)

Beitrag von jogo »

Jo Danke für die Antwort. Mit mehreren Buchstaben funktioniert es ja auch schon von sich aus. Und das mit dem Timer ist auch ok. Man darf halt beim Tippen nicht allzusehr trödeln :)
Mir geht es darum, dass die eingetippte Zeichenfolge auch mitten drin gefunden wird. Also nicht nur am Anfang des Itemtextes.
Läßt sich da was einstellen?
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
jogo
Beiträge: 123
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE

Re: ListIconGadget Suchfunktion (Windows)

Beitrag von jogo »

In Linux funktionierte diese Suchfunktion ja garnicht. Da habe ich das mit folgenden Code hier aus dem Forum gelöst:

Code: Alles auswählen

    ; ---------- Funktion für die schnellsuche in der tabelle (code stammt aus PB-forum)  
    ProcedureC blitzlist(*model, column, *key, iter, *search_data)
      ;jeder Pfad (Zeile), der in systemsearch teilweise übereinstimmt, wird bei jeder Änderung des Editierfeldes an diese Funktion gesendet
      Protected.i I, Found= #True
      Protected.l Indx
      Protected path
      Protected.s Search= PeekS(*key, -1, #PB_UTF8);                                     current search-string in UTF8-Format
      
      path = gtk_tree_model_get_path_(*model, iter);                                   get path from iter,
      Indx = PeekL(gtk_tree_path_get_indices_(path));                                  then index (LIG-line) from path
      
      If FindString(GetGadgetItemText(1, Indx, column), Search, 1, #PB_String_NoCase); own check to verify the suggestion
        Found= #False
      EndIf
      gtk_tree_path_free_(path);                                                        forgot it till V0.2
      ProcedureReturn Found    ;                                                            #False = Ok !
    EndProcedure
Dies überimmt die komplette Suche und findet auch Einträge, die im Itemstring irgendwo vorkommen. Klappt bestens.
Vllt. gibt es eine Message für Windows, mit der ich den Suchmodus umstellen kann?
Ich habe keine Erfahrungen mit API-Aufrufen in PureBasic (auch wenn ich diese versehentlich doch mal irgendwo eingebaut habe :-) )
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Antworten