ExplorerTreeGadget mit Datei als Vorauswahl

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: ExplorerTreeGadget mit Datei als Vorauswahl

Beitrag 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.
Benutzeravatar
michel51
Beiträge: 84
Registriert: 01.11.2005 20:00
Wohnort: Dornhan-Weiden

Re: ExplorerTreeGadget mit Datei als Vorauswahl

Beitrag von michel51 »

Richtig!
Auswählen, aber nicht im Aufruf der Funktion. Hier gilt nur "Verzeichnis"

Oder liege ich da ganz falsch ?
michel51

Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)

Zum Lernen ist niemand zu alt.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: ExplorerTreeGadget mit Datei als Vorauswahl

Beitrag 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.
Benutzeravatar
michel51
Beiträge: 84
Registriert: 01.11.2005 20:00
Wohnort: Dornhan-Weiden

Re: ExplorerTreeGadget mit Datei als Vorauswahl

Beitrag 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. :D
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).
michel51

Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)

Zum Lernen ist niemand zu alt.
Olaf.Renns
Beiträge: 27
Registriert: 26.02.2009 10:11

Re: ExplorerTreeGadget mit Datei als Vorauswahl

Beitrag 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!
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: ExplorerTreeGadget mit Datei als Vorauswahl

Beitrag 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 :(
Repeat
PureBasic
ForEver
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ExplorerTreeGadget mit Datei als Vorauswahl

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: ExplorerTreeGadget mit Datei als Vorauswahl

Beitrag 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.....
Zuletzt geändert von Darie am 11.07.2011 23:46, insgesamt 1-mal geändert.
Repeat
PureBasic
ForEver
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ExplorerTreeGadget mit Datei als Vorauswahl

Beitrag von RSBasic »

Also bei mir wird der Eintrag markiert:
Bild
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: ExplorerTreeGadget mit Datei als Vorauswahl

Beitrag 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..
Zuletzt geändert von Darie am 11.07.2011 23:56, insgesamt 1-mal geändert.
Repeat
PureBasic
ForEver
Antworten