[erledigt] Filerequester - Details statt Liste anzeigen ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

[erledigt] Filerequester - Details statt Liste anzeigen ?

Beitrag von scholly »

moin, moin...

Ich bin mir nicht klar, ob hier der richtige Platz für diese Frage ist:

Was muß ich machen, damit ein FileRequester sich nicht im Listen- sondern Detail-Modus öffnet ?
AFAICS gehts nich von PB aus - geht das per API oder mit irgendeiner XP-Einstellung ?

mDV... scholly
Zuletzt geändert von scholly am 17.05.2008 16:09, insgesamt 1-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Beitrag von Andreas »

Per API und einer Hook-Prozedur

Code: Alles auswählen

; Author: Andreas
; Date: 15. December 2007
; OS: Windows

#OpenFileButtonGadget = 1
#QuitButtonGadget = 2

#CDN_FIRST = (-601)
#CDN_SELCHANGE = (#CDN_FIRST - 1)
#CDN_FOLDERCHANGE = (#CDN_FIRST - 2)

#FCIDM_SHVIEW_LARGEICON = 28713
#FCIDM_SHVIEW_SMALLICON = 28714
#FCIDM_SHVIEW_LIST      = 28715
#FCIDM_SHVIEW_REPORT    = 28716
#FCIDM_SHVIEW_THUMBNAIL = 28717
#FCIDM_SHVIEW_TILE      = 28718


#OFN_ENABLESIZING = $800000
#OFN_FORCESHOWHIDDEN = $10000000

Procedure.b Is2KShell()
 ;Die Prozedur ermittelt die Version der Comdlg32.dll
 ;ab Version5 ist die Struktur von OPENFILENAME 12 Bytes größer
 ;Das muss bei der Übergabe der Strukturgrösse beachtet werden ! 
  Static nBuffSize.l, nDiscard.l, lpBuffer.l, nVerMajor.l
  Define FILE_NAME.s = "Comdlg32.dll"
  Define Retval.l = #False
  nBuffSize = GetFileVersionInfoSize_(FILE_NAME, nDiscard)
  If nBuffSize > 0
    *abytBuffer = AllocateMemory(nBuffSize)
    GetFileVersionInfo_(FILE_NAME, 0, nBuffSize, *abytBuffer)
    If VerQueryValue_(*abytBuffer, "\", @lpBuffer, nDiscard)
      nVerMajor = PeekW(lpBuffer + 10)
      If nVerMajor >= 5
        Retval = #True
      EndIf
    EndIf
  FreeMemory(*abytBuffer)
  EndIf
  ProcedureReturn Retval
EndProcedure

Structure OFNOTIFY
  hdr.NMHDR
  lpOFN.OPENFILENAME
  pszFile.l
EndStructure


Procedure OFHookProc(hdlg,uiMsg,wParam,lParam)
  Result = #False
  Select uiMsg
  Case #WM_NOTIFY
    *of.OFNOTIFY = lParam
    If *of\hdr\code = #CDN_FOLDERCHANGE
      hLV = FindWindowEx_(GetParent_(hDlg), 0, "SHELLDLL_DefView", #Null)
      SendMessage_(hLV, #WM_COMMAND, #FCIDM_SHVIEW_REPORT , #Null)
    EndIf
  EndSelect
  ProcedureReturn Result
EndProcedure

Procedure.s PB_OpenFile()
  ;OPENFILENAME-Struktur füllen
  *FileBuffer = AllocateMemory(#MAX_PATH)
  Result.s = ""
  Part1.s = "Bitmaps"
  Part2.s = "*.bmp"
  *Pattern = AllocateMemory(Len(Part1+Part2)+2)
  PokeS(*Pattern,Part1)
  PokeS(*Pattern+(Len(Part1)+1),Part2)
  of.OPENFILENAME
  of\lStructSize = SizeOf(OPENFILENAME) + 12*Is2KShell()
  of\flags =  #OFN_ENABLEHOOK|#OFN_EXTENSIONDIFFERENT|#OFN_NOCHANGEDIR|#OFN_OVERWRITEPROMPT|#OFN_HIDEREADONLY|#OFN_EXPLORER|#OFN_ENABLESIZING|#OFN_FORCESHOWHIDDEN
  of\lpstrFilter = *Pattern
  of\nMaxFile = #MAX_PATH
  of\lpstrFile = *FileBuffer
  of\lpfnHook = @OFHookProc()
  If GetOpenFileName_(of);Dialog aufrufen
    Result = PeekS(*FileBuffer);wenn OK dann Filenamen auslesen
  EndIf
  FreeMemory(*Pattern)
  FreeMemory(*FileBuffer)
  ProcedureReturn Result
EndProcedure

If OpenWindow(0,0,0,270,220,"Thumbnail-Sample",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  ButtonGadget(#OpenFileButtonGadget, 10, 10,80,20,"OpenFile")
  ButtonGadget(#QuitButtonGadget, 10, 40,80,20,"Quit")
  Debug Is2KShell()
  Repeat
    EventID.l = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
      Case #OpenFileButtonGadget
        opf.s = PB_OpenFile()
        If opf
          MessageRequester("File :",opf,0)
        EndIf
      Case #QuitButtonGadget
        SendMessage_(WindowID(0),#WM_CLOSE,0,0)
      EndSelect
    EndIf
  Until EventID = #PB_Event_CloseWindow
EndIf
Gruss Andreas
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Ui... ist das kompliziert :?

danke... scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Antworten