Seite 1 von 1
[erledigt] Filerequester - Details statt Liste anzeigen ?
Verfasst: 13.12.2007 23:17
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
Verfasst: 15.12.2007 10:24
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
Verfasst: 15.12.2007 14:26
von scholly
Ui... ist das kompliziert
danke... scholly