Seite 1 von 1

Explorerlistgadget Einträge markieren?

Verfasst: 01.04.2008 16:11
von MK_2007
Hallo,

wie kann ich Buttongesteuert in einem Explorerlistgadget Einträge auswählen?
Ich habe 3 Button die eine Prozedur mit vorher definierten Dateimustern als Parameter aufrufen. Nun sollen im Gadget genau die Einträge aktiviert/markiert werden, die der Maske entsprechen.
Habe eine For-Scheife geschrieben. die jeden Eintrag liest und mit FindeString den Inhalt vergleicht. Wenn das Muster vorkommt sollte mit
SetGadgetItemState(#Gadget, Eintrag, Status) der Eintrag aktiviert werden. Nur leider tut sich nichts. Anscheinend wird das vom Gadget nicht unterstützt. Gibt es doch eine Methode oder stelle ich mich nur unbeholfen an?
Für Hilfe wäre ich sehr dankbar.

Verfasst: 02.04.2008 20:12
von Shardik
MK_2007 hat geschrieben:Hallo,

wie kann ich Buttongesteuert in einem Explorerlistgadget Einträge auswählen?
Ich habe 3 Button die eine Prozedur mit vorher definierten Dateimustern als Parameter aufrufen. Nun sollen im Gadget genau die Einträge aktiviert/markiert werden, die der Maske entsprechen.
Hier ist ein Beispiel mit einem StringGadget, in das man ein Textfragment eingeben kann. Alle Dateinamen mit diesem Textfragment werden nach Druck auf die entsprechende Schaltfläche markiert oder die Markierungen werden wieder entfernt.

Code: Alles auswählen

Enumeration 
  #ExplorerList
  #ButtonSelect
  #ButtonUnselect
  #ButtonListFiles
  #StringPattern
EndEnumeration


Procedure CheckFileEntries(SelectFile.L)
  Protected Filename.S
  Protected LVItem.LV_ITEM
  Protected Pattern.S

  Pattern = GetGadgetText(#StringPattern)

  For i = 1 To CountGadgetItems(#ExplorerList)
    If GetGadgetItemState(#ExplorerList, i - 1) = #PB_Explorer_File
      Filename = GetGadgetItemText(#ExplorerList, i - 1, 0)
 
      If FindString(UCase(Filename), UCase(Pattern), 1) > 0
        If SelectFile
          LVItem\StateMask = #LVIS_DROPHILITED
          LVItem\State = #LVIS_DROPHILITED
        Else
          LVItem\StateMask = #LVIS_DROPHILITED | #LVIS_SELECTED
          LVItem\State = 0
        EndIf

        SendMessage_(GadgetID(#ExplorerList), #LVM_SETITEMSTATE, i - 1, @LVItem)      
      EndIf
    EndIf
  Next i
EndProcedure


Define Info.S
Define LVItem.LV_ITEM

If OpenWindow(0, 0, 0, 420, 410, "Alles Auswählen", #PB_Window_SystemMenu |#PB_Window_ScreenCentered)
  If CreateGadgetList(WindowID(0))
    ExplorerListGadget(#ExplorerList, 0, 0, 420, 320, "C:", #PB_Explorer_MultiSelect | #PB_Explorer_AlwaysShowSelection)
    ButtonGadget(#ButtonSelect, 10, 330, 290, 20, "Alle Dateien mit nebenstehendem Textfragment auswählen")
    ButtonGadget(#ButtonUnselect, 10, 355, 290, 20, "Alle Dateien mit nebenstehendem Textfragment abwählen")
    ButtonGadget(#ButtonListFiles, 100, 380, 200, 20, "Ausgewählte Dateien anzeigen")
    StringGadget(#StringPattern, 320, 342, 60, 20, "LOG", #PB_String_UpperCase)

    Repeat
      WindowEvent = WaitWindowEvent()

      If WindowEvent = #PB_Event_Gadget
        Select EventGadget()
          Case #ButtonSelect
            CheckFileEntries(#True)
          Case #ButtonUnselect
            CheckFileEntries(#False)
          Case #ButtonListFiles
            Info = ""

            For i = 1 To CountGadgetItems(#ExplorerList)
              If GetGadgetItemState(#ExplorerList, i - 1) & #PB_Explorer_File
                If SendMessage_(GadgetID(#ExplorerList), #LVM_GETITEMSTATE, i - 1, #LVIS_DROPHILITED) = #LVIS_DROPHILITED Or GetGadgetItemState(#ExplorerList, i - 1) & #PB_Explorer_Selected
                  Info = Info + GetGadgetItemText(#ExplorerList, i - 1, 0) + #CR$
                EndIf
              EndIf
            Next i

            If Info = ""
              MessageRequester("Info", "Es sind zur Zeit keine Dateien ausgewählt!", #MB_ICONINFORMATION)
            Else
              MessageRequester("Ausgewählte Dateien", Info, #MB_ICONINFORMATION)
            EndIf             
        EndSelect
      EndIf
    Until WindowEvent = #PB_Event_CloseWindow
  EndIf
EndIf

End

Verfasst: 03.04.2008 13:41
von MK_2007
Super. vielen Dank. Genu die Lösung die ich gesucht habe!!!