Question [Convert-Form][V0.7] Nouvelle version
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
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.
Composants supporté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
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.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
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.
\"Cosmétique\" 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.
- Robin Lemesle
- Hors Ligne
- Modérateur
- Messages : 260
- Remerciements reçus 0
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.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
De rien, j'ai beaucoup appris avec cette contribution.Merci Laurent,
Robin écrit:
Super !en lieu et place de l'ancienne.
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 \"esthétisme\" 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.
- VICTORIN
- Hors Ligne
- Nouveau membre
- Messages : 5
- Remerciements reçus 0
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.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
Il existe déjà [url=http://www.adminscripteditor.com/editor/sfd/ce qui n'existe pas encore :
une IDE pour faire des GUI en powershell.
]Admin Script Editor[/url] (ASE), mais la version d'évaluation ne permet pas justement d'évaluer cet aspect là
vinz2k écrit:
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 propose enfin un language de scripting qui peux faire des GUI
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 \"faut juste\" 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.
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Contributions à la communauté
- [Convert-Form][V0.7] Nouvelle version