ComboBoxGadget mit vielen Daten

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

ComboBoxGadget mit vielen Daten

Beitrag von marcelx »

Hallo zusammen,

ich verwenden ComboBoxGadget mit viel Daten.
1.) es dauert lang bis alle Daten in ComboBoxGadget sind
2.) während das setzen im ComboBoxGadget werden die andere Gadget nicht angezeigt.

Gibt es da ein Lösung?

Code: Alles auswählen

If OpenWindow(0, 0, 0, 270, 180, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ComboBoxGadget(1, 10, 30, 205, 21, #PB_ComboBox_Editable)
  
  StringGadget(2, 10, 60, 45, 21, "", #PB_String_ReadOnly) 
  ButtonGadget(3, 50, 90, 50,21,"Test")
  max = 60000
  Time = ElapsedMilliseconds()
  For a = 1 To max
    AddGadgetItem(1, -1,"ComboBox item " + Str(a))
  Next
  Debug ElapsedMilliseconds()-Time
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

EndIf
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ComboBoxGadget mit vielen Daten

Beitrag von mk-soft »

Macht mit so vielen Eintragungen keinen sinn.
Selbst Datenbank Programme begrenzen Ihre Liste auf etwas 1000 Eintragungen und laden erst nach Anfrage nach.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Lord
Beiträge: 313
Registriert: 21.01.2008 19:11

Re: ComboBoxGadget mit vielen Daten

Beitrag von Lord »

mk-soft hat geschrieben:Macht mit so vielen Eintragungen keinen sinn.
...
Da gebe ich mk-soft Recht.
Willst Du die Wartezeit aber trotzdem etwas verkürzen:

Code: Alles auswählen

Enumeration #PB_Event_FirstCustomValue
  #ComboFilled
EndEnumeration

Define max.i = 60000

Procedure FillCombo(max)
  Protected a.i, Time.i
  Time = ElapsedMilliseconds()
  DisableGadget(1, #True)
  DisableGadget(2, #True)
  DisableGadget(3, #True)
  SendMessage_(GadgetID(1),#WM_SETREDRAW,#False,0)
  For a = 1 To max
    AddGadgetItem(1, -1,"ComboBox item " + Str(a))
  Next
  SendMessage_(GadgetID(1),#WM_SETREDRAW,#True,0)
  Time=ElapsedMilliseconds()-Time
  SetWindowTitle(0, Str(Time)+" ms")
  PostEvent(#ComboFilled)
EndProcedure
Procedure EnableGadgets()
  DisableGadget(1, #False)
  DisableGadget(2, #False)
  DisableGadget(3, #False)
EndProcedure

If OpenWindow(0, 0, 0, 270, 180, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ComboBoxGadget(1, 10, 30, 205, 21, #PB_ComboBox_Editable)
 
  StringGadget(2, 10, 60, 45, 21, "", #PB_String_ReadOnly)
  ButtonGadget(3, 50, 90, 50,21,"Test")
  BindEvent(#ComboFilled, @EnableGadgets())
  CreateThread(@FillCombo(), max)
 
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

EndIf
Bild
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: ComboBoxGadget mit vielen Daten

Beitrag von Derren »

Wer soll denn 60.000 Einträge in einer ComboBox durchsuchen?

Bild

Bild

Bild
Signatur und so
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: ComboBoxGadget mit vielen Daten

Beitrag von marcelx »

Es geht um die Eingabe eine Ort aus eine Liste.
Durch Eingabe der erste Buchstaben, wird der valide Name gefunden und angezeigt.
Siehe auch http://forums.purebasic.com/german/view ... hp?t=31926

Danke Lord für die Lösung mit BindEvent/CreateThread
Win-10, PB 5.31 (Windows - x86)
Antworten