Question [Convert-Form][V0.7] Nouvelle version

Plus d'informations
il y a 16 ans 8 mois #2029 par Laurent Dardenne
La dernière version est disponible ici .


Salut,
voici une nouvelle version de Convert-Form.ps1.

Le code peut être amélioré ainsi que les regex mais j'ai préféré être \"verbeux\" et j'ai codé le plus souvent de manière traditionnelle.
C'est plus un prototype avancé qu'un véritable développement dans les régles de l'art.

Le premier objectif étant de recenser les différents cas.
J'ai joint qq fichiers de documentation, difficile de tout y mettre.
Pour les fichiers de tests Winform ce n'est pas possible de le poster sur le forum (850 Ko).

De préférence placez tous les fichiers dans un répertoire dédié.

Exécutez Convert-Form sans paramètres pour afficher les codes couleurs utilisés.

Je vous laisse tester les nouvelles fonctionnalités.
:)

V0.7 (26/03/08) (BatchMan):
- Corrections :
- l'imbrication de controls (panel) est possible.
- de l'analyse autour du mot \"Layout\", certains événements d'une Winform contiennent ce mot
- de la reconnaissance de Regex autour des énumérations C#.
A l'origine on ne prenait en compte que 4 délimiteurs, aujourd'hui on ne tient plus compte
du nombre de délimiteurs :
origine :
[System.Windows.Forms.DialogResult]::Cancel
correction :
[System.Drawing.SystemColors]::MenuBar
[System.Drawing.Forms.MonthCalendar.HitArea]::Vertical

- Ajout :
- Prise en compte du composant Datagrid et BindingNavigator (fonctions de base)
- Ajout de la compilation du fichier de ressources d'une Winform (Images BMP,Gif,ico,...).
- Vérification des chemin d'accès des paramètres
- Vérification des prérequis (Commande/Scripts/Fonctions)
- prise en charge des différentes déclarations d'une propriété Font (6 surcharges ):
C#: this.label1.Font = new System.Drawing.Font(\"Arial Black\", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
PS: $label1.Font = new-object System.Drawing.Font(\"Arial Black\", 9.75,[System.Drawing.FontStyle]::Bold,[System.Drawing.GraphicsUnit]::Point, 0)
- prise en charge de la déclaration d'un appel de méthode static FromArgb :
C#: this.CaseàCocher.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
PS: $CaseàCocher.FlatAppearance.MouseDownBackColor = [System.Drawing.Color]::FromArgb(192,255,192)
- prise en charge des différentes déclarations d'une propriété Anchor
C# : this.comboBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)));
PS : $button1 = [System.Windows.Forms.AnchorStyles]\"Bottom,Top\"
- prise en charge des différentes déclarations d'une propriété ShortcutKeys
C# : this.toolStripMenuItem2.ShortcutKeys = ((System.Windows.Forms.Keys) ((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.A)));
PS : $toolStripMenuItem2.ShortcutKeys = [System.Windows.Forms.Keys]\"Alt,A\"
- prise en charge des propriété de type SizeF (System.Drawing.SizeF(6F, 13F);)
- Contrôle sur la présence du composant System.Windows.Forms.WebBrowser. S'il est présent -> exception
- Contrôle sur la présence du composant BackgroundWorker. S'il est présent -> avertisssement.
- de la gestion de tous les événements déclarés
- par défaut des événements add_actived et FormClosing
- [switch] $DontLoad. Ne génére pas le code de chargement des assemblies, cas d'une form secondaire.

- Modifications :
- La gestion des déclarations des propriétés Font, Anchor et ShortcutKeys a nécessité une itération supplémentaire
sur la totalité des lignes à convertir. Certaines déclarations peuvent être sur 2 ou 3 lignes.
A l'origine le script partait du principe qu'une suite d'instructions était sur une seule ligne .
- On utilise des ArrayList au lieu de tableau (redimensionnement possible) et des StringBuilder
- suite aux remarque de Janel : nom de script normé (Convert-Form), suppression de variables
temporaires inutiles (nom de fichier en double)

V0.6.2 (09/03/08) (BatchMan):
- Ajout :
- [Switch] $Confirm. Informe l'utilisateur que le fichier destination existe déjà.
- Nouveau script contenant les functions suppémentaires : PackageConvertForm.ps1

V0.6.1 (26/02/08) (BatchMan):
- Ajout :
- Function Create-Header pour la création d'un entête de script
- Function Load-Assembly pour la prise en compte de System.Drawing

V0.6 (23/02/08) (BatchMan):
- Ajout :
- Documentation du parsing.
- Modifications :
- Simplification des traitements
- Toutes les traitements 'unique', tel que la suppression de ligne, déclenche l'itération suivante.
- Renommage des variables de contrôle

V0.5 (23/02/08) (BatchMan):
- Modification :
- Renommage de variables
- Ajouts :
- Contrôle des arguments de la ligne de commande
- Commentaires
- Validation de la syntaxe du script généré en fin de traitement
- Tests de tous les contrôles communs, des menus et barre d'outils (en cours)
Note: Les lignes ((System.ComponentModel.ISupportInitialize) des dataGridView1 sont dédiés il me semble au datasource.

V0.4 (23/02/08) (VV) :
- Ajout de l'argument -dontshow pour supprimer l'affichage de la form à la fin du script PS1 généré
- Remplacement de \"new XXXXXX[] {\" dans le cadre du remplissage d'objets avec des valeurs (type listbox)
- Traitement des enumerations (format [XXXX.XXXX.XXXX.XXXX]::XXXX)
- Suppression de la déclaration des évenements (à rajouter par développeur)
- Suppression des ISupportInitialize
- Remplacement du format de typage des données
- Remplacement de l'opérateur binaire OR

V0.1 (??/??/07) ( ?? ) : Création

Composants supportés :

a génération des composants suivants est correctes avec leurs propriétés renseignées avec leurs valeurs par défaut.

$components = new-object System.ComponentModel.Container
$button1 = new-object System.Windows.Forms.Button
$textBox1 = new-object System.Windows.Forms.TextBox

$dataGridView1 = new-object System.Windows.Forms.DataGridView
$bindingNavigator1 = new-object System.Windows.Forms.BindingNavigator($components)

$checkBox1 = new-object System.Windows.Forms.CheckBox
$checkedListBox1 = new-object System.Windows.Forms.CheckedListBox
$comboBox1 = new-object System.Windows.Forms.ComboBox
$dateTimePicker1 = new-object System.Windows.Forms.DateTimePicker
$label1 = new-object System.Windows.Forms.Label
$linkLabel1 = new-object System.Windows.Forms.LinkLabel
$listBox1 = new-object System.Windows.Forms.ListBox
$listView1 = new-object System.Windows.Forms.ListView
$monthCalendar1 = new-object System.Windows.Forms.MonthCalendar
$notifyIcon1 = new-object System.Windows.Forms.NotifyIcon($components)
$numericUpDown1 = new-object System.Windows.Forms.NumericUpDown
$pictureBox1 = new-object System.Windows.Forms.PictureBox
$progressBar1 = new-object System.Windows.Forms.ProgressBar
$radioButton1 = new-object System.Windows.Forms.RadioButton
$richTextBox1 = new-object System.Windows.Forms.RichTextBox
$toolTip1 = new-object System.Windows.Forms.ToolTip($components)
$treeView1 = new-object System.Windows.Forms.TreeView
$contextMenuStrip1 = new-object System.Windows.Forms.ContextMenuStrip($components)
$toolStripMenuItem1 = new-object System.Windows.Forms.ToolStripMenuItem
$toolStripComboBox1 = new-object System.Windows.Forms.ToolStripComboBox
$toolStripSeparator1 = new-object System.Windows.Forms.ToolStripSeparator
$toolStripTextBox1 = new-object System.Windows.Forms.ToolStripTextBox
$statusStrip1 = new-object System.Windows.Forms.StatusStrip
$toolStrip1 = new-object System.Windows.Forms.ToolStrip
$BottomToolStripPanel = new-object System.Windows.Forms.ToolStripPanel
$TopToolStripPanel = new-object System.Windows.Forms.ToolStripPanel
$RightToolStripPanel = new-object System.Windows.Forms.ToolStripPanel
$LeftToolStripPanel = new-object System.Windows.Forms.ToolStripPanel
$ContentPanel = new-object System.Windows.Forms.ToolStripContentPanel
$maskedTextBox1 = new-object System.Windows.Forms.MaskedTextBox
$menuStrip1 = new-object System.Windows.Forms.MenuStrip
$toolStripContainer1 = new-object System.Windows.Forms.ToolStripContainer
$CaseàCocher = new-object System.Windows.Forms.CheckBox

$Reader = new-Object System.Resources.ResourceReader(\"$RessourcesPath\")

$openFileDialog1 = new-object System.Windows.Forms.OpenFileDialog
$saveFileDialog1 = new-object System.Windows.Forms.SaveFileDialog
$fontDialog1 = new-object System.Windows.Forms.FontDialog
$folderBrowserDialog1 = new-object System.Windows.Forms.FolderBrowserDialog
$colorDialog1 = new-object System.Windows.Forms.ColorDialog
$printDialog1 = new-object System.Windows.Forms.PrintDialog
$printPreviewDialog1 = new-object System.Windows.Forms.PrintPreviewDialog
$pageSetupDialog1 = new-object System.Windows.Forms.PageSetupDialog
$printDocument1 = new-object System.Drawing.Printing.PrintDocument
$timer1 = new-object System.Windows.Forms.Timer($components)
$pictureBox1.Image = [System.Drawing.Image] $Ressources[\"pictureBox1.Image\"]

A confirmer :
$directorySearcher1 = new-object System.DirectoryServices.DirectorySearcher
$process1 = new-object System.Diagnostics.Process
$reportViewer1 = new-object Microsoft.Reporting.WinForms.ReportViewer

La pièce jointe Convert_Form07.zip est absente ou indisponible



Message édité par: Laurent Dardenne, à: 16/09/09 22:19<br><br>Message édité par: Laurent Dardenne, à: 25/02/15 11:29

Tutoriels PowerShell
Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 7 mois #2199 par Laurent Dardenne
Quelques corrections :
V0.91 (16/04/08) (BatchMan):
- Corrections :
Une expression réguliére était erronée pour l'analyse des touches de raccourcis (Menus,...).
La variable du nom du fichier de ressources référençait le nom de la form et pas le nom du fichier de ressources : FrmMain.ressources au lieu NomDeProjet.ressources

- Modifications :
Les messages d'erreur concernant les fichiers sont plus explicites.
\&quot;Cosmétique\&quot; du script génèré.

La pièce jointe Convert_Form07_1.zip est absente ou indisponible


Tutoriels PowerShell
Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 7 mois #2209 par Robin Lemesle
Merci Laurent,

Comme nous en avons parlé, je vais mettre cette dernière version en téléchargement dans la bibliothèque de script en lieu et place de l'ancienne.

Merci, beau travail ;)

Robin MVP PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 7 mois #2214 par Laurent Dardenne
Robin écrit:

Merci Laurent,

De rien, j'ai beaucoup appris avec cette contribution.
Robin écrit:

en lieu et place de l'ancienne.

Super !

Reste que je suis d'avis qu'une refonte autour de l'instruction Switch combinée à des expressions réguliéres serait plus approprié.
Ensuite une des questions que je me pose sur ce script est : est-ce qu'on fait un exercice de style ou est-ce que l'on propose un script accessible à la pluspart des utilisateurs avancés de PS ?

L'objectif principal étant son utilité plus que son \&quot;esthétisme\&quot; et comme il y a peu de retour à ce sujet, je ne sais qu'en penser...

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 7 mois #2278 par VICTORIN
Moi je trouve que ce script est bon moyen de remplacer ce qui n'existe pas encore : une IDE pour faire des GUI en powershell.
Avec powershell, Microsoft propose enfin un language de scripting qui peux faire des GUI et je trouve ça super interessant d'exploiter cette fonctionnalité. Le scripting par rapport au language compilé à l'avantage d'être moi lourd à mettre à jour, et facilement modifiable de n'importe quelle machine (un notepad suffit).
Je pense que c'est une question de temps avant que 'on s'aperçoive de l'utilité de ce genre de script.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 7 mois #2279 par Laurent Dardenne
vinz2k écrit:

ce qui n'existe pas encore :
une IDE pour faire des GUI en powershell.

Il existe déjà [url=http://www.adminscripteditor.com/editor/sfd/
]Admin Script Editor[/url] (ASE), mais la version d'évaluation ne permet pas justement d'évaluer cet aspect là
vinz2k écrit:

Microsoft propose enfin un language de scripting qui peux faire des GUI

Oui mais cela reste limitée ne serais-ce que pour le multi-threading et le databinding, bien que pour ce dernier je n'ai pas suffisament étudié la question.
Microsoft a tout pour proposer un tel outil autour de [url=http://msdn2.microsoft.com/fr-fr/vsx2008/products/bb933751(en-us).aspx
]Visual Studio 2008 Shell (isolated mode)[/url], et
associé au Domain-Specific Language (DSL) cela pourrait donner de super soft ! Bon \&quot;faut juste\&quot; digérer les 2 SDK associés...

J'ai pensé écrire un plugin pour VS 2005 express mais leurs intégration n'est pas possible pour cette version.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.120 secondes
Propulsé par Kunena