Seite 2 von 3
Re: ExplorerTreeGadget mit Datei als Vorauswahl
Verfasst: 07.08.2010 13:35
von edel
deutsche Hilfe hat geschrieben:
Beschreibung
Erstellt eine Baum-Ansicht eines Verzeichnis-Baums, genau wie der Explorer dies tut. Es ermöglicht dem Anwender, durch sein Dateisystem zu navigieren und eine Datei oder ein Verzeichnis auszuwählen.
Re: ExplorerTreeGadget mit Datei als Vorauswahl
Verfasst: 07.08.2010 14:31
von michel51
Richtig!
Auswählen, aber nicht im Aufruf der Funktion. Hier gilt nur "Verzeichnis"
Oder liege ich da ganz falsch ?
Re: ExplorerTreeGadget mit Datei als Vorauswahl
Verfasst: 07.08.2010 15:40
von edel
michel51 hat geschrieben:Richtig!
Auswählen, aber nicht im Aufruf der Funktion. Hier gilt nur "Verzeichnis"
Oder liege ich da ganz falsch ?
Nein, stimmt schon, mal abgesehen von den Pattern. Aber schau mal :
dann kann das ExplorerTreeGadget NUR Verzeichnisse darstellen und keine Dateien.
Das ist schlicht falsch, denn das Control kann durchaus beides anzeigen. Da hast du dich dann wohl etwas falsch ausgedrueckt.
Re: ExplorerTreeGadget mit Datei als Vorauswahl
Verfasst: 08.08.2010 12:59
von michel51
edel hat geschrieben:michel51 hat geschrieben:Richtig!
Auswählen, aber nicht im Aufruf der Funktion. Hier gilt nur "Verzeichnis"
Oder liege ich da ganz falsch ?
Nein, stimmt schon, mal abgesehen von den Pattern. Aber schau mal :
dann kann das ExplorerTreeGadget NUR Verzeichnisse darstellen und keine Dateien.
Das ist schlicht falsch, denn das Control kann durchaus beides anzeigen. Da hast du dich dann wohl etwas falsch ausgedrueckt.
Da hast du sicher nicht so ganz unrecht.
Was war denn die ursprüngliche Frage? Olaf wollte eine Datei mit den ExplorerTreeGadget nicht nur darstellen, sondern auch markieren (als default voreinstellen), wenn die den ersten Post richtig verstanden habe.
Das ist aber nicht möglich, da nur
Verzeichnis vorgesehen ist.
Die Darstellung von Dateien im Tree ist sicher möglich und die Auswahl per Mausclick auch (habs jetzt nicht probiert).
Re: ExplorerTreeGadget mit Datei als Vorauswahl
Verfasst: 09.08.2010 09:55
von Olaf.Renns
Also ich leite vom Namen "ExplorerTreeGadget" eine strukturierte Datei- und Verzeichnisdarstellung ab. Zum Windows Explorer gehören ja auch eine vollständige Anzeige aller Inhalte und standartmäßig zeigt das Gadget ja auch alles an. Die Auswahl lässt sich ja dann mit #PB_Explorer_NoFiles und den anderne "No" Flags einschränken. Zudem arbeitet das Ganze ja auch mit Pattern. Somit sehe ich den Fokus schon auch auf den Dateiinhalt, was eine Vorauswahl (auch gerade im Zusammenhang mit dem Default-Verzeichnis und den Pattern) durchaus Sinn macht.
Die Anpassungen von edel führen zum Erfolg. Jetzt läuft das Ganze komplett richtig. Vielen Dank, Gemeinde!
Re: ExplorerTreeGadget mit Datei als Vorauswahl
Verfasst: 11.07.2011 22:21
von Darie
CODE von Edel fürs ExplorerTreeGadget:
Code: Alles auswählen
Procedure SelectFile(Gadget.i, File.s)
Protected path.s
Protected hItem.i
Protected item.TVITEM
Protected buffer.s{#MAX_PATH}
Protected result.i
path = GetPathPart(File)
If Not path
path = GetGadgetText(Gadget)
path = GetPathPart(path)
EndIf
file = GetFilePart(file)
SetGadgetText(Gadget,path)
hItem = SendMessage_(GadgetID(Gadget),#TVM_GETNEXTITEM, #TVGN_CARET, 0)
If hItem
hItem = SendMessage_(GadgetID(Gadget),#TVM_GETNEXTITEM, #TVGN_CHILD, hItem)
If hItem
item\mask = #TVIF_TEXT | #TVIF_HANDLE
item\pszText = @buffer
item\cchTextMax = #MAX_PATH
While hItem
item\hItem = hItem
SendMessage_(GadgetID(Gadget), #TVM_GETITEM, 0, item)
If CompareMemoryString(@file,@buffer,#PB_String_NoCase) = #PB_String_Equal
SendMessage_(GadgetID(Gadget),#TVM_SELECTITEM, #TVGN_CARET, hItem)
result = #True
Break
EndIf
hItem = SendMessage_(GadgetID(Gadget),#TVM_GETNEXTITEM, #TVGN_NEXT, hItem)
Wend
EndIf
EndIf
ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 400, 200, "ExplorerTreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ExplorerTreeGadget(0, 10, 10, 380, 180, "C:\Windows\*.exe")
SetActiveGadget(0)
Debug SelectFile(0,"notepad.exe")
;SelectFile(0,"C:\Windows\notepad.exe")
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Hatte gehofft, dass der Code auch fürs ExplorerListGadget funktioniert, leider nicht

Re: ExplorerTreeGadget mit Datei als Vorauswahl
Verfasst: 11.07.2011 23:08
von RSBasic
Mit Hilfe der Suche:
Code: Alles auswählen
EnableExplicit
Define EventID
Procedure FindListItem(GadgetID.w,Expression.l,fMode.b=0,Column.b=0,iStart.l=0)
Protected hwndListbox.l, Position.l, ItemCount.l, Length.l, i.l, Label.s
Protected LVITEM.LV_ITEM
If Not IsGadget(GadgetID) : ProcedureReturn -1 : EndIf
hwndListbox = GadgetID(GadgetID) : Position = -1
If fMode
Position = Expression
Else
ItemCount = CountGadgetItems(GadgetID) - 1
Length = lstrlen_(Expression)
For i=iStart To ItemCount
Label = GetGadgetItemText(GadgetID,i,Column)
If CompareMemoryString(Expression,@Label,0,Length) = 0
Position = i : Break
EndIf
Next
EndIf
SendMessage_(hwndListbox,#WM_VSCROLL,#SB_TOP,0)
SendMessage_(hwndListbox,#LVM_ENSUREVISIBLE,Position,1)
If Position > SendMessage_(hwndListbox,#LVM_GETCOUNTPERPAGE,0,0)-1
SendMessage_(hwndListbox,#WM_VSCROLL,#SB_PAGEDOWN,0)
SendMessage_(hwndListbox,#WM_VSCROLL,#SB_LINEUP,0)
EndIf
LVITEM\mask = #LVIF_STATE
LVITEM\state = #LVIS_SELECTED
LVITEM\stateMask = #LVIS_SELECTED
SendMessage_(GadgetID(GadgetID), #LVM_SETITEMSTATE, Position, @LVITEM)
SetActiveGadget(GadgetID)
ProcedureReturn Position
EndProcedure
If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ExplorerListGadget(1,0,0,WindowWidth(0),WindowHeight(0),"C:\Windows\*.exe",0)
FindListItem(1,@"notepad.exe",0,0,0)
Repeat
EventID=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
End
EndIf
ForEver
EndIf
Re: ExplorerTreeGadget mit Datei als Vorauswahl
Verfasst: 11.07.2011 23:43
von Darie
Code: Alles auswählen
LVITEM\mask = #LVIF_STATE
LVITEM\state = #LVIS_SELECTED
LVITEM\stateMask = #LVIS_SELECTED
SendMessage_(GadgetID(GadgetID), #LVM_SETITEMSTATE, Position, @LVITEM)
Danke fürs Heraussuchen, die Datei ist danach die aktuelle, nur leider nicht mit einem blauen Balken selektiert... sollte aber eigentlich so sein, oder nicht ?
Ich glaube es würde sich für mich lohnen etwas intensiver in die Win-Api einzusteigen.....
Re: ExplorerTreeGadget mit Datei als Vorauswahl
Verfasst: 11.07.2011 23:46
von RSBasic
Also bei mir wird der Eintrag markiert:

Re: ExplorerTreeGadget mit Datei als Vorauswahl
Verfasst: 11.07.2011 23:50
von Darie
sehr komisch, bei mir leider nicht..... mmmmmhhhhh
zumindest in meinem Programm nicht, wenn ich das Snippet selber ausführe, ist "notepad.exe" markiert, dann such ich mal in meinem Code weiter.... Danke nochmal..