J'ai trop codé aujourd'hui, plus les yeux en face des troues.
Désolé


ou- General
- Game
- Engine3D
A vous de jouer !- General
- Game&Medias
- Engine3D
Oui ça peut clairement dérouter le débutantDobro a écrit :Superbe boulot sur la Doc
ça parait peut etre trivial, mais ça va contribuer a la clarté de certains exemple
qui utilise une fenetre "0" et un Gadget "0"
As-tu essayé ça ?Denis a écrit :4) J'ai des soucis sur la compréhension (et l'utilisation) de l'alignement des structures sur le C (structures MS non connues de PB), quant faut-il l'utiliser ou non ?
C'est une vraie galère les structures MS non déclarées en PB (pour que cela fonctionne en 32-64 bits), s'il existe un outil que PB utilise, il serait bien que l'on puisse l'utiliser.
Ou alors nous expliquer clairement les règles pour que les structures MS non déclarées en PB fonctionnent en 32 / 64 bits en se basant sur les définitions des structures de MS.
Que faut-il faire pour qu'il y ait plus de structure MS définies en PB ?
Parce que la finalité c'est bien que PB connaisse un maximum de structures MS.
Code : Tout sélectionner
Structure MyTest Align #PB_Structure_AlignC
a.b
b.w
c.l
d.b
EndStructure
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
Salut Nico,nico a écrit :J'obtiens le même résutat en compilant sous x64, quel résultat tu as?
Tu tournes sous quel OS?
Code : Tout sélectionner
;// Code d'origine SFSxOI
;// www.purebasic.fr/english/viewtopic.php?f=12&t=30801
;//
;// Modifié par Denis, en particulier les structures, mais pas que
;//
;// A compiler en unicode
CompilerIf Not #PB_Compiler_Unicode
MessageRequester("Erreur", "A compiler en mode unicode seulement", 16)
End
CompilerEndIf
#IDOK = 1
#IDCANCEL = 2
#IDABORT = 3
#IDRETRY = 4
#IDIGNORE = 5
#IDYES = 6
#IDNO = 7
#IDCLOSE = 8
#TD_WARNING_ICON = -1
#TD_ERROR_ICON = -2
#TD_INFORMATION_ICON = -3
#TD_SHIELD_ICON = -4
#TD_ICON_BLANK = 100
#TD_ICON_WARNING = 101
#TD_ICON_QUESTION = 102
#TD_ICON_ERROR = 103
#TD_ICON_INFORMATION = 104
#TD_ICON_BLANK_AGAIN = 105
#TD_ICON_SHIELD = 106
;// http://msdn.microsoft.com/en-us/library/windows/desktop/bb787475%28v=vs.85%29.aspx
Structure TASKDIALOG_BUTTON ;Align #PB_Structure_AlignC
nButtonID.l
*pszButtonText
EndStructure
;// http://msdn.microsoft.com/en-us/library/windows/desktop/bb787473%28v=vs.85%29.aspx
Structure TASKDIALOGCONFIG ;Align #PB_Structure_AlignC
cbSize.l
hwndParent.i
hInstance.i
dwFlags.l
dwCommonButtons.l
*pszWindowTitle
StructureUnion
hMainIcon.i
*pszMainIcon
EndStructureUnion
*pszMainInstruction
*pszContent
cButtons.l
*pButtons.TASKDIALOG_BUTTON
nDefaultButton.l
cRadioButtons.l
*pRadioButtons.TASKDIALOG_BUTTON
nDefaultRadioButton.l
*pszVerificationText
*pszExpandedInformation
*pszExpandedControlText
*pszCollapsedControlText
StructureUnion
hFooterIcon.i
*pszFooterIcon
EndStructureUnion
*pszFooter
*pfCallback
*lpCallbackData
cxWidth.l
EndStructure
Prototype TaskDialogIndirect(*tdlgx.TASKDIALOGCONFIG, *ClickedButtonx, *SelRadiox, *fVerifyx)
Dim tbButtons.TASKDIALOG_BUTTON(2)
sBtn1 = @"Heck Yeah!"
sBtn2 = @"Nope!"
sBtn3 = @"Repeat The Question?"
tbButtons(0)\nButtonID = #IDYES
tbButtons(0)\pszButtonText = sBtn1
tbButtons(1)\nButtonID = #IDNO
tbButtons(1)\pszButtonText = sBtn2
tbButtons(2)\nButtonID = #IDCANCEL
tbButtons(2)\pszButtonText = sBtn3
#ID_RADIO_BUTTON_PURE = 1002
#ID_RADIO_BUTTON_BASIC = 1003
#ID_RADIO_BUTTON_IS_NEAT = 1004
Dim ID_RADIOButtons.TASKDIALOG_BUTTON(2)
IDsBtn1 = @"Pure"
IDsBtn2 = @"Basic"
IDsBtn3 = @"IS NEAT! radio button"
ID_RADIOButtons(0)\nButtonID = #ID_RADIO_BUTTON_PURE
ID_RADIOButtons(0)\pszButtonText = IDsBtn1
ID_RADIOButtons(1)\nButtonID = #ID_RADIO_BUTTON_BASIC
ID_RADIOButtons(1)\pszButtonText = IDsBtn2
ID_RADIOButtons(2)\nButtonID = #ID_RADIO_BUTTON_IS_NEAT
ID_RADIOButtons(2)\pszButtonText = IDsBtn3
sWindowTitle = @"A Larger Task Dialog"
sMainInstruction = @"Do you want to view the larger TaskDialog?"
sContent = @"Here it is now with custom buttons."
sVerify = @"Don't show this message again"
sExpanded = @"An example provided by SFSxOI for PureBasic Tips and Tricks."
sCollapsedControlText = @"Where the heck did this come from?"
sExpandedControlText = @"Ah, got it!"
tdlg.TASKDIALOGCONFIG
tdlg\cbSize = SizeOf(TASKDIALOGCONFIG)
tdlg\hwndParent = #Null
tdlg\hInstance = #Null
tdlg\dwFlags = #Null
tdlg\dwCommonButtons = #Null
tdlg\pszWindowTitle = sWindowTitle
tdlg\hMainIcon = #TD_ICON_SHIELD
tdlg\pszMainInstruction = sMainInstruction
tdlg\pszContent = sContent
tdlg\cButtons = 3
tdlg\pButtons = @tbButtons(0)\nButtonID
tdlg\cRadioButtons = 3
tdlg\pRadioButtons = @ID_RADIOButtons(0)\nButtonID
tdlg\nDefaultButton = #IDNO
tdlg\pszVerificationText = sVerify
tdlg\pszExpandedInformation = sExpanded
tdlg\pszExpandedControlText = sExpandedControlText
tdlg\pszCollapsedControlText = sCollapsedControlText
tdlg\hFooterIcon = #Null
tdlg\pszFooter = #Null
tdlg\pfCallback = #Null
Procedure Task_DialogIndirect(*tdlgx)
Global fVerifyx, SelRadiox
If OpenLibrary(0, "comctl32.dll")
Libef = LibraryID(0)
If Libef
*Task_Dialog_Func.TaskDialogIndirect = GetFunction(0, "TaskDialogIndirect")
If *Task_Dialog_Func
*Task_Dialog_Func(*tdlgx, @ClickedButtonx, @SelRadiox, @fVerifyx)
EndIf
EndIf
CloseLibrary(0)
EndIf
ProcedureReturn ClickedButtonx
EndProcedure
ClickedButton = Task_DialogIndirect(@tdlg)
If fVerifyx = #True
Debug "You checked the 'Do not prompt me again' box"
;set some registry To indicate so, so Next time the prompt is Not shown
Else
;clear the registry, so Next time the prompt is shown
EndIf
If SelRadiox = #ID_RADIO_BUTTON_PURE
SelRadio$ = "PURE radio button"
Else
If SelRadiox = #ID_RADIO_BUTTON_BASIC
SelRadio$ = "BASIC radio button"
Else
If SelRadiox = #ID_RADIO_BUTTON_IS_NEAT
SelRadio$ = "IS NEAT! radio button"
EndIf
EndIf
EndIf
Select ClickedButton
Case #IDOK
Debug "You clicked the OK button"
Debug "and you also clicked the " +SelRadio$
Case #IDCANCEL
Debug "You clicked the Repeat Question? button"
Debug "and you also clicked the " +SelRadio$
Case #IDABORT
Debug "You clicked the Abort button"
Debug "and you also clicked the " +SelRadio$
Case #IDRETRY
Debug "You clicked the Retry button" +Str(ClickedButton)
Debug "and you also clicked the " +SelRadio$
Case #IDIGNORE
Debug "You clicked the Ignore button" +Str(ClickedButton)
Debug "and you also clicked the " +SelRadio$
Case #IDYES
Debug "You clicked the Heck Yeah! button" +Str(ClickedButton)
Debug "and you also clicked the " +SelRadio$
Case #IDNO
Debug "You clicked the Nope! button" +Str(ClickedButton)
Debug "and you also clicked the " +SelRadio$
EndSelect