Seite 1 von 1

ListIcongadget -> Dubletten filtern

Verfasst: 20.01.2007 21:09
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

Verfasst: 20.01.2007 23:15
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.

Verfasst: 21.01.2007 00:15
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.

Verfasst: 21.01.2007 01:10
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

Verfasst: 21.01.2007 03:54
von Arachnophobia
Danke an alle. :allright:

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

es grüßt, Arachnophobia