VB to PB

Programmation d'applications complexes
Avatar de l’utilisateur
Mindphazer
Messages : 635
Inscription : mer. 24/août/2005 10:42

Re: VB to PB

Message par Mindphazer »

Shadow a écrit : Mais grâce à une certaine personne qui n'est pas sur ce forum, peut être que je pourrais essayer d'en faire un plus tard
quand il aura terminer ce que je lui est demander, en plus il le fait gratuitement, car ça luis sert aussi, peut être que grâce à lui je pourrais essayer d'en faire un.
Du coup si je comprends bien, c'est pas toi qui développe ton truc, c'est cette "certaine personne" ?
Bureau : Win10 64bits
Maison : Macbook Pro M1 14" SSD 512 Go / Ram 16 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Avatar de l’utilisateur
Ar-S
Messages : 9471
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: VB to PB

Message par Ar-S »

Tout d’abord j'ai pas visual studio et je ne le mettrai pas. Donc je ne peux pas tester.

Petites remarques/conseils concernant ton forum.
- Un forum c'est bien mais peut être un peu gros pour un logiciel qui oh final est une succession de "replacestring". Oui ça peu aider d'avoir un endroi ou causer de bugs ou remarques éventuelles, mais tu dois proposer ton produit via une "vitrine", une page web quoi, un site.. Ce n'est pas les solutions (même gratuites) qui manquent (comme winx)
- Tu proposes ensuite le téléchargement de Visual. C'est bien, mais tu l'héberges toi sur google drive... Est-ce utile ?
Quelle version est-ce ? Je crois qu'il est payant à ce qu'il me semble. Seule Visual Basic 2010 Express est gratuit.
Donc si c'est la version Express, précise le.
- Les videos sur google drive je n'ai pas pu les voir... Franchement, mets les sur youtube. Tu pourras même ainsi les insérer dans ton forum/site en directe.
- Pour tes dons, "écrivez moi à xxxxxxx" ne marchera jamais. Tu veux brasser des dons, utilise une plateforme dédiée comme Paypal et surement d'autres..
- Enfin tu as bien fait de retirer ce poste vaseux "Comment puis-je faire un don de 1000€". :roll:

Sinon tu es allé au bon de ton projet, tu peux être content de toi. Même si tu as eu de l'aide, peu importe.
~~~~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
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VB to PB

Message par Shadow »

Mindphazer a écrit :
Shadow a écrit : Mais grâce à une certaine personne qui n'est pas sur ce forum, peut être que je pourrais essayer d'en faire un plus tard
quand il aura terminer ce que je lui est demander, en plus il le fait gratuitement, car ça luis sert aussi, peut être que grâce à lui je pourrais essayer d'en faire un.
Du coup si je comprends bien, c'est pas toi qui développe ton truc, c'est cette "certaine personne" ?
Non pas le logiciel en lui même mais une partie oui, la partie la plus ardue.

Ar-S merci pour t'es conseil, je prends note, j'aurais surement besoin d'aide si tu veux aider.
Non j'ai reçus aucune aide pour VB To PB !
Un forum c'est bien mais peut être un peu gros pour un logiciel qui oh final est une succession de "replacestring"
Tu n'y est pas du tous, c'est beaucoup plus complexe que ça !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Mindphazer
Messages : 635
Inscription : mer. 24/août/2005 10:42

Re: VB to PB

Message par Mindphazer »

Shadow a écrit : Non pas le logiciel en lui même mais une partie oui, la partie la plus ardue.
Shadow a écrit : Non j'ai reçus aucune aide pour VB To PB !
Contradiction, quand tu nous tiens !
Bureau : Win10 64bits
Maison : Macbook Pro M1 14" SSD 512 Go / Ram 16 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VB to PB

Message par Shadow »

VB To PB n'as jamais reçus d'aide extérieure je le redis encore une fois, tu as mal lus !
Le Futur Visual Designer lui aura une aide et pas des moindre oui !
Pas de contradiction, c'est toi qui à mal lus !

De plus c'est une rumeur pour le Futur Visual Designer.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Ar-S
Messages : 9471
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: VB to PB

Message par Ar-S »

Tu nous parle de VB2PB, faut remonter plus haut pour lire ton histoire de Designer en effet.
ça n'a rien à voir avec ton produit donc bon... Pas évident de te suivre.
De plus c'est une rumeur pour le Futur Visual Designer.
Mais WTF... Puis je te demander d'arrêter avec ces mystères dont tout le monde se fout ?... "Une personne inconnue mais pas des moindres"; "une rumeur"....
On est pas dans les feux de l'amour. S'il te plait. Reste simple dans tes propos et vas au but.
ça évitera ce genre de confusion.
~~~~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
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VB to PB

Message par Shadow »

Salutation, bien, du temps à passer et de l'eau à coulé sous les pond ! :)

J'ai revue mon programme et je l'ai amélioré, il est toujours aussi efficace mais il y avais des bugs, que j'ai corrigé :D
Mon site n'est plus car je n'y allais jamais, dommage.

Pour ceux qui le peuvent, je vous encourage à tester ou re tester le logiciel !
Voici le lien de téléchargement de la dernière version, une aide est disponible en anglais et français et je vous encourage à la lire
et le logiciel est proposer en 2 langue, français par défaut et anglais, très simple d'utilisation.

Je rappel que ce programme permet de convertir un code du Visual designer de Microsoft Visual Basic Express vers du PureBasic !

Oui, ce programme que j'ai fais entièrement seule m'as demander énormément de temps, et je pensais même pas pouvoir réaliser ce genre de chose.
J'ai dû utiliser du code récursif ce qui n'est pas évident mais la meilleurs façon d'arriver au résultat voulue.
Mais c'était une belle aventure et j'ai continuer à faire évoluer le logiciel au court du temps.

https://drive.google.com/file/d/1_6TeUc ... sp=sharing
Dernière modification par Shadow le ven. 22/sept./2023 9:03, modifié 1 fois.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
boddhi
Messages : 569
Inscription : lun. 26/avr./2010 16:14
Localisation : N 48° 1' 33.6" / E 0° 36' 11.3"

Re: VB to PB

Message par boddhi »

Salut,

Bien que j'utilise quasi-exclusivement la lib DialogXML pour mes applications fenêtrées et ne recours donc pas à Visual Basic pour le design, j'ai téléchargé ton code afin de voir qu'elle était sa finalité et le tester avec l'un des fichiers de description d'interface fournis.

Et bien que je ne sois pas la cible d'une telle application, et donc inapte à apprécier sa pertinence, j'ai cru comprendre que son développement t'avait demandé beaucoup de temps et d'énergie donc les félicitations sont de mises surtout lorsqu'on arrive à mener à bien un projet complexe qui nous semble utile et intéressant. Car effectivement, ce n'est pas toujours une mince affaire que de convertir des données d'un environnement à un autre qui plus est quand le premier est basé sur de la POO et le second non.

En tant qu'autodidacte, même si je "tâte" du code par loisir depuis très longtemps, je suis loin d'être un excellent programmeur et me garderais bien de donner quelque leçon que ce soit.
Toutefois, j'aimerais te faire une ou deux remarques à considérer comme bienveillantes, constructives et sans jugements :wink: :)
Je tiens aussi à préciser que je n'ai pas particulièrement étudié ton code - ce n'était très certainement pas le but de sa mise à disposition - je l'ai simplement parcouru à la va-vite.

• Alors, d'abord, je t'avoue m'être fait un peu piéger par le titre de ton post et de ton application. En effet, tous deux laissent à penser qu'il s'agit d'un outil qui permet la conversion de code VB en PB, ce qui n'est pas tout à fait le cas. Il convertit juste le code d'interfaces VB en PB. Pourquoi ne pas le nommer 'VB Form To PB' ou 'VB UI To PB' par exemple ?
• Tu le mets à disposition pour qu'éventuellement d'autres puissent aussi l'améliorer. Pourquoi ne pas le déposer sur GitHub ? Les modifs apportés par d'autres utilisateurs pourraient te servir...
• En ce qui concerne ton code, il y a un très gros truc qui m'a "choqué", c'est la manière dont tu indexes tes Maps. Tu utilises des chaînes à rallonge comme index, ce qui n'est pas forcément idéal pour diverses raisons. Sache aussi que le AddMapElement() n'est absolument pas nécessaire (Quasiment tous mes codes utilisent des map et je n'ai jamais employé cette commande !)

Note que :

Code : Tout sélectionner

AddMapElement(MapCommentaireCodePB.s(), "#PB_Calendar_Maximum: Renvoie la date maximale que l'utilisateur peut choisir avec ce gadget (Remarque: la date sélectionnable n'est pas prise en charge sous Linux).")
MapCommentaireCodePB.s() = "#PB_Calendar_Maximum: Returns the maximum date that can be chosen with this gadget (Note: the selectable date is not supported on Linux)."
peut très bien être déclaré de la manière suivante :

Code : Tout sélectionner

MapCommentaireCodePB("#PB_Calendar_Maximum: Renvoie la date maximale que l'utilisateur peut choisir avec ce gadget (Remarque: la date sélectionnable n'est pas prise en charge sous Linux)."="#PB_Calendar_Maximum: Returns the maximum date that can be chosen with this gadget (Note: the selectable date is not supported on Linux).")
De même que la redondance de ".s" après MapCommentaireCodePB est inutile puisque la Map a déjà été typée antérieurement.

Ensuite, pour l'indexage de ta Map, pourquoi ne pas envisager un truc du genre :

Code : Tout sélectionner

Global NewMap MapCommentaireCodePB.s()
Procedure DefinitionLangage(ArgLangage.s="FR")
  ArgLangage=UCase(ArgLangage)
  Select ArgLangage
    Case "FR"
      MapCommentaireCodePB("TITRE_001")="Titre"
      MapCommentaireCodePB("TITRE_002")="Ouverture fichier"
      MapCommentaireCodePB("TITRE_003")="Sauvegarde fichier"
      MapCommentaireCodePB("INFO_001")="#PB_Calendar_Maximum: Renvoie la date maximale que l'utilisateur peut choisir avec ce gadget (Remarque: la date sélectionnable n'est pas prise en charge sous Linux)."
      MapCommentaireCodePB("INFO_002")="#PB_Calendar_Minimum: Renvoie la date minimale que l'utilisateur peut choisir."
      ; ... etc
    Case "EN"
      MapCommentaireCodePB("TITRE_001")="Title"
      MapCommentaireCodePB("TITRE_002")="Open file"
      MapCommentaireCodePB("TITRE_003")="Save file"
      MapCommentaireCodePB("INFO_001")="#PB_Calendar_Maximum: Returns the maximum date that can be chosen with this gadget (Note: the selectable date is not supported on Linux)."
      MapCommentaireCodePB("INFO_002")="#PB_Calendar_Minimum: Returns the minimum date that the user can choose."
      ; ... etc
  EndSelect
EndProcedure

Langage$="FR"
DefinitionLangage(Langage$)
MessageRequester(MapCommentaireCodePB("TITRE_001"),MapCommentaireCodePB("INFO_001"))
Langage$="EN"
DefinitionLangage(Langage$)
MessageRequester(MapCommentaireCodePB("TITRE_001"),MapCommentaireCodePB("INFO_001"))
Tu remplaces les INDEX_001,INFO_001, etc par des index qui te sembleront plus parlants tout en faisant en sorte qu'ils ne soient pas trop longs.
Tu y gagnerais probablement en compacité et en lisibilité.

• Dernier point que je sais clivant et qui risque peut-être de m'attirer quelques animosités mais qui a quand même son importance et dont je te fais part de manière amicale : C'est l'orthographe, Il y a beaucoup de fautes dans tes chaînes de texte or, lorsque tu distribues un logiciel, c'est un aspect essentiel à soigner. Si une coquille, ça et là, est "excusable", trop de fautes peuvent rebuter. Je ne saurais que te conseiller de demander l'aide de quelqu'un à ce sujet. Un correcteur orthographique peut aussi aider :wink:
Je précise qu'il n'y a aucune honte à faire des fautes. Nos plus grands écrivains français en faisaient/font énormément à tel point que leur maison d'édition faisait/font systématiquement appel à des correcteurs. Et ceci est vrai pour de nombreux corps de métiers et dans de nombreux domaines (écrivains, journalistes, éditeurs de jeux, etc.)
CQFD.

Voilà.
En toute bienveillance.
Cdlt
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VB to PB

Message par Shadow »

Petite mise à jour car y avais un oublie dans le code.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VB to PB

Message par Shadow »

Bonjour boddhi :)

Je te remercie pour t'es remarque constructive et je ne prends rien mal, du moment que c'est dit gentiment comme ici :) :wink:
Je prends bien note des t'es remarques, je suis très ouvert, il faut juste que je trouves le temps et le courage de les implémenté ^^
; Note TODO: Changer le nom du logiciel en par exemple: "VB-UI To PB-Code" ou "VB-Form To PB-Code"
; Corriger les fautes d'orthographe.
; Mettre le logiciel sur GitHub Gratuitement en Open-Source en accès libre pour que d'autres puisse l'amélioré .
; Revoir le code des Maps: Voir le message de "boddhi" sur le Forum français PB.
Oui tu as raison pour le Nom du logiciel, je ferais ce changement car c'est vraie ce que tu dis.

Encore merci pour pour tes conseilles et ta bienveillance.
Cordialement.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VB to PB

Message par Shadow »

Nouvelle Version disponible !

Version (1.18.24) le 22/09/2023: https://drive.google.com/file/d/1_6TeUc ... sp=sharing

-> Ajouts des commentaires Français et Anglais manquant dans la Map de Langage pour le Gadget StringGadget et SpinGadget.

-> Corrigé une erreur qui traduisait par erreur en anglais le message d'avertissement
-- pour quitter le programme dans le code de génération du programme.

-> Correction et Vérification de toutes les chaînes de texte dans la Map des langage ainsi que certains commentaire
-- dans le code pour s'assurer que tous sois bien traduit en anglais si le programme est en anglais.

-> Ajout d'une procédure pour traiter et traduire en anglais si le programme est en anglais, les doubles commentaire
-- sur une ligne qui n'était pas traduit car le commentaire entier n'était pas trouvé dans la Map.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
boddhi
Messages : 569
Inscription : lun. 26/avr./2010 16:14
Localisation : N 48° 1' 33.6" / E 0° 36' 11.3"

Re: VB to PB

Message par boddhi »

Pour illustrer mes propos relatifs à l'utilisation de maps pour la gestion de tes chaînes de textes,
Je me suis permis de revisiter ta procédure principale FenetreVBToPB().

Remplace-la intégralement en lieu et place par le code ci-dessous :

Code : Tout sélectionner

Global NewMap MapLibellesObjectsUI.s()
Procedure DefinitionLangageObjetsUI(ArgLangage.s="")
  ArgLangage=UCase(ArgLangage)
  Select ArgLangage
    Case "EN","ENGLISH"
      MapLibellesObjectsUI("MENU-TITRE-FICHIER")="File"
      MapLibellesObjectsUI("MENU-ITEM-OUVRIR")="Open"+Chr(9)+"Ctrl+O"
      MapLibellesObjectsUI("MENU-ITEM-QUITTER")="Exit"+Chr(9)+"Ctrl+F"
      MapLibellesObjectsUI("MENU-TITRE-PREFS")="Preférences"
      MapLibellesObjectsUI("MENU-ITEM-PREFS")="Preférences"
      MapLibellesObjectsUI("MENU-TITRE-AIDE")="Help"
      MapLibellesObjectsUI("MENU-ITEM-AIDE")="Help..."
      MapLibellesObjectsUI("MENU-ITEM-APROPOS")="About..."
      MapLibellesObjectsUI("MENU-ITEM-COLLER")="Paste"
      MapLibellesObjectsUI("MENU-ITEM-OUVRIRTOUS")="Open All Parent Elements"
      MapLibellesObjectsUI("MENU-ITEM-FERMERTOUS")="Close All Parent Elements"
      MapLibellesObjectsUI("MENU-ITEM-CONVERTIR")="Convert the code to Pure Basic...."
      MapLibellesObjectsUI("MENU-ITEM-COPIER")="Copy"
      MapLibellesObjectsUI("GADGET-INFO")="Information"
      MapLibellesObjectsUI("GADGET-AVERTISSEMENT")="Warning"
      MapLibellesObjectsUI("GADGET-ERREUR")="Error"
      MapLibellesObjectsUI("GADGET-CODE")="Code"
      MapLibellesObjectsUI("MESSAGE-QUITTER")="Are you sure you want to Exit ? "
      MapLibellesObjectsUI("FENETRE-PREFERENCES")="Preferences VB to PB..."
      MapLibellesObjectsUI("GADGET-LANGUE")="Program Language:"
      MapLibellesObjectsUI("GADGET-ITEM-LANGUEFR")="French"
      MapLibellesObjectsUI("GADGET-ITEM-LANGUEEN")="English"
      MapLibellesObjectsUI("GADGET-CODEENUMERATIONS")="Generate PB Constants Enumeration Code"
      MapLibellesObjectsUI("GADGET-CODEGADGETS")="Generate Code for each Gadget to create on window"
      MapLibellesObjectsUI("GADGET-CODECOMMENTAIRES")="Generate Comment Code for each Gadget"
      MapLibellesObjectsUI("GADGET-CODEPOLICES")="Generate Font and Color Code for each Gadget"
      MapLibellesObjectsUI("GADGET-CODECOULEURS")="Generate Code to Customize Gadget Item Colors"
      MapLibellesObjectsUI("GADGET-CODEBOUCLEEVENTS")="Generate Code for Window Event Loop"
      MapLibellesObjectsUI("GADGET-CODEEVENTSFENETRE")="Generate Window Event Code"
      MapLibellesObjectsUI("GADGET-CODEEVENTSGADGETS")="Generate Event Code for each Gadget"
      MapLibellesObjectsUI("GADGET-CODEEVENTSTYPE")="Generate EventType Code for each Gadget"
      MapLibellesObjectsUI("GADGET-CODEGETGADGET")="Generate GetGadget...() Code for each Gadget"
      MapLibellesObjectsUI("GADGET-CODEEVENTSMENUS")="Generate Menu Events Code"
      MapLibellesObjectsUI("GADGET-CODECOORDFENETRE")="Generate Window Position and Size Save Code"
      MapLibellesObjectsUI("GADGET-CODEAVERTISSEMENT")="Generate Program Exit Warning Code"
      MapLibellesObjectsUI("GADGET-CODECOMPRESSION")="Condense Code a Maximum to save space"
      MapLibellesObjectsUI("GADGET-CODELIGNESVIDES")="Generate Empty Lines to Aerate Code"
      MapLibellesObjectsUI("GADGET-ANNULER")="Cancel"
      MapLibellesObjectsUI("GADGET-VALIDER")="Validate"
      MapLibellesObjectsUI("INFOBULLE-CODECOORDFENETRE")="Generates the Code that allows you to Save the Position and Size of the Window in a File when the Program is Quit."
      MapLibellesObjectsUI("INFOBULLE-CODEFERMETUREFENETRE")="Generates the Code that notifies the User when he wants to Quit the Program."
      MapLibellesObjectsUI("INFOBULLE-CODECOMPRESSION")="Gather on the same Line the Command and the Comment to Condense the code."
      MapLibellesObjectsUI("INFOBULLE-CODELIGNESVIDES")="Adds Empty Lines in the Code between the Groups of elements constituting it"
      MapLibellesObjectsUI("INFOBULLE-CODECOMMENTAIRES")="Add Comments on each Gadget to know what it corresponds to"
      MapLibellesObjectsUI("INFOBULLE-CODEBOUCLEEVENTS")="Create a window-specific event loop that governs all other events (window, gadget, menu, warning)."
      MapLibellesObjectsUI("INFOBULLE-CODEEVENTSMENUS")="Create Event Code to Interact with Menus"
      MapLibellesObjectsUI("INFOBULLE-CODEEVENTSTYPE")="Create Gadget Event Type Code to Interact More With Them"
      MapLibellesObjectsUI("INFOBULLE-CODEGETGADGET")="Adding Commands to retrieve information about Gadgets"
      MapLibellesObjectsUI("INFOBULLE-CODEEVENTSGADGETS")="Create Event Code to Interact with Gadgets"
      MapLibellesObjectsUI("INFOBULLE-CODEEVENTSFENETRE")="Create Event Code to Interact with the Window"
      MapLibellesObjectsUI("INFOBULLE-CODEGADGETS")="Generates the Code of each Gadget to create them on the window"
      MapLibellesObjectsUI("INFOBULLE-CODEENUMERATIONS")="Create the Identifier Enumeration Code of each Gadget"
      MapLibellesObjectsUI("INFOBULLE-CODEPOLICES")="Add Commands to Customize Font and Gadget Colors"
      MapLibellesObjectsUI("INFOBULLE-CODECOULEURS")="Add Commands to Customize Gadget Items Colors"
      MapLibellesObjectsUI("FICHIER-AIDE")="Aide\Help VB to PB.chm"
      MapLibellesObjectsUI("MESSAGE-TITREAPROPOS")="About the Author ..."
      MapLibellesObjectsUI("MESSAGE-APROPOS")=~"    This program was directed by Mister:\n    Diepedalle David on 28/06/2019.\n\n    This program is used to convert the code of the editor\n    Visual Basic.Net Visual in Pure Basic Code!\n\n    Acknowledgments:\n    Microsoft Visual Basic 2010 VBExpress (Test, Icons)\n    Thomas <ts-soft> Schulz for are Bin2Data Software.\n    https://www.deepl.com for the French to English translation\n    https://translate.google.com for the French to English translation"
      MapLibellesObjectsUI("MESSAGE-CODEINEXPLOITABLE")="    There is valid code in clipboard !"
      MapLibellesObjectsUI("MESSAGE-CODEVIDE")="    There is no code in clipboard !"
      MapLibellesObjectsUI("MESSAGE-REDEMARRAGE")=~"The program will restart for\napply the new language !"
      MapLibellesObjectsUI("MESSAGE-ERREURLECTURECODE")="Unable to read file code !"
    Default
      MapLibellesObjectsUI("MENU-TITRE-FICHIER")="Fichier"
      MapLibellesObjectsUI("MENU-ITEM-OUVRIR")="Ouvrir"+Chr(9)+"Ctrl+O"
      MapLibellesObjectsUI("MENU-ITEM-QUITTER")="Quitter"+Chr(9)+"Ctrl+F"
      MapLibellesObjectsUI("MENU-TITRE-PREFS")="Préférences"
      MapLibellesObjectsUI("MENU-ITEM-PREFS")="Préférences"
      MapLibellesObjectsUI("MENU-TITRE-AIDE")="Aide"
      MapLibellesObjectsUI("MENU-ITEM-AIDE")="Aide..."
      MapLibellesObjectsUI("MENU-ITEM-APROPOS")="A Propos..."
      MapLibellesObjectsUI("MENU-ITEM-COLLER")="Coller"
      MapLibellesObjectsUI("MENU-ITEM-OUVRIRTOUS")="Ouvrir Tous les éléments du Parent"
      MapLibellesObjectsUI("MENU-ITEM-FERMERTOUS")="Fermer Tous les éléments du Parent"
      MapLibellesObjectsUI("MENU-ITEM-CONVERTIR")="Convertir le code en Pure Basic..."
      MapLibellesObjectsUI("MENU-ITEM-COPIER")="Copier"
      MapLibellesObjectsUI("GADGET-INFO")="Information"
      MapLibellesObjectsUI("GADGET-AVERTISSEMENT")="Avertissement"
      MapLibellesObjectsUI("GADGET-ERREUR")="Erreur"
      MapLibellesObjectsUI("GADGET-CODE")="Code"
      MapLibellesObjectsUI("MESSAGE-QUITTER")="Etes-vous sûr de vouloir quitter ?"
      MapLibellesObjectsUI("FENETRE-PREFERENCES")="Préférences VB to PB..."
      MapLibellesObjectsUI("GADGET-LANGUE")="Langue du Programme:"
      MapLibellesObjectsUI("GADGET-ITEM-LANGUEFR")="Français"
      MapLibellesObjectsUI("GADGET-ITEM-LANGUEEN")="Anglais"
      MapLibellesObjectsUI("GADGET-CODEENUMERATIONS")="Génèrer le Code d'Enumeration des Constantes PB"
      MapLibellesObjectsUI("GADGET-CODEGADGETS")="Générer le Code de chaque Gadgets pour les créer sur la fenêtre"
      MapLibellesObjectsUI("GADGET-CODECOMMENTAIRES")="Générer le Code des Commentaires de chaque Gadget"
      MapLibellesObjectsUI("GADGET-CODEPOLICES")="Générer le Code des Polices et des Couleurs de chaque Gadgets"
      MapLibellesObjectsUI("GADGET-CODECOULEURS")="Générer le Code pour Personnaliser les Couleurs des Items des Gadgets"
      MapLibellesObjectsUI("GADGET-CODEBOUCLEEVENTS")="Générer le Code de la Boucle des Evenements de la fenêtre"
      MapLibellesObjectsUI("GADGET-CODEEVENTSFENETRE")="Générer le Code des Evenements de la Fenêtre"
      MapLibellesObjectsUI("GADGET-CODEEVENTSGADGETS")="Générer le Code des Evenements de chaque Gadgets"
      MapLibellesObjectsUI("GADGET-CODEEVENTSTYPE")="Générer le Code des Evenements EventType de chaque Gadget"
      MapLibellesObjectsUI("GADGET-CODEGETGADGET")="Générer le Code GetGadget...() de chaque Gadgets"
      MapLibellesObjectsUI("GADGET-CODEEVENTSMENUS")="Générer le Code des Evenements des Menus"
      MapLibellesObjectsUI("GADGET-CODECOORDFENETRE")="Générer le Code de Sauvegarde de Position et de Taille de la Fenêtre"
      MapLibellesObjectsUI("GADGET-CODEAVERTISSEMENT")="Générer le Code d'Avertissement pour Quitter le Programme"
      MapLibellesObjectsUI("GADGET-CODECOMPRESSION")="Condenser le Code un Maximum pour gagner de la place"
      MapLibellesObjectsUI("GADGET-CODELIGNESVIDES")="Générer des Lignes Vides pour Aérer le Code"
      MapLibellesObjectsUI("GADGET-ANNULER")="Annuler"
      MapLibellesObjectsUI("GADGET-VALIDER")="Valider"
      MapLibellesObjectsUI("INFOBULLE-CODECOORDFENETRE")="Génère le Code qui permet de Sauvegarder dans un Fichier la Position et la Taille de la Fenêtre quand le Programme est Quitter."
      MapLibellesObjectsUI("INFOBULLE-CODEFERMETUREFENETRE")="Génère le Code qui Avertis l'Utilisateur quand il veux Quitter le Programme."
      MapLibellesObjectsUI("INFOBULLE-CODECOMPRESSION")="Rassemble sur une même Ligne la Commande ainsi que le Commentaire pour Condencer le code."
      MapLibellesObjectsUI("INFOBULLE-CODELIGNESVIDES")="Ajoute des Lignes Vides dans le Code entre les Groupe d'éléments le constituant."
      MapLibellesObjectsUI("INFOBULLE-CODECOMMENTAIRES")="Ajoute des Commentaires pour chaque Gadget pour savoir à quoi cela correspont."
      MapLibellesObjectsUI("INFOBULLE-CODEBOUCLEEVENTS")="Créer la Boucle d'Evenements propre à la fenêtre, ceci régie tous les autres Evenements (Fenêtre, Gadget, Menue, Avertissement)"
      MapLibellesObjectsUI("INFOBULLE-CODEEVENTSMENUS")="Créer le Code des Evenements permetant d'Interagir avec les Menus."
      MapLibellesObjectsUI("INFOBULLE-CODEEVENTSTYPE")="Créer le Code des Types des Evenements des Gadgets pour Interagir d'avantage avec eux."
      MapLibellesObjectsUI("INFOBULLE-CODEGETGADGET")="Ajoute des Commandes permetant de récupérer des informations sur les Gadgets."
      MapLibellesObjectsUI("INFOBULLE-CODEEVENTSGADGETS")="Créer le Code des Evenements permetant d'Interagir avec les Gadgets."
      MapLibellesObjectsUI("INFOBULLE-CODEEVENTSFENETRE")="Créer le Code des Evenements permetant d'Interagir avec la Fenêtre."
      MapLibellesObjectsUI("INFOBULLE-CODEGADGETS")="Génère le Code de chaque Gadget permetant de les créer sur la fenêtre."
      MapLibellesObjectsUI("INFOBULLE-CODEENUMERATIONS")="Créer le Code d'Enumération des Identifiants de chaque Gadget."
      MapLibellesObjectsUI("INFOBULLE-CODEPOLICES")="Ajoute des Commandes pour Personnaliser la Police et les Couleurs des Gadgets"
      MapLibellesObjectsUI("INFOBULLE-CODECOULEURS")="Ajoute des Commandes pour Personnaliser les Couleurs des Items des Gadgets"
      MapLibellesObjectsUI("FICHIER-AIDE")="Aide\Aide VB to PB.chm"
      MapLibellesObjectsUI("MESSAGE-TITREAPROPOS")="A propos de l'auteur..."
      MapLibellesObjectsUI("MESSAGE-APROPOS")=~"    Ce programme a été réalisé par Monsieur:\n    Diepedalle David le 28/06/2019.\n\n    Ce programme permet de convertir le code de l'éditeur\n    Visuel de Visual Basic.Net en Code Pure Basic !\n\n    Remerciements:\n    Microsoft Visual Basic 2010 VBExpress (Test, Icônes)\n    Thomas <ts-soft> Schulz pour sont Logiciel Bin2Data.\n    https://www.deepl.com pour la traduction Français > Anglais\n    https://translate.google.com pour la traduction Français > Anglais"
      MapLibellesObjectsUI("MESSAGE-CODEINEXPLOITABLE")="    Il n'y a pas de code exploitable dans le PressePapier !"
      MapLibellesObjectsUI("MESSAGE-CODEVIDE")="    Il n'y a pas de code dans le PressePapier !"
      MapLibellesObjectsUI("MESSAGE-REDEMARRAGE")=~"Le programme va redémarer pour\n    appliquer la nouvelle langue !"
      MapLibellesObjectsUI("MESSAGE-ERREURLECTURECODE")="Impossible de lire le fichier de code !"
  EndSelect
EndProcedure
Procedure FenetreVBToPB()
  IsDirectory(CreateDirectory("Paramètres"))
  OpenPreferences("Paramètres\Préférences.txt")
  PreferenceGroup("WindowsMain")
  WindowX.i=ReadPreferenceInteger("WindowsX",327)
  WindowY.i=ReadPreferenceInteger("WindowsY",177)
  WindowWidth.i=ReadPreferenceInteger("WindowsWidth",800)
  WindowHeight.i=ReadPreferenceInteger("WindowsHeight",600)
  WindowFlags.i=ReadPreferenceInteger("WindowsFlags",0)
  PreferenceGroup("WindowsPreferences")
  GenereCodeCouleursGadgetItem.b=ReadPreferenceInteger("GenereCodeCouleursGadgetItem",1)
  GenereCodePoliceEtCouleursGadget.b=ReadPreferenceInteger("GenereCodePoliceEtCouleursGadget",1)
  CompresseCode.b=ReadPreferenceInteger("CompresseCode",1)
  GenereCodeLigneVide.b=ReadPreferenceInteger("GenereCodeLigneVide",1)
  GenereCodeCommentaire.b=ReadPreferenceInteger("GenereCodeCommentaire",1)
  GenereCodeBoucleEvenement.b=ReadPreferenceInteger("GenereCodeBoucleEvenement",1)
  GenereCodeEvenementMenu.b=ReadPreferenceInteger("GenereCodeEvenementMenu",1)
  GenereCodeEventTypeGadget.b=ReadPreferenceInteger("GenereCodeEventTypeGadget",1)
  GenereCodeGetGadgetGadget.b=ReadPreferenceInteger("GenereCodeGetGadgetGadget",1)
  GenereCodeEvenementGadget.b=ReadPreferenceInteger("GenereCodeEvenementGadget",1)
  GenereCodeEvenementFenetre.b=ReadPreferenceInteger("GenereCodeEvenementFenetre",1)
  GenereCodeGadget.b=ReadPreferenceInteger("GenereCodeGadget",1)
  GenereCodeEnumerationConstantes.b=ReadPreferenceInteger("GenereCodeEnumerationConstantes",1)
  GenereCodeAvertissementQuitterProgramme.b=ReadPreferenceInteger("GenereCodeAvertissementQuitterProgramme",1)
  GenereCodeSauvegardePositionEtTailleFenetre.b=ReadPreferenceInteger("GenereCodeSauvegardePositionEtTailleFenetre",1)
  PreferenceGroup("Langage")
  Langage$=ReadPreferenceString("Langage","Français")
  
  ; ////////////////////////////
  ;Langage$="Français"
  Langage$="English"
  MessageRequester("Choix de la langue","Modifier le choix de la langue aux lignes "+Str(#PB_Compiler_Line-2)+" & "+Str(#PB_Compiler_Line-1))
  DefinitionLangageObjetsUI(Langage$)
  ; ////////////////////////////
  
  
  ClosePreferences()
  Select WindowFlags.i
    Case 0:
      WindowFlags.i=#PB_Window_Normal
    Case 1:
      WindowFlags.i=#PB_Window_Maximize
    Default:
      WindowFlags.i=#PB_Window_Normal
  EndSelect
  WindowFlags.i=#PB_Window_SystemMenu|WindowFlags.i|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget
  
  
  If OpenWindow(#FenetreVBToPB,WindowX.i,WindowY.i,WindowWidth.i,WindowHeight.i,"VB To PB - V"+VersionProgramme$,WindowFlags.i)
    WindowBounds(#FenetreVBToPB,400,300,#PB_Ignore,#PB_Ignore)
    ; Menu.
    If CreateImageMenu(#Menu,WindowID(#FenetreVBToPB))
      MenuTitle(MapLibellesObjectsUI("MENU-TITRE-FICHIER"))
      MenuItem(#Menu_Ouvrir,MapLibellesObjectsUI("MENU-ITEM-OUVRIR"),ImageID(Image_Ouvrir.i))
      MenuBar()
      MenuItem(#Menu_Quitter,MapLibellesObjectsUI("MENU-ITEM-QUITTER"),ImageID(Image_Quitter.i))
      MenuTitle(MapLibellesObjectsUI("MENU-TITRE-PREFS"))
      MenuItem(#Menu_Preferences,MapLibellesObjectsUI("MENU-ITEM-PREFS"),ImageID(Image_Prfrences.i))
      MenuTitle(MapLibellesObjectsUI("MENU-TITRE-AIDE"))
      MenuItem(#Menu_Aide,MapLibellesObjectsUI("MENU-ITEM-AIDE"),ImageID(Image_Aide.i))
      MenuItem(#Menu_APropos,MapLibellesObjectsUI("MENU-ITEM-APROPOS"),ImageID(Image_A_Propos.i))
    EndIf
    ; Menu Contextuel Tree.
    If CreatePopupImageMenu(#MenuContextuelTree)
      MenuItem(#MenuContextuelTreeColler,MapLibellesObjectsUI("MENU-ITEM-COLLER"),ImageID(Image_Coller.i))
      MenuBar()
      MenuItem(#MenuContextuelTreeOuvrirTous,MapLibellesObjectsUI("MENU-ITEM-OUVRIRTOUS"),ImageID(Image_Ouvrir_tous.i))
      MenuItem(#MenuContextuelTreeFermerTous,MapLibellesObjectsUI("MENU-ITEM-FERMERTOUS"),ImageID(Image_Fermer_tous.i))
      MenuBar()
      MenuItem(#MenuContextuelTreeConvertirCode,MapLibellesObjectsUI("MENU-ITEM-CONVERTIR"),ImageID(Image_sourceicone910116.i))
    EndIf
    If CreatePopupImageMenu(#MenuContextuelCode)
      MenuItem(#MenuContextuelCodeCopier,MapLibellesObjectsUI("MENU-ITEM-COPIER"),ImageID(Image_Copier.i))
    EndIf
    AddKeyboardShortcut(#FenetreVBToPB,#PB_Shortcut_Control|#PB_Shortcut_O,#Menu_Ouvrir)
    AddKeyboardShortcut(#FenetreVBToPB,#PB_Shortcut_Control|#PB_Shortcut_F,#Menu_Quitter)
    TreeGadget(#TreeGadget,0,0,0,0)
    PanelGadget(#PanelGadget,0,0,0,0)
    AddGadgetItem(#PanelGadget,-1,MapLibellesObjectsUI("GADGET-INFO"),ImageID(Image_Information.i))
    EditorGadget(#EditorGadgetInformation,0,0,0,0,#PB_Editor_ReadOnly)
    AddGadgetItem(#PanelGadget,-1,MapLibellesObjectsUI("GADGET-AVERTISSEMENT"),ImageID(Image_Avertissement.i))
    EditorGadget(#EditorGadgetAvertissement,0,0,0,0,#PB_Editor_ReadOnly)
    AddGadgetItem(#PanelGadget,-1,MapLibellesObjectsUI("GADGET-ERREUR"),ImageID(Image_Erreur.i))
    EditorGadget(#EditorGadgetErreur,0,0,0,0,#PB_Editor_ReadOnly)
    AddGadgetItem(#PanelGadget,-1,MapLibellesObjectsUI("GADGET-CODE"),ImageID(Image_sourceicone910116.i))
    EditorGadget(#EditorGadgetCode,0,0,0,0,#PB_Editor_ReadOnly)
    SetGadgetColor(#EditorGadgetInformation,#PB_Gadget_FrontColor,RGB(0,150,0))
    SetGadgetColor(#EditorGadgetAvertissement,#PB_Gadget_FrontColor,RGB(255,100,0))
    SetGadgetColor(#EditorGadgetErreur,#PB_Gadget_FrontColor,RGB(200,0,0))
    SetGadgetColor(#EditorGadgetCode,#PB_Gadget_FrontColor,RGB(0,0,255))
    Repeat ; Départ des évènements de boucle.
      Event=WaitWindowEvent(1) ; Cette ligne attend pendent (Minuteur) qu'un évènement soit recus par la fenêtre.
      EventWindow=EventWindow(); La fenêtre oû l'évènement c'est produit.
      EventGadget=EventGadget(); Pour savoir sur quel gadget c'est produis l'évènement.
      EventMenu=EventMenu()    ; Pour savoir sur quel menue c'est produis l'évènement.
      EventType=EventType()    ; Le type d'évènement qui c'est produis sur le gadget.
      GestionMenuContextuelEditeur(#FenetreVBToPB,Event,#EditorGadgetCode,#MenuContextuelCode)
      Select EventWindow
        Case #FenetreVBToPB
          Select Event
            Case #PB_Event_Gadget
              Select EventGadget
                Case #TreeGadget
                  Select EventType
                    Case #PB_EventType_LeftClick
                      If SauvegardeElementCourant.i<>GetGadgetState(#TreeGadget)
                        SauvegardeElementCourant.i=GetGadgetState(#TreeGadget)
                        If GetGadgetItemData(#TreeGadget,GetGadgetState(#TreeGadget))=1
                          If FindMapElement(Gadgets.GadgetInformation(),GetGadgetItemText(#TreeGadget,GetGadgetState(#TreeGadget)))
                            NomGadget$=MapKey(Gadgets.GadgetInformation())
                            CodeEditeur$=""
                            ForEach Gadgets.GadgetInformation(NomGadget$)\Commande()
                              SelectElement(Gadgets.GadgetInformation(NomGadget$)\CommentaireCommande(),ListIndex(Gadgets.GadgetInformation(NomGadget$)\Commande()))
                              CodeEditeur$+Gadgets.GadgetInformation(NomGadget$)\CommentaireCommande()+Chr(13)+Chr(10)
                              CodeEditeur$+Gadgets.GadgetInformation(NomGadget$)\Commande()+Chr(13)+Chr(10)
                              CodeEditeur$+Chr(13)+Chr(10)
                            Next
                            If CodeEditeur$<>SauvegardeEditeurCode$
                              ClearGadgetItems(#EditorGadgetCode)
                              AddGadgetItem(#EditorGadgetCode,-1,CodeEditeur$)
                              SauvegardeEditeurCode$=CodeEditeur$
                            EndIf
                          EndIf
                        EndIf
                      EndIf
                    Case #PB_EventType_RightClick
                      DisplayPopupMenu(#MenuContextuelTree,WindowID(#FenetreVBToPB)) ; On affiche le menu contextuel du Tree.
                  EndSelect
              EndSelect
            Case #PB_Event_Menu
              Select EventMenu
                Case #Menu_Ouvrir
                  ; Lis et Nettoie le code, Recense tous les Gadgets ainsi que leurs Caractèristiques.
                  If LectureFichier()
                    SourceCode$="Fichier"
                    ClearGadgetItems(#EditorGadgetInformation)
                    ClearGadgetItems(#EditorGadgetAvertissement)
                    ClearGadgetItems(#EditorGadgetErreur)
                    NettoyageCode()
                    RecensementGadget()
                    DecoupageCode()
                    ChercheSplitContainerEnfants()
                    ReorganiseGadgetsEnfantFenetre()
                    ChercheProchainGadgets()
                    ReorganiseGadgetsEnfantGadgetParentSplitContainer()
                    AjoutCodeTreeFenetre()
                    ActualiseNomGadgetsReorganiserVB()
                    GenerationCodePB()
                  EndIf
                Case #Menu_Quitter
                  Quitter=MessageRequester(MapLibellesObjectsUI("GADGET-AVERTISSEMENT"),MapLibellesObjectsUI("MESSAGE-QUITTER"),52)
                  If Quitter=6 ; Oui
                    Quitter()
                  EndIf
                Case #Menu_Preferences
                  If OpenWindow(#FenetrePreferences,0,0,425,485,MapLibellesObjectsUI("FENETRE-PREFERENCES"), #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered) ; Code de la Fenêtre.
                    TextGadget(#TexteInfoLanguage,12,12,400,15,MapLibellesObjectsUI("GADGET-LANGUE"),#PB_Text_Center)                                                          ; TextGadget
                    ComboBoxGadget(#ComboBoxLangage,12,30,400,20)                                                                                               ; ComboBoxGadget
                    AddGadgetItem(#ComboBoxLangage,-1,MapLibellesObjectsUI("GADGET-ITEM-LANGUEFR"))
                    AddGadgetItem(#ComboBoxLangage,-1,MapLibellesObjectsUI("GADGET-ITEM-LANGUEEN"))
                    SetGadgetState(#ComboBoxLangage,0)
                    CheckBoxGadget(#CheckBoxGenereCodeEnumerationConstantes,12,66,400,17,MapLibellesObjectsUI("GADGET-CODEENUMERATIONS"),0)         ; CheckBoxGadget.
                    CheckBoxGadget(#CheckBoxGenereCodeGadget,12,90,400,17,MapLibellesObjectsUI("GADGET-CODEGADGETS"),0)        ; CheckBoxGadget.
                    CheckBoxGadget(#CheckBoxGenereCodeCommentaire,12,114,400,17,MapLibellesObjectsUI("GADGET-CODECOMMENTAIRES"),0)                ; CheckBoxGadget.
                    CheckBoxGadget(#CheckBoxGenereCodePoliceEtCouleursGadget,12,138,400,17,MapLibellesObjectsUI("GADGET-CODEPOLICES"),0)   ; CheckBoxGadget.
                    CheckBoxGadget(#CheckBoxGenereCodeCouleursGadgetItem,12,162,400,17,MapLibellesObjectsUI("GADGET-CODECOULEURS"),0) ; CheckBoxGadget.
                    CheckBoxGadget(#CheckBoxGenereCodeBoucleEvenement, 12,186,400,17,MapLibellesObjectsUI("GADGET-CODEBOUCLEEVENTS"),0)               ; CheckBoxGadget.
                    CheckBoxGadget(#CheckBoxGenereCodeEvenementFenetre,12,210,400,17,MapLibellesObjectsUI("GADGET-CODEEVENTSFENETRE"),0)                            ; CheckBoxGadget.
                    CheckBoxGadget(#CheckBoxGenereCodeEvenementGadget,12,234,400,17,MapLibellesObjectsUI("GADGET-CODEEVENTSGADGETS"),0)                         ; CheckBoxGadget.
                    CheckBoxGadget(#CheckBoxGenereCodeEventTypeGadget,12,258,400,17,MapLibellesObjectsUI("GADGET-CODEEVENTSTYPE"),0)                ; CheckBoxGadget.
                    CheckBoxGadget(#CheckBoxGenereCodeGetGadgetGadget,12,282,400,17,MapLibellesObjectsUI("GADGET-CODEGETGADGET"),0)                         ; CheckBoxGadget.
                    CheckBoxGadget(#CheckBoxGenereCodeEvenementMenu,12,306,400,17,MapLibellesObjectsUI("GADGET-CODEEVENTSMENUS"),0)                                   ; CheckBoxGadget.
                    CheckBoxGadget(#CheckBoxGenereCodeSauvegardeFenetre,12,330,400,17,MapLibellesObjectsUI("GADGET-CODECOORDFENETRE"),0)   ; CheckBoxGadget.
                    CheckBoxGadget(#CheckBoxGenereCodeQuitterProgramme,12,354,400,17,MapLibellesObjectsUI("GADGET-CODEAVERTISSEMENT"),0)               ; CheckBoxGadget.
                    CheckBoxGadget(#CheckBoxCompresseCode,12,378,400,17,MapLibellesObjectsUI("GADGET-CODECOMPRESSION"),0)                                  ; CheckBoxGadget.
                    CheckBoxGadget(#CheckBoxGenereCodeLigneVide,12,402,400,17,MapLibellesObjectsUI("GADGET-CODELIGNESVIDES"),0)                                    ; CheckBoxGadget.
                    GadgetToolTip(#CheckBoxGenereCodeSauvegardeFenetre,MapLibellesObjectsUI("INFOBULLE-CODECOORDFENETRE"))
                    GadgetToolTip(#CheckBoxGenereCodeQuitterProgramme,MapLibellesObjectsUI("INFOBULLE-CODEFERMETUREFENETRE"))
                    GadgetToolTip(#CheckBoxCompresseCode,MapLibellesObjectsUI("INFOBULLE-CODECOMPRESSION"))
                    GadgetToolTip(#CheckBoxGenereCodeLigneVide,MapLibellesObjectsUI("INFOBULLE-CODELIGNESVIDES"))
                    GadgetToolTip(#CheckBoxGenereCodeCommentaire,MapLibellesObjectsUI("INFOBULLE-CODECOMMENTAIRES"))
                    GadgetToolTip(#CheckBoxGenereCodeBoucleEvenement,MapLibellesObjectsUI("INFOBULLE-CODEBOUCLEEVENTS"))
                    GadgetToolTip(#CheckBoxGenereCodeEvenementMenu,MapLibellesObjectsUI("INFOBULLE-CODEEVENTSMENUS"))
                    GadgetToolTip(#CheckBoxGenereCodeEventTypeGadget,MapLibellesObjectsUI("INFOBULLE-CODEEVENTSTYPE"))
                    GadgetToolTip(#CheckBoxGenereCodeGetGadgetGadget,MapLibellesObjectsUI("INFOBULLE-CODEGETGADGET"))
                    GadgetToolTip(#CheckBoxGenereCodeEvenementGadget,MapLibellesObjectsUI("INFOBULLE-CODEEVENTSGADGETS"))
                    GadgetToolTip(#CheckBoxGenereCodeEvenementFenetre,MapLibellesObjectsUI("INFOBULLE-CODEEVENTSFENETRE"))
                    GadgetToolTip(#CheckBoxGenereCodeGadget,MapLibellesObjectsUI("INFOBULLE-CODEGADGETS"))
                    GadgetToolTip(#CheckBoxGenereCodeEnumerationConstantes,MapLibellesObjectsUI("INFOBULLE-CODEENUMERATIONS"))
                    GadgetToolTip(#CheckBoxGenereCodePoliceEtCouleursGadget,MapLibellesObjectsUI("INFOBULLE-CODEPOLICES"))
                    GadgetToolTip(#CheckBoxGenereCodeCouleursGadgetItem,MapLibellesObjectsUI("INFOBULLE-CODECOULEURS"))
                    ButtonGadget(#ButtonAnnulerPreferences,208,434,91,35,MapLibellesObjectsUI("GADGET-ANNULER"),0) ; Bouton.
                    ButtonGadget(#ButtonValiderPreferences,110,434,88,35,MapLibellesObjectsUI("GADGET-VALIDER"),0) ; Bouton.
                    SetGadgetState(#CheckBoxCompresseCode,CompresseCode.b)
                    SetGadgetState(#CheckBoxGenereCodeLigneVide,GenereCodeLigneVide.b)
                    SetGadgetState(#CheckBoxGenereCodeCommentaire,GenereCodeCommentaire.b)
                    SetGadgetState(#CheckBoxGenereCodeBoucleEvenement,GenereCodeBoucleEvenement.b)
                    SetGadgetState(#CheckBoxGenereCodeEvenementMenu,GenereCodeEvenementMenu.b)
                    SetGadgetState(#CheckBoxGenereCodeEventTypeGadget,GenereCodeEventTypeGadget.b)
                    SetGadgetState(#CheckBoxGenereCodeGetGadgetGadget,GenereCodeGetGadgetGadget.b)
                    SetGadgetState(#CheckBoxGenereCodeEvenementGadget,GenereCodeEvenementGadget.b)
                    SetGadgetState(#CheckBoxGenereCodeEvenementFenetre,GenereCodeEvenementFenetre.b)
                    SetGadgetState(#CheckBoxGenereCodeGadget,GenereCodeGadget.b)
                    SetGadgetState(#CheckBoxGenereCodeEnumerationConstantes,GenereCodeEnumerationConstantes.b)
                    SetGadgetState(#CheckBoxGenereCodePoliceEtCouleursGadget,GenereCodePoliceEtCouleursGadget.b)
                    SetGadgetState(#CheckBoxGenereCodeCouleursGadgetItem,GenereCodeCouleursGadgetItem.b)
                    SetGadgetState(#CheckBoxGenereCodeQuitterProgramme,GenereCodeAvertissementQuitterProgramme.b)
                    SetGadgetState(#CheckBoxGenereCodeSauvegardeFenetre,GenereCodeSauvegardePositionEtTailleFenetre.b)
                    DisableWindow(#FenetreVBToPB,#True)
                  EndIf
                  If GetGadgetState(#CheckBoxGenereCodeBoucleEvenement)=#True
                    DisableGadget(#CheckBoxGenereCodeEvenementFenetre,#False)
                    DisableGadget(#CheckBoxGenereCodeEvenementGadget,#False)
                    DisableGadget(#CheckBoxGenereCodeEventTypeGadget,#False)
                    DisableGadget(#CheckBoxGenereCodeGetGadgetGadget,#False)
                    DisableGadget(#CheckBoxGenereCodeEvenementMenu,#False)
                    DisableGadget(#CheckBoxGenereCodeQuitterProgramme,#False)
                    DisableGadget(#CheckBoxGenereCodeSauvegardeFenetre,#False)
                  ElseIf GetGadgetState(#CheckBoxGenereCodeBoucleEvenement)=#False
                    DisableGadget(#CheckBoxGenereCodeEvenementFenetre,#True)
                    DisableGadget(#CheckBoxGenereCodeEvenementGadget,#True)
                    DisableGadget(#CheckBoxGenereCodeEventTypeGadget,#True)
                    DisableGadget(#CheckBoxGenereCodeGetGadgetGadget,#True)
                    DisableGadget(#CheckBoxGenereCodeEvenementMenu,#True)
                    DisableGadget(#CheckBoxGenereCodeQuitterProgramme,#True)
                    DisableGadget(#CheckBoxGenereCodeSauvegardeFenetre,#True)
                  EndIf
                Case #Menu_Aide
                  OpenHelp(MapLibellesObjectsUI("FICHIER-AIDE"),"")
                Case #Menu_APropos
                  MessageRequester(MapLibellesObjectsUI("MESSAGE-TITREAPROPOS"),MapLibellesObjectsUI("MESSAGE-APROPOS"))
                Case #MenuContextuelTreeOuvrirTous ; Ouverture de tous les éléments du parent en dessous de celui séléctionné.
                  ItemSelect.i=GetGadgetState(#TreeGadget)
                  SubLevel.i=GetGadgetItemAttribute(#TreeGadget,ItemSelect.i,#PB_Tree_SubLevel)
                  ElementsSubLevel.i=0
                  Repeat
                    CheckSubLevel.i=GetGadgetItemAttribute(#TreeGadget,ItemSelect.i+1+ElementsSubLevel.i,#PB_Tree_SubLevel)
                    If CheckSubLevel.i<SubLevel.i
                      Break
                    EndIf
                    ElementsSubLevel.i+1
                  Until CheckSubLevel.i=SubLevel.i Or (ItemSelect.i+(ElementsSubLevel.i-1))=CountGadgetItems(#TreeGadget)
                  If ElementsSubLevel.i>0
                    For Element=ItemSelect.i To ItemSelect.i+(ElementsSubLevel.i-1)
                      SetGadgetItemState(#TreeGadget,Element,#PB_Tree_Expanded)
                    Next
                  EndIf
                Case #MenuContextuelTreeFermerTous ; Fermeture de tous les éléments du parent en dessous de celui séléctionné.
                  ItemSelect.i=GetGadgetState(#TreeGadget)
                  SubLevel.i=GetGadgetItemAttribute(#TreeGadget,ItemSelect.i,#PB_Tree_SubLevel)
                  ElementsSubLevel.i=0
                  Repeat
                    CheckSubLevel.i=GetGadgetItemAttribute(#TreeGadget,ItemSelect.i+1+ElementsSubLevel.i,#PB_Tree_SubLevel)
                    If CheckSubLevel.i<SubLevel.i
                      Break
                    EndIf
                    ElementsSubLevel.i+1
                  Until CheckSubLevel.i=SubLevel.i Or (ItemSelect.i+(ElementsSubLevel.i-1))=CountGadgetItems(#TreeGadget)
                  If ElementsSubLevel.i>0
                    For Element=ItemSelect.i To ItemSelect.i+(ElementsSubLevel.i-1)
                      SetGadgetItemState(#TreeGadget,Element,#PB_Tree_Collapsed)
                    Next
                  EndIf
                Case #MenuContextuelTreeConvertirCode
                  GenererCodePBPressePapier()
                Case #MenuContextuelCodeCopier
                  Select GetGadgetState(#PanelGadget)
                    Case 0
                      SetClipboardText(GetGadgetText(#EditorGadgetInformation))
                    Case 1
                      SetClipboardText(GetGadgetText(#EditorGadgetAvertissement))
                    Case 2
                      SetClipboardText(GetGadgetText(#EditorGadgetErreur))
                    Case 3
                      SetClipboardText(GetGadgetText(#EditorGadgetCode))
                  EndSelect
                Case #MenuContextuelTreeColler
                  SourceCode$="PressePapier"
                  CodeSource$=GetClipboardText()
                  If CodeSource$>""
                    MenuParent$=""
                    Premier.b=#True
                    IndexBarreStatus.i=0
                    IndexColonneListView.i=0
                    NomListBox$=""
                    NomListView$=""
                    NomComboBox$=""
                    NomTreeView$=""
                    NomMenu$=""
                    NomBarreOutils$=""
                    ClearList(NomGadgetsVB.s())
                    ClearList(NomGadgetsReorganiserVB.s())
                    ClearList(ConstantePB.s())
                    ClearList(CodeGadgetsPB.s())
                    ClearList(CodePB.s())
                    ClearList(CodeVB.s())
                    If MapSize(Gadgets())>0
                      ClearStructure(@Gadgets(),GadgetInformation)
                      ClearMap(Gadgets())
                    EndIf
                    ClearGadgetItems(#EditorGadgetInformation)
                    ClearGadgetItems(#EditorGadgetAvertissement)
                    ClearGadgetItems(#EditorGadgetErreur)
                    ClearGadgetItems(#TreeGadget)
                    For I=1 To CountString(CodeSource$,Chr(13)+Chr(10))+1
                      AddElement(CodeVB.s())
                      CodeVB.s()=StringField(CodeSource$,I,Chr(13)+Chr(10))
                    Next
                    NettoyageCode()
                    RecensementGadget()
                    If ListSize(NomGadgetsVB.s())>0
                      DecoupageCode()
                      ChercheSplitContainerEnfants()
                      ReorganiseGadgetsEnfantFenetre()
                      ChercheProchainGadgets()
                      ReorganiseGadgetsEnfantGadgetParentSplitContainer()
                      AjoutCodeTreeFenetre()
                      ActualiseNomGadgetsReorganiserVB()
                      GenerationCodePB()
                    Else
                      MessageRequester(MapLibellesObjectsUI("GADGET-INFO"),MapLibellesObjectsUI("MESSAGE-CODEINEXPLOITABLE"),64)
                    EndIf
                  Else
                    MessageRequester(MapLibellesObjectsUI("GADGET-INFO"),MapLibellesObjectsUI("MESSAGE-CODEVIDE"),64)
                  EndIf
              EndSelect
            Case #PB_Event_SizeWindow
              ResizeGadget(#TreeGadget,1,0,WindowWidth(#FenetreVBToPB)-2,WindowHeight(#FenetreVBToPB)-200-21)
              ResizeGadget(#PanelGadget,1,GadgetHeight(#TreeGadget)+1,WindowWidth(#FenetreVBToPB),200)
              ResizeGadget(#EditorGadgetInformation,0,0,GadgetWidth(#PanelGadget)-8,GadgetHeight(#PanelGadget)-27)
              ResizeGadget(#EditorGadgetAvertissement,0,0,GadgetWidth(#PanelGadget)-8,GadgetHeight(#PanelGadget)-27)
              ResizeGadget(#EditorGadgetErreur,0,0,GadgetWidth(#PanelGadget)-8,GadgetHeight(#PanelGadget)-27)
              ResizeGadget(#EditorGadgetCode,0,0,GadgetWidth(#PanelGadget)-8,GadgetHeight(#PanelGadget)-27)
              If GetWindowState(#FenetreVBToPB)=#PB_Window_Normal
                WindowWidth.i=WindowWidth(#FenetreVBToPB)
                WindowHeight.i=WindowHeight(#FenetreVBToPB)
                WindowFlags.i=0
              ElseIf GetWindowState(#FenetreVBToPB)=#PB_Window_Maximize
                WindowFlags.i=1
              EndIf
            Case #PB_Event_MoveWindow
              If GetWindowState(#FenetreVBToPB)=#PB_Window_Normal
                WindowX.i=WindowX(#FenetreVBToPB)
                WindowY.i=WindowY(#FenetreVBToPB)
                WindowFlags.i=0
              ElseIf GetWindowState(#FenetreVBToPB)=#PB_Window_Maximize
                WindowFlags.i=1
              EndIf
            Case #PB_Event_RestoreWindow
              If WindowFlags.i=1
                ResizeWindow(#FenetreVBToPB,WindowX.i,WindowY.i,WindowWidth.i,WindowHeight.i)
              EndIf
            Case #PB_Event_CloseWindow
              Quitter=MessageRequester(MapLibellesObjectsUI("GADGET-AVERTISSEMENT"),MapLibellesObjectsUI("MESSAGE-QUITTER"),52)
              If Quitter=6 ; Oui
                Quitter()
              EndIf
          EndSelect
        Case #FenetrePreferences
          Select Event
            Case #PB_Event_Gadget ; Un évènement c'est passé sur un gadget.
              Select EventGadget  ; Un évènement à eu lieu sur un gadget.
                Case #ComboBoxLangage
                  LangageChanger.b=#True
                Case #CheckBoxGenereCodeBoucleEvenement
                  If GetGadgetState(#CheckBoxGenereCodeBoucleEvenement)=#True
                    DisableGadget(#CheckBoxGenereCodeEvenementFenetre,#False)
                    DisableGadget(#CheckBoxGenereCodeEvenementGadget,#False)
                    DisableGadget(#CheckBoxGenereCodeEventTypeGadget,#False)
                    DisableGadget(#CheckBoxGenereCodeGetGadgetGadget,#False)
                    DisableGadget(#CheckBoxGenereCodeEvenementMenu,#False)
                    DisableGadget(#CheckBoxGenereCodeQuitterProgramme,#False)
                    DisableGadget(#CheckBoxGenereCodeSauvegardeFenetre,#False)
                  ElseIf GetGadgetState(#CheckBoxGenereCodeBoucleEvenement)=#False
                    DisableGadget(#CheckBoxGenereCodeEvenementFenetre,#True)
                    DisableGadget(#CheckBoxGenereCodeEvenementGadget,#True)
                    DisableGadget(#CheckBoxGenereCodeEventTypeGadget,#True)
                    DisableGadget(#CheckBoxGenereCodeGetGadgetGadget,#True)
                    DisableGadget(#CheckBoxGenereCodeEvenementMenu,#True)
                    DisableGadget(#CheckBoxGenereCodeQuitterProgramme,#True)
                    DisableGadget(#CheckBoxGenereCodeSauvegardeFenetre,#True)
                  EndIf
                Case #ButtonValiderPreferences
                  MessageRequester(MapLibellesObjectsUI("GADGET-INFO"),MapLibellesObjectsUI("MESSAGE-REDEMARRAGE"),64)
                  CompresseCode.b=GetGadgetState(#CheckBoxCompresseCode)
                  GenereCodeLigneVide.b=GetGadgetState(#CheckBoxGenereCodeLigneVide)
                  GenereCodeCommentaire.b=GetGadgetState(#CheckBoxGenereCodeCommentaire)
                  GenereCodeBoucleEvenement.b=GetGadgetState(#CheckBoxGenereCodeBoucleEvenement)
                  GenereCodeEvenementMenu.b=GetGadgetState(#CheckBoxGenereCodeEvenementMenu)
                  GenereCodeEventTypeGadget.b=GetGadgetState(#CheckBoxGenereCodeEventTypeGadget)
                  GenereCodeGetGadgetGadget.b=GetGadgetState(#CheckBoxGenereCodeGetGadgetGadget)
                  GenereCodeEvenementGadget.b=GetGadgetState(#CheckBoxGenereCodeEvenementGadget)
                  GenereCodeEvenementFenetre.b=GetGadgetState(#CheckBoxGenereCodeEvenementFenetre)
                  GenereCodeGadget.b=GetGadgetState(#CheckBoxGenereCodeGadget)
                  GenereCodeEnumerationConstantes.b=GetGadgetState(#CheckBoxGenereCodeEnumerationConstantes)
                  GenereCodePoliceEtCouleursGadget.b=GetGadgetState(#CheckBoxGenereCodePoliceEtCouleursGadget)
                  GenereCodeCouleursGadgetItem.b=GetGadgetState(#CheckBoxGenereCodeCouleursGadgetItem)
                  GenereCodeAvertissementQuitterProgramme.b=GetGadgetState(#CheckBoxGenereCodeQuitterProgramme)
                  GenereCodeSauvegardePositionEtTailleFenetre.b=GetGadgetState(#CheckBoxGenereCodeSauvegardeFenetre)
                  Langage$=GetGadgetText(#ComboBoxLangage)
                  DisableWindow(#FenetreVBToPB,#False)
                  CloseWindow(#FenetrePreferences)
                  If LangageChanger.b=#True
                    Delay(100)
                    Quitter()
                  EndIf
                  MenuParent$=""
                  Premier.b=#True
                  IndexBarreStatus.i=0
                  IndexColonneListView.i=0
                  NomListBox$=""
                  NomListView$=""
                  NomComboBox$=""
                  NomTreeView$=""
                  NomMenu$=""
                  NomBarreOutils$=""
                  ClearList(NomGadgetsVB.s())
                  ClearList(NomGadgetsReorganiserVB.s())
                  ClearList(ConstantePB.s())
                  ClearList(CodeGadgetsPB.s())
                  ClearList(CodePB.s())
                  ClearList(CodeVB.s())
                  If MapSize(Gadgets())>0
                    ClearStructure(@Gadgets(),GadgetInformation)
                    ClearMap(Gadgets())
                  EndIf
                  ClearGadgetItems(#EditorGadgetInformation)
                  ClearGadgetItems(#EditorGadgetAvertissement)
                  ClearGadgetItems(#EditorGadgetErreur)
                  ClearGadgetItems(#TreeGadget)
                  If SourceCode$="Fichier"
                    If ReadFile(1,Fichiers$,#PB_Ascii) ; Si le fichier peut être lu,on continue...
                      While Eof(1)=0                   ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof='End Of File')
                        AddElement(CodeVB.s())
                        CodeVB.s()=ReadString(1)
                      Wend
                      CloseFile(1) ; Ferme le fichier précédemment ouvert
                    Else           ; Sinon ont affiche un message d'avertissement
                      MessageRequester(MapLibellesObjectsUI("GADGET-INFO"),MapLibellesObjectsUI("MESSAGE-ERREURLECTURECODE"))
                      ProcedureReturn 0
                    EndIf
                  ElseIf SourceCode$="PressePapier"
                    CodeSource$=GetClipboardText()
                    If CodeSource$>""
                      For I=1 To CountString(CodeSource$,Chr(13)+Chr(10))+1
                        AddElement(CodeVB.s())
                        CodeVB.s()=StringField(CodeSource$,I,Chr(13)+Chr(10))
                      Next
                    Else
                      If Fichiers$>""
                        SourceCode$="Fichier"
                        If ReadFile(1,Fichiers$,#PB_Ascii) ; Si le fichier peut être lu,on continue...
                          While Eof(1)=0                   ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof='End Of File')
                            AddElement(CodeVB.s())
                            CodeVB.s()=ReadString(1)
                          Wend
                          CloseFile(1) ; Ferme le fichier précédemment ouvert
                        Else           ; Sinon ont affiche un message d'avertissement
                          MessageRequester(MapLibellesObjectsUI("GADGET-INFO"),MapLibellesObjectsUI("MESSAGE-ERREURLECTURECODE"))
                          ProcedureReturn 0
                        EndIf
                      EndIf
                    EndIf
                  Else
                    Goto Vide ; C'est pas le plus stylé mais le plus optimisé.
                  EndIf
                  NettoyageCode()
                  RecensementGadget()
                  DecoupageCode()
                  ChercheSplitContainerEnfants()
                  ReorganiseGadgetsEnfantFenetre()
                  ChercheProchainGadgets()
                  ReorganiseGadgetsEnfantGadgetParentSplitContainer()
                  AjoutCodeTreeFenetre()
                  ActualiseNomGadgetsReorganiserVB()
                  GenerationCodePB()
                  Vide:
                Case #ButtonAnnulerPreferences
                  DisableWindow(#FenetreVBToPB,#False)
                  CloseWindow(#FenetrePreferences)
                  LangageChanger.b=#False
              EndSelect
            Case #PB_Event_CloseWindow ; Termine la boucle de la fenêtre.
              DisableWindow(#FenetreVBToPB,#False)
              CloseWindow(#FenetrePreferences)
          EndSelect
      EndSelect
    ForEver
  EndIf
EndProcedure
Teste, analyse et compare la manière dont j'ai changé l'utilisation de tes anciennes chaînes à l'aide d'une map.

Tu y constateras plusieurs avantages en cascade.
• Le premier, et non des moindres, est la suppression de grandes parties de code redondantes. Plus besoin de faire appel des tests du type

Code : Tout sélectionner

If Langage$="Français"
 [Code]
ElseIf Langage$="English"
 [Répétion du code à l'identique avec, pour seule différence, les chaînes textuelles en anglais]
Endif
Cela t'évite ainsi de créer d'éventuelles erreurs lors de la répétition de ces portions et ton source y gagne, au passage, en lisibilté et en compacité.
Note au passage : Certains de tes tests faisaient que des messages d'alertes ne s'affichaient qu'en français et oubliaient l'anglais. Maintenant, ce problème est résolu, il suffit juste de s'assurer que les index de la map dans la langue concernée ont bien été définis.

• Le second, si tu programmes bien le code de ton interface, tu peux même modifier la langue de celle-ci, à la volée, sans avoir à redémarrer ton application ! Il te suffit de créer et appeler une procédure définissant tous les libellés des fenêtres, gadgets, infobulles et menus et hop, le tour est joué !

• Ton exécutable au final y gagnera aussi en légèreté !

• Tu pourras intégrer d'autres langues sans avoir à te soucier du code principal, il te suffira d'ajouter à la map les données adéquates et intégrer au bon endroit dans ton source l'appel à ces langues

Une dernière remarque pour ce message : Pourquoi répètes-tu systématiquement le typage de tes variables dès lors que tu les utilises ?
Exemple (Et j'ai supprimé les lignes où les mêmes variables étaient utilisées parce que ça faisait beaucoup de lignes pour juste un tout petit exemple !) :
Procedure NettoyageCode()
ClearMap(Gadgets.GadgetInformation())
ClearList(NomGadgetsVB.s())
ForEach CodeVB.s()
Delette.b=#True
Retenir ou vérifier le typage des variables lors de la frappe et le saisir systématiquement à chaque emploi des variables, ça doit être pesant et fastidieux à la longue, non ?!
C'est pourquoi c'est tout l'intérêt du typage lors de l'utilisation des commandes Define, Global, Protected, Shared ou lors de la première assignation. Après, lors de la saisie, tu n'as plus à t'en préoccuper, le tout étant de typer les variables correctement au moment de leur déclaration...

Et puis surtout, en plus d'être complètement inutile, cela risque de générer des erreurs lors de la compilation s'il y a des différences de typage pour une même variable le long du code.
Conclusion : Pourquoi faire compliqué quand on peut faire simple ? La programmation engendre suffisamment de complexité avec son lot d'erreurs inhérent pour que l'on se complique à en créer d'autres parfaitement évitables ! :D :wink:

Allez, bon courage et bonne programmation, y a du boulot ! :mrgreen: :wink:
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VB to PB

Message par Shadow »

Bonjour boddhi :)

Je te remercie pour ton code, j'ai tester ça fonctionne pas trop mal mais j'ai des problème.
C'est du bon travail, tu as dû y passer du temps.

Cependant, je ne comprends plus grand chose à ce code
J'ai ma manière de coder comme tous, ton code est trop condenser pour moi, je n'aime
pas ce style car je ne me retrouves plus dans le code, c'est tous collé et condensé :( .

Quand je code, j'adhère mon code en mettant parfois des ligne vide pour séparer certaine instruction d'autres, exemple:

If .....
Instruction

Else
Instruction

EndIf

Je met des espace entre par exemple: Abc$ = "123"
Et non Abc$="123".

Ensuite mon programme est en français par défaut, pas anglais !

Je voudrais te demander de tous revoir stp, tu es plus à ça près après tous le travail accomplis j'imagine ! :wink:
C'est du très bon travail mais je suis perdus.

Essaye de coller à la mise en page que j'avais faite, plus ou moins.
Je comprends mieux ce que tu voulais dire avec les Map.

Pour les typage, oui c'est pour me souvenir de ce que c'est, c'est pas une bonne méthode j'avoue mais j'ai toujours coder comme
ça pour savoir à quoi correspond chaque choses, c'est mon style :)

Encore merci pour ton travail qui fonctionne bien.
Cordialement. :)
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
boddhi
Messages : 569
Inscription : lun. 26/avr./2010 16:14
Localisation : N 48° 1' 33.6" / E 0° 36' 11.3"

Re: VB to PB

Message par boddhi »

Salut,
Shadow a écrit : J'ai ma manière de coder comme tous, ton code est trop condenser pour moi, je n'aime
pas ce style car je ne me retrouves plus dans le code, c'est tous collé et condensé :( .
Je vais être direct. Au vu de tes remarques, je ne suis pas totalement certain que tu aies bien pris le temps d'étudier et comparer le code...

Car hormis la suppression de parties de code redondant (les fameux If Langage$=""...Endif), devenues inutiles par l'emploi de variables mappées, je n'ai absolument ajouté ou modifié aucune de tes instructions donc, normalement, en analysant les lignes, tu ne devrais avoir aucun souci à retrouver tes "petits". La complexité de l'ensemble de ton code semble démontrer un certain niveau de maîtrise de PB, loin de celle d'un total novice, l'analyse de mon code ne devrait donc pas en théorie te poser de problèmes.

Alors, je ne sais pas précisément ce que tu entends par "condensé" mais c'était bien là le but de ma démonstration et de ma suggestion du recours à une map. On appelle cela ici plutôt de l'optimisation.

Et "condensé/collé", c'est aussi une contrainte du forum. Chaque message, Texte + Code, est limité à un certain nombre de caractères. Les deux que j'ai produits étant plutôt longs, je n'avais pas spécialement le choix que de gagner de l'espace en supprimant... hé bien, justement des espaces non essentiels !

Donc,
Quand je code, j'adhère mon code en mettant parfois des ligne vide pour séparer certaine instruction d'autres, exemple:
J'ai conservé tes lignes vides et tes commentaires et libre à toi d'en ajouter où bon te semble.
Je met des espace entre par exemple: Abc$ = "123" Et non Abc$="123".
Rien ne t'empêche, sur la portion de code que je t'ai fournie, de faire des recherches/remplacements (Ctrl+H) et remplacer les "=" par " = ", les "+" par des " + ", etc.
Ensuite mon programme est en français par défaut, pas anglais !
C'est justement ce genre de phrase qui me laisse à penser que tu n'as pas vraiment étudié le code parce que j'ai fait en sorte que ton logiciel soit en français par défaut :

Code : Tout sélectionner

Procedure DefinitionLangageObjetsUI(ArgLangage.s="")
  ArgLangage=UCase(ArgLangage)
  Select ArgLangage
    Case "EN","ENGLISH"
      [...]
    Default
      [...]
  EndSelect
EndProcedure
Ici, on voit que si aucun paramètre ArgLangage n'est passé ou s'il diffère de "EN" ou de "English", c'est le cas "Default" qui sera appliqué et que donc les chaînes de texte seront en français.

Et plus loin :

Code : Tout sélectionner

  ; ////////////////////////////
  ;Langage$="Français"
  Langage$="English"
  MessageRequester("Choix de la langue","Modifier le choix de la langue aux lignes "+Str(#PB_Compiler_Line-2)+" & "+Str(#PB_Compiler_Line-1))
  DefinitionLangageObjetsUI(Langage$)
  ; ////////////////////////////
J'ai pris le soin de t'alerter lors de l'exécution de l'endroit où tu pouvais définir la langue par défaut de ton application.
Donc ici, si tu assignes "Français","" ou quoi que ce soit d'autre (autre que "EN" ou "ENGLISH)", peu importe majuscules et minuscules) à ta variable Langage$, ce sera le français qui sera utilisé !

As-tu seulement copié, remplacé et testé le code que je t'ai fourni ?

Ensuite, j'ai bien précisé :
boddhi a écrit :• Le second, si tu programmes bien le code de ton interface, tu peux même modifier la langue de celle-ci, à la volée, sans avoir à redémarrer ton application ! Il te suffit de créer et appeler une procédure définissant tous les libellés des fenêtres, gadgets, infobulles et menus et hop, le tour est joué !
Et là, c'est à toi qu'il revient d'écrire le code nécessaire pour cela. Cela va être un petit long (mais pas compliqué au regard de la maîtrise des bases de la programmation que tu sembles avoir) et c'est aussi tout l'intérêt pour comprendre comment changer la langue d'une interface d'un logiciel.
Je le répète, tu crées une procédure qui définit tout le texte de tes fenêtres, gadgets, infobulles, en-têtes de ListXXX, Items de ListXXX, que sais-je encore :

Code : Tout sélectionner

Procedure Pc_ChangementLangueInterface(ArgLangage.s="")
  DefinitionLangageObjetsUI(ArgLangage)
  ;
  SetWindowTitle(#Fenetre,MapXXXX("TITRE-FENETRE"))
  SetGadgetText(#Bouton1,MapXXXX("GADGET-NONBOUTON1"))
  SetGadgetText(#Bouton2,MapXXXX("GADGET-NONBOUTON2"))
  ; Etc. pour tous les gadgets et fenêtres
  GadgetToolTip(#Bouton1,MapLibellesObjectsUI("INFOBULLE-GADGET1"))
  GadgetToolTip(#Bouton2,MapLibellesObjectsUI("INFOBULLE-GADGET2"))
  ; Etc. pour toutes les infobulles
  ; Etc
EndProcedure
Et tu l'invoques dans la partie du code qui demande à l'utilisateur de choisir la langue d'utilisation...
Je voudrais te demander de tous revoir stp, tu es plus à ça près après tous le travail accomplis j'imagine ! :wink:
Ben si, un peu quand même ! Tout comme toi, moi j'ai aussi des choses à faire qui demandent du temps et, comme tu l'as écrit, te répondre et te proposer un bout de code, ça m'a déjà pris, raisonnablement mais beaucoup, de temps... :)
Et serait-ce te rendre service si tu ne comprends pas le code que je te ponds ? Celui que je t'ai proposé semble déjà te poser des soucis...

Et puis c'est ton programme, faire totalement ce travail à ta place ferait que ce ne serait plus ton programme mais celui d'un autre. Ne subsisterait plus de toi que l'idée ! :mrgreen:
Plus sérieusement, le faire toi-même te permettra de comprendre ce que tu fais, c'est aussi comme ça qu'on apprend à coder !

Je suis sûr à 100% qu'aucun sur le forum ne me contredira. L'analyse de codes fournis par d'autres, le test, l'adaptation à ses besoins sont des passages
obligés de l'apprentissage de la programmation.

Crois-tu que, par exemple, c'est en allant voir un mécano et en lui demandant un moteur tout fait que tu apprendrais comment il fonctionne et à quoi servent les pièces qui le constituent ? Je pense que non !
C'est seulement à partir de leur analyse, d'informations glanées ici et là que tu pourras le faire. C'est aussi vrai pour l'informatique que pour d'autres domaines. Et le forum est là pour t'aider quand tu as besoin d'aide et c'est comme ça que tu pourras progresser, comprendre ce que tu fais et reproduire. :wink:
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VB to PB

Message par Shadow »

Bonjour boddhi,

Evidement que j'ai tester ton code, je t'es dis que ça marchais donc j'ai tester, j'ai vue tous ce que tu me dis.
Je te remercie et je verrais se que je ferais plus tard.
A+
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Répondre