Salut Fred,
voici un exemple , tu compiles avec les thèmes activés sinon cela ne marche pas.
Unicode ou non c'est pareil.
La structure
LVTILEVIEWINFO comme je l'ai déclaré, si je met
Align #PB_Structure_AlignC cela ne donne pas le résultat attendu en x64. Soit c'est ma déclaration qui est fausse soit Align #PB_Structure_AlignC ne convient pas.
Pour moi la déclaration est conforme à la doc en ligne
J'ai lu des remarques sur la doc en ligne MS qui ne serait pas à jour mais je ne sais pas. Je n'ai pas de compilateur C / C++ pour effectuer des contrôles sur les structures, j'ai passé des heures la-dessus et ça me fatigue.
C'est pour cela que je demandais si vous aviez un outils pour importer les structures depuis les fichiers .h
Normalement, l'exemple n'affiche pas les colonnes mais pour chaque élément il y a l'icône, le nom, le type de fichier, la taille et la date/heure, chaque info sur une ligne différente (c'est comme dans l'explorateur windows en mode mosaïque)
Voilà le genre de problème pour la conversion en x64.
L'idéal ne serait pas d'avoir toutes les déclarations des structures en PB mais un outils capable (executable) d'importer ces structures depuis les fichiers de déclaration.
Code : Tout sélectionner
;// les macros MS en PB
Macro ListView_SetTileInfo(Hwnd, LVTILEINFO)
SendMessage_(Hwnd, #LVM_SETTILEINFO, 0, LVTILEINFO)
EndMacro
Macro ListView_SetTileViewInfo(Hwnd, TILEVIEWINFO)
SendMessage_(Hwnd, #LVM_SETTILEVIEWINFO, 0, TILEVIEWINFO)
EndMacro
;// Structure LVTILEINFO site MS (C++)
;// http://msdn.microsoft.com/en-us/library/windows/desktop/bb774766%28v=vs.85%29.aspx
; typedef struct LVTILEINFO {
; UINT cbSize;
; int iItem;
; UINT cColumns;
; PUINT puColumns;
; #if (_WIN32_WINNT >= 0x0600)
; int *piColFmt;
; #endif
; } LVTILEINFO, *PLVTILEINFO;
Structure LVTILEINFO Align #PB_Structure_AlignC
cbSize.l
iItem.l
cColumns.l
*puColumns
*piColFmt
EndStructure
;// Structure LVTILEVIEWINFO site MS (C++)
;// http://msdn.microsoft.com/en-us/library/windows/desktop/bb774768%28v=vs.85%29.aspx
; typedef struct LVTILEVIEWINFO {
; UINT cbSize;
; DWORD dwMask;
; DWORD dwFlags;
; SIZE sizeTile;
; int cLines;
; RECT rcLabelMargin;
; } LVTILEVIEWINFO, *PLVTILEVIEWINFO
Structure LVTILEVIEWINFO ;Align #PB_Structure_AlignC
cbSize.l
dwMask.l
dwFlags.l
sizeTile.size
cLines.l
rcLabelMargin.rect
EndStructure
Define .i
Global GLB_event
;// mémorise les données pour afficher en mosaique le nombre de subitems voulus
Global GLB_tvi.LVTILEVIEWINFO
;// morise les données pour indiquer à la listicon que l'on va utiliser les infos de subitems
Global GLB_ti.LVTILEINFO
;// variable mémorisant les différents champs du fichier courant
Global GLB_info.SHFILEINFO
Global Path$ = "C:\"
;// l'ordre des colonnes de l'explorerlist
Enumeration 0
#Colonne_Noms
#Colonne_Attributs
#Colonne_taille
#Colonne_Type
#Colonne_date
EndEnumeration
;// utilisé par les listicon pour le mode mosaique
#LVTVIF_AUTOSIZE = 0
#LVTVIM_COLUMNS = 2
#LVTVIM_LABELMARGIN = 4
#Listicon = 0
CoInitializeEx_(0, #COINIT_APARTMENTTHREADED|#COINIT_SPEED_OVER_MEMORY)
;// xp mini pour comctl32.dll version 6.00 mini
If OSVersion() < #PB_OS_Windows_XP
MessageRequester("Erreur", "Windows XP minimum est nécessaire", #PB_MessageRequester_Ok)
CoUninitialize_()
End
EndIf
;// les thèmes doivent être actifs
If OpenWindow(0, 0,0, 980, 670, "ListIconGadget", #PB_Window_MaximizeGadget| #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(#Listicon, 0, 0, WindowWidth(0), WindowHeight(0)-30, "Noms", WindowWidth(0)/3)
AddGadgetColumn(#Listicon, 1, "Attributs", GadgetWidth(#Listicon)/6*0.6) ;// Attributs
AddGadgetColumn(#Listicon, 2, "Taille", GadgetWidth(#Listicon)/6*0.9) ;// Taille
AddGadgetColumn(#Listicon, 3, "Type", GadgetWidth(#Listicon)/6) ;// Type
AddGadgetColumn(#Listicon, 4, "Date", 0) ;// Date
SendMessage_(GadgetID(#Listicon), #LVM_SETCOLUMNWIDTH, 4, #LVSCW_AUTOSIZE_USEHEADER)
;// active le mode d'affichage mosaïque (Tile) pour la listicon
SendMessage_(GadgetID(#Listicon), #LVM_SETVIEW, #LV_VIEW_TILE, 0)
;// variables initialisées pour afficher les subitems en mode mosaique Explorerlist
GLB_tvi\cbSize = SizeOf(LVTILEVIEWINFO)
GLB_tvi\dwFlags = #LVTVIF_AUTOSIZE ;// redimensionne automatiquement
GLB_tvi\dwMask = #LVTVIM_COLUMNS ;| #LVTVIM_LABELMARGIN
;// nombre de ligne à àjouter en fait que 3 mais ca permet d'augmenter la taille du rectangle
GLB_tvi\cLines = 4
GLB_ti\cbSize = SizeOf(LVTILEINFO)
;// Indique l'ordre des 3 colonnes à afficher, la 4eme à -1 pour que MS définisse de la place pour 4 colonne
GLB_ti\cColumns = GLB_tvi\cLines
GLB_ti\puColumns = ?OrdreColonneAfficher
ListView_SETTILEVIEWINFO(GadgetID(#Listicon), @GLB_tvi)
If ExamineDirectory(0, Path$, "*.*")
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
FileNameOnly$ = DirectoryEntryName(0)
SHGetFileInfo = SHGetFileInfo_(Path$ + FileNameOnly$, 0, @info.SHFILEINFO, SizeOf(SHFILEINFO), #SHGFI_ICON|#SHGFI_LARGEICON|#SHGFI_TYPENAME|#SHGFI_ATTRIBUTES)
Attributs = DirectoryEntryAttributes(0)
attributs$ = " "
If Attributs & (#PB_FileSystem_Archive|#PB_FileSystem_Compressed)
attributs$ = "A"
EndIf
If Attributs & #PB_FileSystem_Normal
attributs$ + "N"
EndIf
If Attributs & #PB_FileSystem_ReadOnly
attributs$ + "R"
EndIf
If Attributs & #PB_FileSystem_System
attributs$ + "S"
EndIf
taille$ = Str((DirectoryEntrySize(0)>> 10)+ Bool(((DirectoryEntrySize(0)%1024)))) + " Ko"
;// FR
date$ = FormatDate("%dd/%mm/%yyyy %hh:%ii:%ss", DirectoryEntryDate(0, #PB_Date_Modified))
If SHGetFileInfo
GLB_ti\iItem = i
AddGadgetItem(#Listicon, -1, FileNameOnly$ + Chr(10) + attributs$ + Chr(10) + taille$ + Chr(10) + PeekS(@info\szTypeName[0]) + Chr(10) + date$+Times$, info\hIcon)
ListView_SetTileInfo(GadgetID(#Listicon), @GLB_ti)
DestroyIcon_(info\hIcon)
Else
type$ = "?"
GLB_ti\iItem = i
AddGadgetItem(#Listicon, -1, FileNameOnly$ + Chr(10) + attributs$ + Chr(10) + taille$ + Chr(10) + type$+ Chr(10) + date$+Times$)
ListView_SetTileInfo(GadgetID(#Listicon), @GLB_ti)
EndIf
i+1
EndIf
Wend
FinishDirectory(0)
EndIf
EndIf
Repeat
GLB_event = WaitWindowEvent()
Until GLB_event = #PB_Event_CloseWindow
CoUninitialize_()
DataSection ;// utilisé pour afficher l'ordre des colonne en mode mosaique
OrdreColonneAfficher:
Data.l #Colonne_Type, #Colonne_taille, #Colonne_date, -1
EndDataSection
End