[AIDE PUREBASIC] Mises à jour.

Informations pour bien débuter en PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [AIDE PUREBASIC] Mises à jour.

Message par Ar-S »

Oups effectivement je viens de le trouver.
J'ai trop codé aujourd'hui, plus les yeux en face des troues.
Désolé :oops: :D
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: [AIDE PUREBASIC] Mises à jour.

Message par Mesa »

SONDAGE

Le sommaire de l'aide devient de plus en plus imposant et nous envisageons de créer des sous-répertoires afin d'en faciliter l'utilisation.

Que proposez-vous ?

Par exemple :
- General
- Game
- Engine3D
ou
- General
- Game&Medias
- Engine3D
A vous de jouer ! :D

Mesa.
Avatar de l’utilisateur
wood51
Messages : 122
Inscription : ven. 05/juin/2009 13:04
Localisation : orléans

Re: [AIDE PUREBASIC] Mises à jour.

Message par wood51 »

Salut !
Le premier me conviendrais .
Merci de nous consulter
@+ wood51
Compétences : Bricoleur PureBasic du dimanche
Crâmage de cerveau en cours 100% :D
Projet en cours : http://purepicbasic.frenchboard.com/
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: [AIDE PUREBASIC] Mises à jour.

Message par comtois »

[Hors sujet]
C'est la navigation que j'aimerais voir changer :)
Actuellement , elle se trouve en bas de page de chaque fonction, ça oblige à jouer de l'ascenseur.

Je préfèrerais que la navigation se trouve tout en haut de la page, ça serait plus simple pour passer d'une fonction à l'autre.
[/Hors sujet]
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: [AIDE PUREBASIC] Mises à jour.

Message par djes »

Ca c'est une très bonne idée !

Je vous conseille de suivre un principe simple vieux comme le monde : la règle des 8. Au delà de 8 éléments (dossiers, icônes, etc.), il est difficile d'avoir une vision d'ensemble, et donc on perd ses repères.

Par exemple, voici quelques catégories/sous-catégories (à compléter/discuter)

Général
-Données
--Utilisation
---Variables
---Maps
---Liste chainées
---Tableaux
---Mémoire
---Data
--Gestion
---Tri
---Cryptage
---Compression
-Maths
Applications
-Fenêtrage
--Gadgets
-Requêtes
-Impression
Multimedia
-2D
-3D
-Jeu
-Musique
Réseau
Fichiers
-Gestion
-Types de fichiers
--Image
--Polices
--Musique
--Vidéo
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: [AIDE PUREBASIC] Mises à jour.

Message par graph100 »

Je suis d'accord, mais j'espère que tu n'inclus pas les commandes des gadgets dans ta règle,
il me semble qu'il est plus pratique (de temps en temps) d'avoir les commandes listées alphabétiquement quand on cherche une commande dont on ne se souvient pas.

Et passer plus que 3 sous menus pour arriver aux commandes me semble peu pratique.
Par contre c'est sur que le menu principal devient encombré !

je rajoute : +1 pour Comtois et la navigation au sommet (et en bas aussi pourquoi pas ?)
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: [AIDE PUREBASIC] Mises à jour.

Message par Backup »

Superbe boulot sur la Doc :)

suggestion , : se serai peut etre pas mal , de modifier tout les Exemples des fonctions
de sortes, qu'ils utilisent des constantes ( avec Enumération )

je ne trouve pas tres propre les exemples qui utilisent des numéros pour les Gadgets, sprites ...etc ...

ça parait peut etre trivial, mais ça va contribuer a la clarté de certains exemples
qui utilisent une fenetre "0" et un Gadget "0"

pour un Débutant, la lecture , n'est pas évidente :)
Dernière modification par Backup le mer. 27/févr./2013 18:55, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [AIDE PUREBASIC] Mises à jour.

Message par Ar-S »

Dobro 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"
Oui ça peut clairement dérouter le débutant
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: [AIDE PUREBASIC] Mises à jour.

Message par Anonyme2 »

1) Il serait possible d'avoir la liste des registres volatiles en 64 bits et pas qu'en 32 bits dans la doc ?

2) Il serait possible d'avoir les registres utilisés pour le retour de fonction sur les flottants simple, doubles etc etc etc .
Et d'une manière générale toutes les infos en asm qui vont bien en 32-64 bits :mrgreen:

3) Des explications seraient bien sur les registres utilisés lors d'appels de fonction dans les call standards mais aussi en mode C etc.

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.


Merci
Fred
Site Admin
Messages : 2805
Inscription : mer. 21/janv./2004 11:03

Re: [AIDE PUREBASIC] Mises à jour.

Message par Fred »

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.
As-tu essayé ça ?

Code : Tout sélectionner

Structure MyTest Align #PB_Structure_AlignC
  a.b
  b.w
  c.l
  d.b
EndStructure
Ca devrait marcher à la fois en 32-bit et 64-bit, sans avoir à aligner manuellement les membres.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: [AIDE PUREBASIC] Mises à jour.

Message par Anonyme2 »

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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: [AIDE PUREBASIC] Mises à jour.

Message par nico »

J'obtiens le même résutat en compilant sous x64, quel résultat tu as?

Tu tournes sous quel OS?
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: [AIDE PUREBASIC] Mises à jour.

Message par Anonyme2 »

nico a écrit :J'obtiens le même résutat en compilant sous x64, quel résultat tu as?

Tu tournes sous quel OS?
Salut Nico,

J'ai 2 portables 64 bits
le 1er est un ACER avec Seven 64 bits édition familiale + Pack 1, 4 Go de Ram.
le 2ème est un ASUS avec Seven 64 bits professionnel + Pack 1, 3 Go de Ram. (c'est celui avec lequel je travaille toujours).

J'ai PB 5.11 beta 1 (x86-x64) sur les 2 machines (mais c'est pareil avec la version 5.10) en installation propre sans aucune librairie externe.

Le résultat est le même sur les 2 machines en compilation unicode ou non

En X86, que j'ajoute ou non Align #PB_Structure_AlignC pour la Structure LVTILEVIEWINFO cela fonctionne toujours comme ce que j'en attend.

En X64, si j'ajoute Align #PB_Structure_AlignC pour la Structure LVTILEVIEWINFO cela ne fonctionne pas comme ce que j'en attend, c'est le mode par défaut et seule 2 lignes sont affichées. Si je retire l'alignement pour cette structure, cela fonctionne comme ce que j'en attend.

Je ne sais pas si c'est ma déclaration qui est fausse ou si Align #PB_Structure_AlignC est au point, voire les deux :mrgreen:

Voilà 2 saisies d'écran
Résultat attendu :
Image

Mauvais résultat :
Image
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: [AIDE PUREBASIC] Mises à jour.

Message par nico »

Je ne faisait pas les tests correctement, donc je confirme le problème, j'ai remarqué que #PB_Structure_AlignC ne sait pas gérer ou gère mal les structures imbriquées, si on décompose la structure sizeTile.size, cela fonctionne correctement.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: [AIDE PUREBASIC] Mises à jour.

Message par Anonyme2 »

Autre exemple avec 2 autres structures ou l'alignement sur le C ne fonctionne pas:
TASKDIALOG_BUTTON et TASKDIALOGCONFIG

C'est le même problème en x64 sur mes 2 machines, l'une étant en Win 8 pro 64 et l'autre en Seven pro 64.
Là encore, je pense que les structures sont conformes aux définitions MS.

En x86 que je mette ou non les align ça fonctionne.
Par contre en x64, si je met une ou l'autre des structures ou les deux avec l'alignement sur le C, ça ne marche pas du tout voire ça plante.

C'est un code de SFSxOI qui date un peu que j'ai modifié en particulier les structures.
http://www.purebasic.fr/english/viewtop ... 12&t=30801

Il faut compiler en unicode uniquement.

Dans ce cas, l'alignement ne touche pas aux structureunion

Fred, tu en penses quoi ?

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
Répondre