Automatische Suche

Anfängerfragen zum Programmieren mit PureBasic.
User_0815
Beiträge: 7
Registriert: 29.04.2011 16:09

Automatische Suche

Beitrag von User_0815 »

Hallo Leute,

ich möchte mich in diesem Zuge auch erst mal vorstellen, mein Name ist Reiner und ich bin absoluter Neuling in Sachen Purebasic. Ich habe natürlich Hobbymäßig schon mal was gemacht, mit Profan und auch mit Delphi (2.0, also laaange her), bin aber weit entfernt vom "gut sein" ;-)
Ich habe dann auch gleich einmal eine Frage.
Ich habe eine Adressverwaltung mit Purebasic und SQlite erstellt. Ich möchte jetzt das Suchen von Adressen folgendermaßen verwirklichen:
Ich habe ein ListIcongadget und ein Stringgadget. Wenn ich jetzt einen Suchbegriff eingebe, dann soll 2 Sekunden später die Suche ausgelöst werden. Jede weitere Eingabe eines Buchstaben setzt die 2 Sekunden wieder zurück. Im Grunde ist mir auch klar, was passieren muss (hoffe ich). Also wenn das Stringgadget den Focus hat und ich eine Taste drücke das soll ein Timer (?) gestartet werden. Ist dieser abgelaufen und ist kein weiterer Tastendruck passiert dann beginnt er mit der Suche.
Ist das so richtig oder bin ich auf dem Holzweg ?
Vielleicht könnt ihr mir ja ein paar Denkanstösse oder Codefragmente geben...

Schon mal besten Dank dafür.

Viele Grüße,

Reiner
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Automatische Suche

Beitrag von TomS »

AddWindowTimer() und Konsorten für den Timer.
Dann setzt du den Timer zurück, wenn EventType() #PB_EventType_Change zurück gibt.
Ansonsten startest du deine Suche, wenn der Timer triggert.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Automatische Suche

Beitrag von Kiffi »

ich bin grade in Silbertablett-Laune <)

Code: Alles auswählen

EnableExplicit

Enumeration ; Windows
  #frmMain
EndEnumeration
Enumeration ; Gadgets
  #txtFilter
  #lvwAdressen
EndEnumeration
Enumeration ; Timer
  #myTimer
EndEnumeration

UseSQLiteDatabase()

Global DB

Procedure Filter()
  
  Protected Query.s
  
  If GetGadgetText(#txtFilter)=""
    Query = "Select * From myTable"
  Else
    Query = "Select * From myTable Where myField Like '%" + GetGadgetText(#txtFilter) + "%'"
  EndIf
  
  ClearGadgetItems(#lvwAdressen)
  
  If DatabaseQuery(DB, Query)
    
    While NextDatabaseRow(DB)
      AddGadgetItem(#lvwAdressen, -1, GetDatabaseString(DB, 0))
    Wend
    
    FinishDatabaseQuery(DB)
    
  EndIf
  
  RemoveWindowTimer(#frmMain, #myTimer)
  
EndProcedure

DB = OpenDatabase(#PB_Any, ":memory:", "", "", #PB_Database_SQLite)

DatabaseUpdate(DB, "Create Table myTable (myField)")

Define A, B, C

For A = 65 To 70
  For B = 65 To 70
    For C = 65 To 70
      DatabaseUpdate(DB, "Insert Into myTable (myField) Values ('" + Chr(A) + Chr(B) + Chr(C) + "')")
    Next C
  Next B
Next A

OpenWindow(#frmMain, #PB_Ignore, #PB_Ignore, 300, 300, "")

StringGadget(#txtFilter, 0, 0, WindowWidth(#frmMain), 25, "")

ListIconGadget(#lvwAdressen, 0, 25, WindowWidth(#frmMain), WindowHeight(#frmMain) - 25, "", 100)

Filter()

Define WWE, Quit

Repeat
  
  WWE = WaitWindowEvent()
  
  Select WWE
      
    Case #PB_Event_Gadget
      
      Select EventGadget()
          
        Case #txtFilter
          
          Select EventType()
              
            Case #PB_EventType_Change
              
              RemoveWindowTimer(#frmMain, #myTimer)
              AddWindowTimer(#frmMain, #myTimer, 1000)
              
          EndSelect
          
      EndSelect
      
    Case #PB_Event_Timer
      
      Select EventTimer()
          
        Case #myTimer
          
          Filter()
          
      EndSelect
      
    Case #PB_Event_CloseWindow
      
      RemoveWindowTimer(#frmMain, #myTimer)
      Quit = #True
      
  EndSelect
  
Until Quit = #True
Grüße ... Kiffi
a²+b²=mc²
User_0815
Beiträge: 7
Registriert: 29.04.2011 16:09

Re: Automatische Suche

Beitrag von User_0815 »

Wow !

Mensch, das ist nicht nur Silber, das ist ein Goldtablett. Soviel hatte ich gar nicht erwartet, vielen vielen Dank dafür Kiffi (und natürlich auch TomS), wird gleich eingebaut !

Gruß,

Reiner
Antworten