ListIcongadget -> Dubletten filtern

Anfängerfragen zum Programmieren mit PureBasic.
Arachnophobia
Beiträge: 57
Registriert: 03.02.2005 05:57
Wohnort: Berlin
Kontaktdaten:

ListIcongadget -> Dubletten filtern

Beitrag von Arachnophobia »

Hallo,
habe ein Listicongadget dass über den Ordnerauswahldialog und/oder den Dateiauswahldialog befüllt werden kann.
Dies funktioniert soweit auch problemlos.

Nun möchte ich im Listicongadget gerne doppelte Einträge vermeiden.
Soll heißen, sollte der User z.B. mehrmals versuchen den Inhalt ein und desselben Ordners hinzuzufügen, die entsprechenden Dateien dem Gadget nicht doppelt hinzugefügt werden.
Hab intensiv die Suchfunktion des deutschen und englischen Boards genutzt, jedoch keinen passenden Ansatz gefunden.
Im Moment stehe ich etwas auf dem Schlauch. :lol:
Vielleicht kann mir jemand einen Schubs in die richtige Richtung geben bevor ich mir alle Haare ausgerissen habe? :twisted:

es grüßt, Arachnophobia
Benutzeravatar
Vallan
Beiträge: 223
Registriert: 20.01.2006 19:34
Kontaktdaten:

Beitrag von Vallan »

Durchsuche bei jedem hinzufügen alle Gadgetitems nach gleichem Text, wenn du fündig wirst brichst du ab. Da nicht so oft was hinzugefügt wird sollte das gehen.
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

@Vallan, das ist eine Schlechte Lösung,
da es bei vielen Einträgen schnell langsam wird.

Mein Vorschlag: synchronisiere eine LinkedList mit den Einträgen im Gadget,
Die kannst du viel schneller durchsuchen.

Aber es gibt sicher noch schnellere Möglichkeiten.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Ich finde das schon recht schnell

Code: Alles auswählen

  Structure LVFINDINFO
    flags.l
    psz.s
    lParam.l
    pt.point
    vkDirection.l
  EndStructure
  
  Procedure AddGadgetItemEX(id,text.s)
    
    Protected LFI.LVFINDINFO
    
    LFI\flags   = #LVFI_PARTIAL | #LVFI_STRING
    LFI\psz     = text
    
    if SendMessage_(GadgetID(id),#LVM_FINDITEM,-1,LFI) = -1
      ProcedureReturn AddGadgetItem(id,-1,text)
    else
      MessageRequester("","schon vorhanden")
    EndIf
    
  EndProcedure
  
  hwnd = OpenWindow(0,0,0,300,300,"test")
  
  CreateGadgetList(hwnd)
  ListIconGadget(0,0,0,200,300,"blub",50)
  ButtonGadget(1,210,5,80,23,"add")
  StringGadget(2,210,40,80,23,"",#PB_String_Numeric)
  
  for i = 0 to 100
    AddGadgetItem(0,-1,str(i))
  Next
  
  Repeat
    event = WaitWindowEvent() 
    if event = #PB_Event_Gadget
      gadget = EventGadget() 
      if gadget = 1
        text.s = GetGadgetText(2) 
        if text  
          AddGadgetItemEX(0,text) 
        EndIf 
      EndIf  
    EndIf 
  Until event = #PB_Event_CloseWindow
Arachnophobia
Beiträge: 57
Registriert: 03.02.2005 05:57
Wohnort: Berlin
Kontaktdaten:

Beitrag von Arachnophobia »

Danke an alle. :allright:

Habe mich für den Ansatz von edel entschieden, funktioniert einwandfrei. :wink:

es grüßt, Arachnophobia
Antworten