Hilfe für 2 Listfenster..

Für allgemeine Fragen zur Programmierung mit PureBasic.
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Hilfe für 2 Listfenster..

Beitrag von funkheld »

Hallo, guten Tag.
Ich möchte ein Ersatz für den Windowexplorer.
Habe unten mal ein Muster. Wie kann ich es umstellen, das nur die Datei erscheint ohne Datum und Grösse.
Wie kann ich zusätzelich dieses erweitern, das auch bei einem Doppleklick die Datei geöffnet wird?

danke.

gruss

Code: Alles auswählen

If OpenWindow(1, 200, 200, 220, 610, "Drag & Drop", #PB_Window_SystemMenu)
    ExplorerListGadget(1, 10, 10, 250, 340, "d:\atari\pebi-bas\*.txt;*.tur", #PB_Explorer_MultiSelect)
    ExplorerListGadget(2, 10, 350, 250, 250, "d:\atari\pebi-asm\*.;*.bin;*.obj", #PB_Explorer_MultiSelect)
  
    Repeat
      Event = WaitWindowEvent()  
          
      If Event = #PB_Event_Gadget And EventGadget() = 1 And EventType() = #PB_EventType_DragStart
        Files$ = ""       
        For i = 0 To CountGadgetItems(1)-1
          If GetGadgetItemState(1, i) & #PB_Explorer_Selected
            Files$ + GetGadgetText(1) + GetGadgetItemText(1, i) + Chr(10)
          EndIf
        Next i    
        DragFiles(Files$)
      EndIf    
      
      If Event = #PB_Event_Gadget And EventGadget() = 2 And EventType() = #PB_EventType_DragStart
        Files$ = ""       
        For i = 0 To CountGadgetItems(2)-1
          If GetGadgetItemState(2, i) & #PB_Explorer_Selected
            Files$ + GetGadgetText(2) + GetGadgetItemText(2, i) + Chr(10)
          EndIf
        Next i    
        DragFiles(Files$)
      EndIf      
      
    Until Event = #PB_Event_CloseWindow
  EndIf
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Hilfe für 2 Listfenster..

Beitrag von Andesdaf »

zum ersten:

Code: Alles auswählen

SetGadgetAttribute(1,#PB_Explorer_DisplayMode,#PB_Explorer_List)
SetGadgetAttribute(2,#PB_Explorer_DisplayMode,#PB_Explorer_List)
Das zweite benötigt einen Callback, ich hab aber grad keine Zeit, einen
zusammenzubasteln. Hier schon mal die beiden Proceduren, die für den
Aufruf benötigt werden:

Code: Alles auswählen

Procedure.s ReadRegKey(iOpenKey.i,sSubkey.s,sValueName.s) 
  Protected iHkey.i=0 
  Protected sKeyvalue.s=Space(255) 
  Protected iDatasize.i=255 
  
  If RegOpenKeyEx_(iOpenKey,sSubkey,0,#KEY_READ,@iHkey) 
    ProcedureReturn ""
  Else 
    If RegQueryValueEx_(iHkey,sValueName,0,0,@sKeyvalue,@iDatasize) 
        sKeyvalue = "" 
    Else  
        sKeyvalue=Left(sKeyvalue,iDatasize-1) 
    EndIf 
    RegCloseKey_(iHkey) 
  EndIf 
    
  ProcedureReturn sKeyvalue 
EndProcedure 

Procedure StartProgram(sDatei.s)
  Protected sSymbol.s = ReadRegKey(#HKEY_CLASSES_ROOT,"."+LCase(GetExtensionPart(sDatei)),"")
  If sSymbol <> ""
    Protected sSymbolPlay.s = ReadRegKey(#HKEY_CLASSES_ROOT,sSymbol+"\shell\play\command","")
    Protected sSymbolOpen.s = ReadRegKey(#HKEY_CLASSES_ROOT,sSymbol+"\shell\open\command","")
    If sSymbolPlay <> ""
      RunProgram(sSymbolPlay,sDatei,"")
    ElseIf sSymbolOpen <>""
      RunProgram(sSymbolOpen,sDatei,"")
    EndIf
  EndIf
EndProcedure
Win11 x64 | PB 6.20
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Hilfe für 2 Listfenster..

Beitrag von funkheld »

Jup, danke.

Wie kann ich ein Dateitype löschen aus einem Ordner, mit Sternchen funktioniert nicht?
DeleteFile("d:\atari\pebi-asm\*.obj")

danke.

gruss
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Hilfe für 2 Listfenster..

Beitrag von Andesdaf »

das geht so ohne weiteres nicht. glaub ich jedenfalls.

Das ExplorerListGadget ist für so große Funktionen eh schlecht geeignet,
da macht sich ein selbst gefülltes ListIconGadget einfacher. Hat aber
natürlich mehr Programmieraufwand.
Win11 x64 | PB 6.20
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Hilfe für 2 Listfenster..

Beitrag von funkheld »

Wie kann man denn zum Löchen eine Batch aufrufen, die ich jetzt erstellt habe ?

danke.

guss
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Hilfe für 2 Listfenster..

Beitrag von Danilo »

funkheld hat geschrieben:Wie kann ich ein Dateitype löschen aus einem Ordner, mit Sternchen funktioniert nicht?
DeleteFile("d:\atari\pebi-asm\*.obj")
Schreib Dir eine kleine Funktion dafür. Zum Beispiel so:

Code: Alles auswählen

Procedure DeleteFileType(Path$,Type$)
  Protected dir, deleted, file$

  dir = ExamineDirectory(#PB_Any, Path$, Type$)
  If dir
    While NextDirectoryEntry(dir)
      If DirectoryEntryType(dir) = #PB_DirectoryEntry_File
        file$ = Path$ + DirectoryEntryName(dir)
        Debug file$
        ;If DeleteFile(file$)
          deleted + 1
        ;Else
          ; error, can not delete file
        ;EndIf
      EndIf
    Wend
    FinishDirectory(dir)
  EndIf

  ProcedureReturn deleted

EndProcedure

Debug DeleteFileType("d:\atari\pebi-asm\","*.obj")
DeleteFile(file$) hab ich zum testen mal auskommentiert.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Hilfe für 2 Listfenster..

Beitrag von funkheld »

jup, danke.

gruss
Antworten