VB To PB

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

VB To PB

Message par Shadow »

Salut,

J'essais de faire un convertisseur de code Visual Basic.Net vers PureBasic.
J'ai déjà bien avancé :)

Cependant je bloc sur certaine choses.

Pour commencer, à la ligne: 494 et 497, j'ajoute un nouvel élément dans mon Tree, il refuse de se mettre ou je veux (Dans MaFenêtre, à la fin, après le Titre de la fenêtre).
Normalement il dois aller au niveau 2 (494), 3 (497), peut importe le niveau que je met, il bouge pas du niveau 1, je comprends pas pourquoi :? 8O
Ensuite les prochains élément se mettent eux à la bonne place, BarreOutils, MenuContextuel, BarreStatue.

Le programme est là:
https://drive.google.com/open?id=10S3FE ... MjWQ1R8yHx
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 »

Bien, ensuite je ne sais pas comment je vais pouvoir gérer l'ajout des éléments des menue, Panel, etc...
Pour le Menu Principal, le code est:

Code : Tout sélectionner

'
'MenuPrincipal
'
Me.MenuPrincipal.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MenuPrincipalFichier, Me.MenuPrincipalEdition})
Me.MenuPrincipal.Location = New System.Drawing.Point(0, 0)
Me.MenuPrincipal.Name = "MenuPrincipal"
Me.MenuPrincipal.Size = New System.Drawing.Size(1021, 24)
Me.MenuPrincipal.TabIndex = 25
La ligne qui m’intéresse ici est:

Code : Tout sélectionner

Me.MenuPrincipal.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MenuPrincipalFichier, Me.MenuPrincipalEdition}
J'ai deux élément ici, Fichier et Edition.
Le menu Fichier est ainsi:

Code : Tout sélectionner

'
'MenuPrincipalFichier
'
Me.MenuPrincipalFichier.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MenuPrincipalFichierA, Me.MenuPrincipalFichierB, Me.MenuPrincipalFichierSeparateur, Me.MenuPrincipalFichierC})
Me.MenuPrincipalFichier.Name = "MenuPrincipalFichier"
Me.MenuPrincipalFichier.Size = New System.Drawing.Size(54, 20)
Me.MenuPrincipalFichier.Text = "Fichier"
'
'MenuPrincipalFichierA
'
Me.MenuPrincipalFichierA.Name = "MenuPrincipalFichierA"
Me.MenuPrincipalFichierA.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalFichierA.Text = "A"
'
'MenuPrincipalFichierB
'
Me.MenuPrincipalFichierB.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MenuPrincipalFichierBSubD, Me.MenuPrincipalFichierBSubE, Me.MenuPrincipalFichierBSubF})
Me.MenuPrincipalFichierB.Name = "MenuPrincipalFichierB"
Me.MenuPrincipalFichierB.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalFichierB.Text = "B"
'
'MenuPrincipalFichierBSubD
'
Me.MenuPrincipalFichierBSubD.Name = "MenuPrincipalFichierBSubD"
Me.MenuPrincipalFichierBSubD.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalFichierBSubD.Text = "D"
'
'MenuPrincipalFichierBSubE
'
Me.MenuPrincipalFichierBSubE.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MenuPrincipalFichierBSubDSubG, Me.MenuPrincipalFichierBSubDSubH})
Me.MenuPrincipalFichierBSubE.Name = "MenuPrincipalFichierBSubE"
Me.MenuPrincipalFichierBSubE.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalFichierBSubE.Text = "E"
'
'MenuPrincipalFichierBSubDSubG
'
Me.MenuPrincipalFichierBSubDSubG.Name = "MenuPrincipalFichierBSubDSubG"
Me.MenuPrincipalFichierBSubDSubG.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalFichierBSubDSubG.Text = "G"
'
'MenuPrincipalFichierBSubDSubH
'
Me.MenuPrincipalFichierBSubDSubH.Name = "MenuPrincipalFichierBSubDSubH"
Me.MenuPrincipalFichierBSubDSubH.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalFichierBSubDSubH.Text = "H"
'
'MenuPrincipalFichierBSubF
'
Me.MenuPrincipalFichierBSubF.Name = "MenuPrincipalFichierBSubF"
Me.MenuPrincipalFichierBSubF.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalFichierBSubF.Text = "F"
'
'MenuPrincipalFichierSeparateur
'
Me.MenuPrincipalFichierSeparateur.Name = "MenuPrincipalFichierSeparateur"
Me.MenuPrincipalFichierSeparateur.Size = New System.Drawing.Size(149, 6)
'
'MenuPrincipalFichierC
'
Me.MenuPrincipalFichierC.Name = "MenuPrincipalFichierC"
Me.MenuPrincipalFichierC.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalFichierC.Text = "C"
Le menu Edition est ainsi:

Code : Tout sélectionner

'
'MenuPrincipalEdition
'
Me.MenuPrincipalEdition.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MenuPrincipalEditionA, Me.MenuPrincipalEditionB, Me.MenuPrincipalEditionC, Me.MenuPrincipalEditionSeparateur, Me.MenuPrincipalEditionE})
Me.MenuPrincipalEdition.Name = "MenuPrincipalEdition"
Me.MenuPrincipalEdition.Size = New System.Drawing.Size(56, 20)
Me.MenuPrincipalEdition.Text = "Edition"
'
'MenuPrincipalEditionA
'
Me.MenuPrincipalEditionA.Name = "MenuPrincipalEditionA"
Me.MenuPrincipalEditionA.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalEditionA.Text = "A"
'
'MenuPrincipalEditionB
'
Me.MenuPrincipalEditionB.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MenuPrincipalEditionBSubD, Me.MenuPrincipalEditionBSubE, Me.MenuPrincipalEditionBSubF})
Me.MenuPrincipalEditionB.Name = "MenuPrincipalEditionB"
Me.MenuPrincipalEditionB.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalEditionB.Text = "B"
'
'MenuPrincipalEditionBSubD
'
Me.MenuPrincipalEditionBSubD.Name = "MenuPrincipalEditionBSubD"
Me.MenuPrincipalEditionBSubD.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalEditionBSubD.Text = "D"
'
'MenuPrincipalEditionBSubE
'
Me.MenuPrincipalEditionBSubE.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.MenuPrincipalEditionBSubESubG, Me.MenuPrincipalEditionBSubESubH})
Me.MenuPrincipalEditionBSubE.Name = "MenuPrincipalEditionBSubE"
Me.MenuPrincipalEditionBSubE.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalEditionBSubE.Text = "E"
'
'MenuPrincipalEditionBSubESubG
'
Me.MenuPrincipalEditionBSubESubG.Name = "MenuPrincipalEditionBSubESubG"
Me.MenuPrincipalEditionBSubESubG.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalEditionBSubESubG.Text = "G"
'
'MenuPrincipalEditionBSubESubH
'
Me.MenuPrincipalEditionBSubESubH.Name = "MenuPrincipalEditionBSubESubH"
Me.MenuPrincipalEditionBSubESubH.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalEditionBSubESubH.Text = "H"
'
'MenuPrincipalEditionBSubF
'
Me.MenuPrincipalEditionBSubF.Name = "MenuPrincipalEditionBSubF"
Me.MenuPrincipalEditionBSubF.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalEditionBSubF.Text = "F"
'
'MenuPrincipalEditionC
'
Me.MenuPrincipalEditionC.Name = "MenuPrincipalEditionC"
Me.MenuPrincipalEditionC.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalEditionC.Text = "C"
'
'MenuPrincipalEditionSeparateur
'
Me.MenuPrincipalEditionSeparateur.Name = "MenuPrincipalEditionSeparateur"
Me.MenuPrincipalEditionSeparateur.Size = New System.Drawing.Size(149, 6)
'
'MenuPrincipalEditionE
'
Me.MenuPrincipalEditionE.Name = "MenuPrincipalEditionE"
Me.MenuPrincipalEditionE.Size = New System.Drawing.Size(152, 22)
Me.MenuPrincipalEditionE.Text = "E"
Pour le menu Contextuel, même principe, pas la peine que je montre...
Le soucis est donc là, comment je dois procéder ?

Jme doute que vous devez rien y comprendre....

Dans le menu principale ya deux objet, Fichier et Edition, donc je dois traiter "Fichier", aller voir ce que "Fichier" a
et traiter tous ses élément, traiter tous les élément des sous éléments....
C'est le gros bazars je ne sais pas trop comment faire...
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
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: VB To PB

Message par SPH »

Abandonne le projet et fais un casse briques :idea:

Je ne vois que ca...
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: VB To PB

Message par Ollivier »

Comment veux-tu de l'aide si le code n'est pas visible ?

Tu publies le code, et tu mets un commentaire :

Code : Tout sélectionner

; ici est le problème
dans le code pour qu'on s'y retrouve...
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VB To PB

Message par Shadow »

Si tu n'as pas le fichier ou est le code de VB, ça ne sert à rien, ça ne fonctionne pas sans !
Mais ok, je met le code quand même !

Code : Tout sélectionner


Global VersionProgramme$ = "1.00"

; Le code VB nettoyer.
Global NewList CodeVB.s()

; Le Nom des Gadgets dans l'ordre de lecture du code.
Global NewList NomGadgets.s()

; Identité des Gadgets, Nom et Type.
Global NewMap Gadgets.s()

; Famille de Code appartenant à chaque Gadgets, contient toutes leurs Caracteristiques.
Global NewMap CodeGadgets.s()

; Le code PB généré.
Global NewList CodePB.s()

; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

; Lecture du fichier de code.
Procedure.i LectureFichier()
  
  ClearList(CodeVB.s())
  
  Fichiers$ = OpenFileRequester("Sélectionnez un fichier","","Texte (.txt)|*.txt", 0)
  
  If Fichiers$
    
    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("Information","Impossible de lire le fichier !")
      ProcedureReturn 0
    EndIf
    
  Else
    ProcedureReturn 0
    
  EndIf
  
  ProcedureReturn 1
  
EndProcedure

; Nettoie le code, enlève toutes les lignes inutile.
Procedure NettoyageCode()
  
  ; Recherche de: Private Sub InitializeComponent()
  ForEach CodeVB.s()
    
    ; Ont efface toutes les lignes lus jusqu'à trouver "Private Sub InitializeComponent()" et le supprime également.
    If Not FindString(CodeVB.s(), "Private Sub InitializeComponent()", 1, #PB_String_NoCase)
      DeleteElement(CodeVB.s()) 
      
    Else
      DeleteElement(CodeVB.s()) 
      Break
      
    EndIf
    
  Next
  
  
  ; Recherche de: End Sub
  ForEach CodeVB.s()
    
    ; A partir de "End Sub", ont efface tous également.
    If FindString(CodeVB.s(), "SuspendLayout()", 1, #PB_String_NoCase) Or
       FindString(CodeVB.s(), "Padding", 1, #PB_String_NoCase) Or
       ;FindString(CodeVB.s(), "ISupportInitialize", 1, #PB_String_NoCase) Or
       FindString(CodeVB.s(), "UseVisualStyleBackColor", 1, #PB_String_NoCase) Or
       FindString(CodeVB.s(), "PerformLayout()", 1, #PB_String_NoCase) Or
       FindString(CodeVB.s(), "ResumeLayout", 1, #PB_String_NoCase) Or
       FindString(CodeVB.s(), "TabIndex", 1, #PB_String_NoCase) Or
       FindString(CodeVB.s(), "AutoSize", 1, #PB_String_NoCase) Or
       FindString(CodeVB.s(), "TabStop", 1, #PB_String_NoCase) Or
       FindString(CodeVB.s(), "UseCompatibleStateImageBehavior", 1, #PB_String_NoCase) Or
       FindString(CodeVB.s(), "AutoScaleDimensions", 1, #PB_String_NoCase) Or
       FindString(CodeVB.s(), "AutoScaleMode", 1, #PB_String_NoCase) Or
       FindString(CodeVB.s(), "System.ComponentModel.ComponentResourceManager", 1, #PB_String_NoCase) Or
       FindString(CodeVB.s(), "Me.components = New System.ComponentModel.Container()", 1, #PB_String_NoCase)
      DeleteElement(CodeVB.s()) 
    EndIf
    
  Next
  
  ; Recherche de: End Sub
  ForEach CodeVB.s()
    
    ; A partir de "End Sub", ont efface tous également.
    If FindString(CodeVB.s(), "End Sub", 1, #PB_String_NoCase)
      Delette.b = #True
    EndIf
    
    If Delette.b = #True
      DeleteElement(CodeVB.s()) 
    EndIf
    
  Next
  
EndProcedure

; Etrait le Nom du Gadget des Gadgets.
Procedure.s ExtraireNomGadget(Ligne$)
  
  Point.i = FindString(Ligne$, ".", 1, #PB_String_NoCase)
  Espace.i = FindString(Ligne$, Chr(32), Point.i + 1, #PB_String_NoCase)
  
  ProcedureReturn Mid(Ligne$, Point.i + 1, Espace.i - (Point.i + 1))
  
EndProcedure

; Recense et identifie le tyte de chaque Gadgets.
Procedure RecensementGadget()
  
  ForEach CodeVB.s()
    
    ; Est ce la création d'un nouveau Gadget ?
    If FindString(CodeVB.s(), "New System.Windows.Forms", 1, #PB_String_NoCase) And Not FindString(CodeVB.s(), "TabPage", 1, #PB_String_NoCase)
      
      If FindString(CodeVB.s(), "Button()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "Button()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "CheckBox()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "CheckBox()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "TextBox()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "TextBox()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "DateTimePicker()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "DateTimePicker()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "Label()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "Label()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "LinkLabel()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "LinkLabel()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "ListBox()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "ListBox()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "ListView()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "ListView()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "NumericUpDown()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "NumericUpDown()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "PictureBox()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "PictureBox()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "ProgressBar()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "ProgressBar()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "RadioButton()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "RadioButton()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "RichTextBox()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "RichTextBox()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "TreeView()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "TreeView()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "WebBrowser()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "WebBrowser()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "GroupBox()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "GroupBox()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "SplitContainer()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "SplitContainer()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "ContextMenuStrip(Me.components)", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "ContextMenuStrip(Me.components)"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "MenuStrip()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "MenuStrip()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "ToolStrip()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "ToolStrip()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "StatusStrip()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "StatusStrip()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "ToolStripMenuItem()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "ToolStripMenuItem()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "ToolStripSeparator()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "ToolStripSeparator()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "ToolStripButton()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "ToolStripButton()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "ToolStripStatusLabel()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "ToolStripStatusLabel()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      ElseIf FindString(CodeVB.s(), "TabControl()", 1, #PB_String_NoCase)
        AddMapElement(Gadgets.s(), ExtraireNomGadget(CodeVB.s()))
        Gadgets.s() = "TabControl()"
        
        AddElement(NomGadgets.s())
        NomGadgets.s() = ExtraireNomGadget(CodeVB.s())
        
      EndIf
      
    ElseIf 1
      
    Else
      
    EndIf
    
  Next
  
EndProcedure

; Regroupe le code appartenant à chaque Gadgets (Caracteristiques).
Procedure DecoupageCode()
  
  ForEach CodeVB.s()
    
    If FindString(CodeVB.s(), "        '", 1, #PB_String_NoCase)
      NumCom.i + 1
    EndIf
    
    If NumCom.i = 2 ; Nom du Gadget.
      AddMapElement(CodeGadgets.s(), RemoveString(CodeVB.s(), "        '", #PB_String_NoCase))
    EndIf
    
    If NumCom.i = 3

      If Not FindString(CodeVB.s(), "        '", 1, #PB_String_NoCase) And CodeVB.s() > ""
        CodeGadgets.s() + Trim(CodeVB.s()) + Chr(13) + Chr(10)
      EndIf
      
    EndIf
    
    If NumCom.i = 4
      NumCom.i = 1
    EndIf
    
  Next
  
EndProcedure

; Extrait les éléments d'un menu.
Procedure ExtraireElementsMenu(Ligne$)
  
  ElementMenu$ = Mid(Ligne$, FindString(Ligne$, "{", 1, #PB_String_NoCase) + 1, FindString(Ligne$, "}", FindString(Ligne$, "{", 1, #PB_String_NoCase) + 1, #PB_String_NoCase) - 1)
  Debug ElementMenu$
  
EndProcedure

; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Enumeration 1
  #FenetreVBToPB
  #Menu
  #Menu_Ouvrir
  #Menu_Quitter
  #TreeGadget
EndEnumeration

; Ajoute le code Structuré dans le Tree.
Procedure AjoutCodeTree()
  
  ; {{{{{{{{{{{
  
  ;{ Ajout du code d'énumeration PB.
  
  ClearList(CodePB.s())
  
  AddElement(CodePB.s())
  CodePB.s() = ""
  
  AddElement(CodePB.s())
  CodePB.s() = "; Code généré par VB To PB " + VersionProgramme$ + "."
  
  AddElement(CodePB.s())
  CodePB.s() = ""
  
  AddElement(CodePB.s())
  CodePB.s() = ""

  AddElement(CodePB.s())
  CodePB.s() = "; Enumeration"
  
  AddElement(CodePB.s())
  CodePB.s() = "Enumeration"
  
  ForEach NomGadgets.s()
    AddElement(CodePB.s())
    CodePB.s() = "#" + NomGadgets.s()
  Next
  
  AddElement(CodePB.s())
  CodePB.s() = "EndEnumeration"
;   
;   ForEach CodePB.s()
;     Debug CodePB.s()
;   Next
;   
  ;}
  
  
; ; Enumère le code Nettoyé.
; ForEach CodeVB.s()
;   Debug CodeVB.s()
; Next
; 
; ; Enumère le Nom de chaque Gadgets dans l'ordre de lecture du code.
; ForEach NomGadgets.s()
;   Debug NomGadgets.s()
; Next
; 
; ; Enumère le Nom et Type de chaque Gadget.
; ForEach Gadgets.s()
;   Debug MapKey(Gadgets.s()) + " = " + Gadgets.s()
; Next

; ; Enumère le code appartenant à chaque Gadget.
; ForEach CodeGadgets.s()
; ;   If FindString(CodeGadgets.s(), "Me.ClientSize", 1, #PB_String_NoCase)
; ;     Debug  CodeGadgets.s()
; ;   EndIf
;   
;   Debug MapKey(CodeGadgets.s()) + " = " + CodeGadgets.s()
;   Debug "-------------------------------------------------------------------------------"
; Next

  ClearGadgetItems(#TreeGadget)
  AddGadgetItem(#TreeGadget, 0, "Fenêtre", 0, 0)
  
  ; Enumère le code appartenant à chaque Gadget.
  ForEach CodeGadgets.s()
    
    ;{ Recherche et extraction des informations de la fenêtre.
    
    If FindString(CodeGadgets.s(), "Me.ClientSize = New System.Drawing.Size(", 1, #PB_String_NoCase)
      
      ; Ajout d'un élément dans le Tree qui est le Nom de la fenêtre.
      AddGadgetItem(#TreeGadget, -1, MapKey(CodeGadgets.s()), 0, 1)
      
      ; Par defaut, car n'existe pas.
      AddGadgetItem(#TreeGadget, -1, "X: 0", 0, 2)
      AddGadgetItem(#TreeGadget, -1, "Y: 0", 0, 2)
      
      ; Extraction de la taille de la fenêtre.
      Taille$ = Mid(CodeGadgets.s(), FindString(CodeGadgets.s(), "(", 1, #PB_String_NoCase) + 1, FindString(CodeGadgets.s(), ")", 1, #PB_String_NoCase) - (FindString(CodeGadgets.s(), "(", 1, #PB_String_NoCase) + 1))
      
      ; Ajout d'un élément dans le Tree qui est la Largeur ainsi que la Hauteur de la fenêtre.
      AddGadgetItem(#TreeGadget, -1, "Largeur: " + StringField(Taille$, 1, ", "), 0, 2)
      AddGadgetItem(#TreeGadget, -1, "Hauteur: " + StringField(Taille$, 2, ", "), 0, 2)
      
      ; Parcour chaque Ligne de code dans la valeur de CodeGadgets.s()
      ; CodeGadgets.s() contient une clef qui est ne Nom du Gadget ainsi que toutes les lignes de ce celui-ci pour le personnaliser.
      For Elements.i = 2 To CountString(CodeGadgets.s(), Chr(13) + Chr(10)) + 1
        
        ; Extraction de chaque ligne séparé par des Retour à la Ligne.
        Ligne$ = StringField(CodeGadgets.s(), Elements.i, Chr(13) + Chr(10))
        
        ; Si le Texte du Gadget est trouvé.
        If FindString(Ligne$, "Me.Text = ", 1, #PB_String_NoCase)
          ; Extraction du Texte du Gadget qui est le Titre de la fenêtre.
          Titre$ = Mid(Ligne$, FindString(Ligne$, Chr(34), 1, #PB_String_NoCase), (FindString(Ligne$, Chr(34), FindString(Ligne$, Chr(34), 1, #PB_String_NoCase) + 1) - FindString(Ligne$, Chr(34), 1, #PB_String_NoCase)) + 1)
          ; Ajout d'un élément dans le Tree qui est le Titre de la fenêtre.
          AddGadgetItem(#TreeGadget, -1, "Titre: " + Titre$, 0, 2)
        EndIf
        
      Next
      
    EndIf
    
    ;}
    
    ;{ Recherche et extraction des informations du menu principal, du menu contextuel, de la barre d'outil et de la barre de statue, de la fenêtre.
    
    If FindString(CodeGadgets.s(), ".Items.AddRange(New System.Windows.Forms.ToolStripItem() ", 1, #PB_String_NoCase)
      
      Clef$ = MapKey(CodeGadgets.s())
      
      ; Recherche du type de l'objet.
      TypeObjet$ = Gadgets.s(Clef$)

      If TypeObjet$ = "MenuStrip()" ; Menu Fenêtre.
        
        ; --------------------------------------
        ; ICI EST LE PROBLEME !!!
        ; --------------------------------------
        
        AddGadgetItem(#TreeGadget, -1, "Menu Fenêtre", 0, 2)
        
        ; Ajout d'un élément dans le Tree qui est le Nom du menu principal de la fenêtre.
        AddGadgetItem(#TreeGadget, -1, MapKey(CodeGadgets.s()), 0, 3)
;         
;       ElseIf TypeObjet$ = "ToolStripMenuItem()" ; Element menu.
;         
;         
;       ElseIf TypeObjet$ = "ToolStripSeparator()" ; Separateur de Menu.
        
      ElseIf TypeObjet$ = "ContextMenuStrip(Me.components)" ; Menu Contextuel.
        
        AddGadgetItem(#TreeGadget, -1, "Menu Contextuel", 0, 2)
        
        ; Ajout d'un élément dans le Tree qui est le Nom du menu contextuel.
        AddGadgetItem(#TreeGadget, -1, MapKey(CodeGadgets.s()), 0, 3)
        
      ElseIf TypeObjet$ = "ToolStrip()" ; Barre D'outils.
        
        AddGadgetItem(#TreeGadget, -1, "Barre D'outils", 0, 2)
        
        ; Ajout d'un élément dans le Tree qui est le Nom de la barre d'outils de la fenêtre.
        AddGadgetItem(#TreeGadget, -1, MapKey(CodeGadgets.s()), 0, 3)
;         
      ElseIf TypeObjet$ = "ToolStripButton()" ; Bouton de Barre D'outils.
        
      ElseIf TypeObjet$ = "StatusStrip()" ; Barre de Statue.
        
        AddGadgetItem(#TreeGadget, -1, "Barre de Statue", 0, 2)
        
        ; Ajout d'un élément dans le Tree qui est le Nom de la barre de statue de la fenêtre.
        AddGadgetItem(#TreeGadget, -1, MapKey(CodeGadgets.s()), 0, 3)
;         
      ElseIf TypeObjet$ = "ToolStripStatusLabel()" ; Texte de Barre de Statue.
        Debug 6
        
      EndIf
      
    EndIf
    
    ;}

  Next
  
EndProcedure

Procedure FenetreVBToPB()
  
  If OpenWindow(#FenetreVBToPB, 327, 177, 800, 600, "VB To PB - V1",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
     WindowBounds(#FenetreVBToPB, 400, 300, #PB_Ignore, #PB_Ignore) 
     
     ; Menu
     If CreateImageMenu(#Menu, WindowID(#FenetreVBToPB), #PB_Menu_ModernLook)
       MenuTitle("Fichier")
       MenuItem(#Menu_Ouvrir, "Ouvrir" + Chr(9) + "Ctrl+O")
       MenuBar() 
       MenuItem(#Menu_Quitter, "Quitter" + Chr(9) + "Ctrl+F")
     EndIf
     
     AddKeyboardShortcut(#FenetreVBToPB, #PB_Shortcut_Control | #PB_Shortcut_O, #Menu_Ouvrir)
     AddKeyboardShortcut(#FenetreVBToPB, #PB_Shortcut_Control | #PB_Shortcut_F, #Menu_Quitter)
     
     TreeGadget(#TreeGadget, 1, 0, 0, 0)
     
     
    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.
      
      Select Event 
          
        Case 512 ; Déplacement de la souris sur la fenêtre.
          
        Case 513 ; Bouton gauche appuyé avec la souris sur la fenêtre.
          
        Case 514 ; Bouton gauche relâcher avec la souris sur la fenêtre.
          
        Case 515 ; Double clique gauche avec la souris sur la fenêtre.
          
        Case 516 ; Bouton droit appuyé avec la souris sur la fenêtre.
          
        Case 517 ; Bouton droit relâcher avec la souris sur la fenêtre.
          
        Case 518 ; Double clique droit avec la souris sur la fenêtre.
          
        Case #PB_Event_Gadget
          
          Select EventGadget
              
            Case #TreeGadget
              
              Select EventType
                  
                  Case #PB_EventType_LeftClick
                    Debug GetGadgetItemAttribute(#TreeGadget, GetGadgetState(#TreeGadget), #PB_Tree_SubLevel)
                    Debug GetGadgetItemText(#TreeGadget, GetGadgetState(#TreeGadget), GetGadgetItemAttribute(#TreeGadget, GetGadgetState(#TreeGadget), #PB_Tree_SubLevel))
                    
                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 puis regroupe le code pour chaque Gadget.
              If LectureFichier()
                NettoyageCode()
                RecensementGadget()
                DecoupageCode()
                AjoutCodeTree()
              EndIf
              
            Case #Menu_Quitter
              
              Quitter = MessageRequester("Avertissement", "      Vous êtes sur de vouloir quitter ?", 52)
              
              If Quitter = 6 ; Oui
                End
              Else
                Event = -1
              EndIf
              
          EndSelect
          
        Case #PB_Event_SizeWindow
          ResizeGadget(#TreeGadget, 1, 0, WindowWidth(#FenetreVBToPB) - 2, WindowHeight(#FenetreVBToPB) - 21)
          
        Case #PB_Event_CloseWindow
          
          Quitter = MessageRequester("Avertissement", "      Vous êtes sur de vouloir quitter ?", 52)
          
          If Quitter = 6 ; Oui
            End
          Else
            Event = -1
          EndIf
          
      EndSelect
      
    ForEver
    
  EndIf
EndProcedure

FenetreVBToPB()
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
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: VB To PB

Message par microdevweb »

Je ne penses pas que tu réalise vraiment l'ampleur d'un telle projet, déjà le bout de code que tu montre (depuis VB je suppose) est en full oop.

Donc il va falloir aller farfouiller dans le code de la class et remonter dans toutes les class mères.

Enfin bon courage
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VB To PB

Message par Shadow »

Je lâche rien !
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.
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: VB To PB

Message par Marc56 »

Code : Tout sélectionner

ElseIf FindString(CodeVB.s(), "...
Bloc répété 25 fois :roll:
:arrow: Il serait temps d'apprendre à utiliser Select / EndSelect
ElseIf on l'utilise si on veut redéfinir la condition, pas la valeur (on peut, mais c'est moche)
Pour commencer, à la ligne: 494 et 497, j'ajoute un nouvel élément dans mon Tree, il refuse de se mettre ou je veux
Un programme ne fait pas ce qu'on veut, mais ce qu'on lui dit de faire :P et ce qu'on lui a appris.
L'IA c'est du flanc marketing dans 99% des cas :mrgreen:

Code : Tout sélectionner

AddGadgetItem(#TreeGadget, -1, "Menu Fenêtre", 0, 2)
Dixit Doc TreeGadget
Ce paramètre spécifie le sous-niveau du nouvel item.
Si le sous-niveau est supérieur à celui de l'item précédent, le nouvel item devient l'enfant de celui-ci.
S'il est inférieur, il sera ajouté après le parent de l'élément précédent.


C'est à dire que le numéro de niveau horizontal importe peu, c'est la différence par rapport au niveau supérieur.
Autrement dit mettre 2 s'il n'y a qu'un niveau 0 ne va pas créer 1

:idea: F1 :wink:
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: VB To PB

Message par Ollivier »

Remarque très pertinente de Marc56.

Dans ton cas, tu mets deux ajouts d'items au lieu d'un : un factice, en tant qu'enfant, avec un nom générique, et ton item souhaité, en tant qu'enfant d'enfant.

Code : Tout sélectionner

Fenêtre  /* Générique */
   Contenant   /* Générique */
      Titre
      Cadre    /* Générique */
   Contenu    /* Générique */
      1er Plan    /* Générique */
         Menu
            Fichier
            Edition
            Aide
         Barre système
      2nd Plan    /* Générique */
         Container
            TextBox
               Bonjour, voici
               un texte
         ButtonBox
            Ok
            Annuler
            Aide
Ce qui n'est pas commenté par /* Générique */ est ce qui est concrèt : c'est ce que tu vois.

Ce qui est commenté par /* Générique */ est ce qui est abstrait : c'est ce que l'ordinateur a aussi besoin pour architecturer la fenêtre.

La difficulté est dans le fait de réaliser d'abord un tel arbre purement théorique (ne contenant que les génériques). Puis d'y insérer les objets de VB dedans.

Regarde entre "titre" et "menu", il y a 3 génériques qui
1) permettent de mettre "menu" au bon niveau par rapport à "titre",
2) évitent que "menu" se trouve enfant de "titre".
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VB To PB

Message par Shadow »

C'est trop complexe pour moi... je vais revoir tous ça, merci.
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
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: VB To PB

Message par SPH »

Shadow a écrit :Je lâche rien !
Mais si, mais si :!: :wink:
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: VB To PB

Message par Ollivier »

C'est normal que ce soit compliqué. Pourtant, certains efforts ne sont jamais vains.
Olliv a écrit :La difficulté est dans le fait de réaliser d'abord un tel arbre purement théorique (ne contenant que les génériques). Puis d'y insérer les objets de VB dedans.

Code : Tout sélectionner

Fenêtre  /* Générique */
     Contenant /* Générique */
          Cadre /* Générique */
     Contenu /* Générique */
          1er Plan /* Générique */
          2nd Plan /* Générique */
J'ai simplement viré ce qui n'était pas générique. Et l'on obtient un exemple d'arbre théorique prêt à accueillir n'importe quel objet d'interface graphique.

On peut traduire cet arbre par :

<< Une fenêtre, c'est un contenant et un contenu. Du contenant, j'en vois au moins un cadre qui délimite l'intérieur de l'extérieur de cette fenêtre. Et, du contenu, il y aura des choses qui s'afficheront en priorité, au 1er plan, et d'autres choses qui s'afficheront normalement, en 2nd plan. >>

A toi de trouver ton arbre de départ...
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: VB To PB

Message par Shadow »

Merci Olivier pour ton aide,

Je suis repartie à zéro sur une base de programme, heureusement que j'ai sauvegarder les étape !

J'ai drastiquement simplifier la chose, structurer le code au maximum, résultat, j'ai tous résolut !
Même les problème les plus complexe que je ne savais pas résoudre, et sans aide extérieur promis.

La clef de la réussite à été de structurer le code VB dans une structure, chaque gadget à
son nom, ça position, ça taille, son texte, sont Type, ces gadget enfants.

J'ai ainsi pus grâce à de nombreuse boucle ForEach, parcourir la liste de tous les enfants de tous les gadgets !
Ensuite de tous mettre dans le Tree et zou !

Et ça à été un jeu d'enfants !

Voici le programme, la traduction du code est pas encore faite mais va pas être bien compliqué à faire, à suivre !:
https://drive.google.com/open?id=10S3FE ... MjWQ1R8yHx

PS: je dois dire que je suis sacrément fier de moi mais aussi très étonné !

J'ai réussi à résoudre le problème des enfants des gadgets et leur enfants etc, ça me paraissais insurmontable
et une fois le code structurer et à des boucle ForEach, ça été super facile !
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
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: VB To PB

Message par MLD »

Salut
Bon courage a toi, car VB est devenu essentiellement POO ou les API(S) Windows font 90% du travail. Commence par potasser les API(S),ce sera un net plus. :wink:
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: VB To PB

Message par Micoute »

Tu as bien fait de ne rien lâcher, c'est du bon travail comme je l'aime.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre