Seite 2 von 2
Noch wach?
Verfasst: 09.03.2007 01:59
von Excalibur
Daß jetzt noch einer wach ist, echt der Hammer. Das hat mich schon letzte Woche gewundert.
Ich probiers aus und melde mich wieder.
Danke schon mal. Das macht richtig Spaß hier.
Jetzt muß ich aber irgendwann mal schlafen. Zur Zeit arbeite ich 3-Schicht am Stück mit PB.

Verfasst: 09.03.2007 11:40
von Shardik
Kaeru Gaman hat geschrieben:
das ExplorerTreeGadget ist nicht dafür vorgesehen, um mehrere Ordner zu markieren.
das kann die linke spalte in deinem explorer auch nicht.
Obwohl es für ExplorerTreeGadgets in der Tat nicht vorgesehen ist, kann man die Mehrfachselektion sehr wohl mit Ordnern realisieren; zumindest hat es freak bei mit Checkbox versehenen Ordnern in diesem Posting demonstriert:
http://www.purebasic.fr/english/viewtop ... 08&start=1
Und die Mehrfachselektion für Dateien im ExplorerTreeGadget läßt sich auch realisieren. Ich habe schon einmal vor zwei Jahren eine solche Lösung gebastelt, die auch ohne Shift- und Strg-Taste funktioniert (für Anwender, denen man das Festhalten einer zusätzlichen Taste beim Markieren nicht zumuten kann

): einfach eine oder mehrere Dateien nacheinander anklicken zum Markieren. Ein Löschen der Markierung erfolgt durch Anklicken einer schon markierten Datei. Allerdings funktioniert diese Lösung im Moment nur für ein einzelnes Verzeichnis, der Wechsel in ein anderes Verzeichnis löscht alle bisherigen Markierungen:
Code: Alles auswählen
#Button = 0
#ExplorerTree = 1
#Window = 0
Procedure.B HighlightItem(HighlightFlag.B)
ItemHandle.L
TVHitTest.TV_HITTESTINFO
TVItem.TV_ITEM
TVHitTest\Pt\x = WindowMouseX(#Window) - GadgetX(#ExplorerTree)
TVHitTest\Pt\y = WindowMouseY(#Window) - GadgetY(#ExplorerTree)
ItemHandle = SendMessage_(GadgetID(#ExplorerTree), #TVM_HITTEST, 0, @TVHitTest)
If ItemHandle <> 0
If TVHitTest\Flags <> #TVHT_ONITEMBUTTON
TVItem\Mask = #TVIF_STATE
TVItem\hItem = ItemHandle
If HighlightFlag = #True
TVItem\StateMask = #TVIS_DROPHILITED
TVItem\State = #TVIS_DROPHILITED
Else
TVItem\StateMask = #TVIS_DROPHILITED | #TVIS_SELECTED
TVItem\State = 0
EndIf
SendMessage_(GadgetID(#ExplorerTree), #TVM_SETITEM, 0, @TVItem)
RedrawWindow_(GadgetID(#ExplorerTree), 0, 0, #RDW_UPDATENOW)
ProcedureReturn #True
EndIf
EndIf
ProcedureReturn #False
EndProcedure
EntryFound.B
i.W
Msg.S
WindowEvent.L
NewList MarkedItems.S()
If OpenWindow(#Window, 0, 0, 321, 330, "MultiSelect-Demo", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#Window))
ExplorerTreeGadget(#ExplorerTree, 9, 12, 303, 279, "", #PB_Explorer_NoMyDocuments)
ButtonGadget(#Button, 80, 300, 150, 20, "Markierte Dateien anzeigen")
Repeat
WindowEvent = WaitWindowEvent()
If EventType() = #PB_EventType_LeftClick
If EventGadget() = #Button
Break
EndIf
If GetGadgetState(#ExplorerTree) = #PB_Explorer_File
EntryFound = #False
If CountList(MarkedItems()) = 0
If HighlightItem(#True) = #True
AddElement(MarkedItems())
MarkedItems() = GetGadgetText(#ExplorerTree)
EndIf
Else
FirstElement(MarkedItems())
Repeat
If MarkedItems() = GetGadgetText(#ExplorerTree)
If HighlightItem(#False) = #True
DeleteElement(MarkedItems())
EntryFound = #True
EndIf
Break
EndIf
Until NextElement(MarkedItems()) = #False
If EntryFound = #False
If HighlightItem(#True) = #True
AddElement(MarkedItems())
MarkedItems() = GetGadgetText(#ExplorerTree)
EndIf
EndIf
EndIf
EndIf
EndIf
Until WindowEvent = #PB_Event_CloseWindow
If CountList(MarkedItems()) > 0
Msg = "Anzahl ausgewählter Dateien: " + Str(CountList(MarkedItems())) + Chr(13) + Chr(13)
FirstElement(MarkedItems())
For i = 1 To CountList(MarkedItems())
Msg = Msg + MarkedItems() + Chr(13)
NextElement(MarkedItems())
Next i
MessageRequester("Info", Msg)
Else
MessageRequester("Info", "Es wurden keine Dateien markiert!")
EndIf
EndIf
EndIf
Verfasst: 09.03.2007 13:37
von Kaeru Gaman
@Shardik
yo prima.
...allerdings bin ich bei Excaliburs unschuldiger fragestellung davon ausgegangen,
dass er den vorgang meint der nativ vorgesehen ist,
und sich daher einfach im Gadget vertan hat.

Verfasst: 09.03.2007 13:46
von Excalibur
Ich nehme alle Schuld auf mich und habe mich auch vertan.
Allerdings finde ich es schon klasse, wie Ihr hier nachts um halb 2 so kurz mal ein Programm aus dem Ärmel zaubert.
Habt Ihr sowas vorrätig oder macht Ihr das aus dem FF?
Frage an Kiffi
Verfasst: 09.03.2007 22:45
von Excalibur
Hallo Kiffi,
Dein Programm funktioniert.
So einigermaßen verstehe ich es. Aber doch nicht ganz.
Wäre es möglich, daß Du noch ein paar Kommentare reinschreibst?
Noch eine Frage: Was bedeutet die -1 hinter der For Next Schleife?
Über eine Antwort würde ich mich freuen.
Danke

Verfasst: 09.03.2007 23:13
von Kaeru Gaman
> Noch eine Frage: Was bedeutet die -1 hinter der For Next Schleife?
CountGadgetItems() gibt die gesamte Anzahl der Elemente zurück.
da die nummerierung bei 0 beginnt, ist die nummer des letzten Elementes =Anzahl-1
z.b. 8 elemente, nummern 0-7, 7 = 8-1
Verfasst: 10.03.2007 00:02
von Excalibur
Ok danke, das leuchtet mir ein.
Verfasst: 10.03.2007 14:38
von Kaeru Gaman
bitte im Hinterkopf behalten:
die -1 steht nicht irgendwie "hinter der schleife",
sie ist ein bestandteil des zweiten Parameters der nach
To steht.
