432 lines
13 KiB
PowerShell
432 lines
13 KiB
PowerShell
Add-Type -AssemblyName System.Windows.Forms
|
|
Add-Type -AssemblyName System.Drawing
|
|
|
|
function mouseDown {
|
|
|
|
$Global:mCurFirstX = ([System.Windows.Forms.Cursor]::Position.X )
|
|
$Global:mCurFirstY = ([System.Windows.Forms.Cursor]::Position.Y )
|
|
|
|
}
|
|
|
|
function mouseMove ($mControlName) {
|
|
|
|
$mCurMoveX = ([System.Windows.Forms.Cursor]::Position.X )
|
|
$mCurMoveY = ([System.Windows.Forms.Cursor]::Position.Y )
|
|
|
|
if ($Global:mCurFirstX -ne 0 -and $Global:mCurFirstY -ne 0){
|
|
|
|
$mDifX = $Global:mCurFirstX - $mCurMoveX
|
|
$mDifY = $Global:mCurFirstY - $mCurMoveY
|
|
|
|
$this.Left = $this.Left - $mDifX
|
|
$this.Top = $this.Top - $mDifY
|
|
|
|
$Global:mCurFirstX = $mCurMoveX
|
|
$Global:mCurFirstY = $mCurMoveY
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
function mouseUP ($mControlObj) {
|
|
|
|
$mCurUpX = ([System.Windows.Forms.Cursor]::Position.X )
|
|
$mCurUpY = ([System.Windows.Forms.Cursor]::Position.Y )
|
|
|
|
$Global:mCurFirstX = 0
|
|
$Global:mCurFirstY = 0
|
|
|
|
|
|
Foreach ($mElement In $Global:mFormObj.Elements){
|
|
|
|
if ($mElement.Name -eq $this.name){
|
|
|
|
foreach( $mProp in $mElement.Properties){
|
|
|
|
Switch($mProp.Name){
|
|
|
|
'Top'{ $mProp.Value = $this.Top}
|
|
'Left'{$mProp.Value = $this.Left}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
renewGrids
|
|
}
|
|
|
|
Function renewGrids {
|
|
|
|
$mList = New-Object System.Collections.ArrayList
|
|
[array]$mElementsArr = $mFormObj.Elements | select Name,Type
|
|
$mList.AddRange($mElementsArr)
|
|
$mElemetnsGrid.DataSource = $mList
|
|
$mElemetnsGrid.Columns[1].ReadOnly = $true
|
|
|
|
$mList2 = New-Object System.Collections.ArrayList
|
|
[array]$mPropertyArr = $mFormObj.Elements[$mElemetnsGrid.CurrentRow.Index].Properties
|
|
$mList2.AddRange($mPropertyArr)
|
|
$mPropertiesGrid.DataSource = $mList2
|
|
$mPropertiesGrid.Columns[0].ReadOnly=$true
|
|
|
|
}
|
|
|
|
Function DeleteElement {
|
|
|
|
$Global:mFormObj.Elements = $mFormObj.Elements | ?{$_.Name -notlike $mFormObj.Elements[$mElemetnsGrid.CurrentRow.Index].Name}
|
|
renewGrids
|
|
|
|
}
|
|
|
|
Function AddProperty ($mName,$mValue){
|
|
|
|
$mPropertyObj = New-Object PSCustomObject
|
|
$mPropertyObj | Add-Member -Name 'Name' -MemberType NoteProperty -Value $mName
|
|
$mPropertyObj | Add-Member -Name 'Value' -MemberType NoteProperty -Value $mValue
|
|
return $mPropertyObj
|
|
|
|
}
|
|
|
|
Function ElementsChanged{
|
|
|
|
$mList2 = New-Object System.Collections.ArrayList
|
|
[array]$mPropertyArr = $mFormObj.Elements[$mElemetnsGrid.CurrentRow.Index].Properties
|
|
$mList2.AddRange($mPropertyArr)
|
|
$mPropertiesGrid.DataSource = $mList2
|
|
|
|
}
|
|
|
|
function ElementsEndEdit {
|
|
|
|
$Global:mFormObj.Elements[$mElemetnsGrid.CurrentRow.Index].Name = $mElemetnsGrid.CurrentCell.FormattedValue
|
|
repaintForm
|
|
|
|
}
|
|
|
|
|
|
|
|
Function AddElement {
|
|
|
|
$mPropertiesArr =@()
|
|
|
|
$mSameType = ($mFormObj.Elements | ?{$_.Type -like $mControlType.SelectedItem})
|
|
|
|
if($mSameType.count -ne $NUll -and $mSameType -ne $null) {
|
|
|
|
$mControlName=''+$mControlType.SelectedItem+($mSameType.count+1)
|
|
|
|
}elseif($mSameType.Count -eq $null -and $mSameType -ne $null){
|
|
|
|
$mControlName=''+$mControlType.SelectedItem+'2'
|
|
|
|
}else{
|
|
|
|
$mControlName=''+$mControlType.SelectedItem+'1'
|
|
|
|
}
|
|
|
|
$mPropertiesArr+= AddProperty 'Text' $mControlName
|
|
$mPropertiesArr+= AddProperty 'SizeX' 100
|
|
$mPropertiesArr+= AddProperty 'SizeY' 23
|
|
$mPropertiesArr+= AddProperty 'Top' 5
|
|
$mPropertiesArr+= AddProperty 'Left' 5
|
|
$mPropertiesArr+= AddProperty 'Anchor' 'Left,Top'
|
|
|
|
$mElementsObj = New-Object PSCustomObject
|
|
$mElementsObj |Add-Member -Name 'Name' -MemberType NoteProperty -Value $mControlName
|
|
$mElementsObj |Add-Member -Name 'Type' -MemberType NoteProperty -Value ($mControlType.SelectedItem)
|
|
$mElementsObj |Add-Member -Name 'Properties' -MemberType NoteProperty -Value $mPropertiesArr
|
|
$Global:mFormObj.Elements += $mElementsObj
|
|
|
|
renewGrids
|
|
|
|
repaintForm
|
|
|
|
}
|
|
|
|
function AddControl ($mControl) {
|
|
|
|
$mReturnControl = $null
|
|
|
|
switch ($mControl.Type){
|
|
|
|
"TextBox" {$mReturnControl = New-Object System.Windows.Forms.TextBox}
|
|
"ListBox" {$mReturnControl = New-Object System.Windows.Forms.ListBox}
|
|
"ComboBoX" {$mReturnControl = New-Object System.Windows.Forms.ComboBox}
|
|
"Label" {$mReturnControl = New-Object System.Windows.Forms.Label}
|
|
"DataGrid" {$mReturnControl = New-Object System.Windows.Forms.DataGridView}
|
|
"Button" {$mReturnControl = New-Object System.Windows.Forms.Button}
|
|
'CheckBox' {$mReturnControl = New-Object System.Windows.Forms.CheckBox}
|
|
'DateTimePicker' {$mReturnControl = New-Object System.Windows.Forms.DateTimePicker}
|
|
'ListView' {$mReturnControl = New-Object System.Windows.Forms.ListView}
|
|
'PictureBox' {$mReturnControl = New-Object System.Windows.Forms.PictureBox}
|
|
'RichTextBox' {$mReturnControl = New-Object System.Windows.Forms.RichTextBox}
|
|
'TreeView' {$mReturnControl = New-Object System.Windows.Forms.TreeView}
|
|
'WebBrowser' {$mReturnControl = New-Object System.Windows.Forms.WebBrowser}
|
|
"default" {write-host 'something goes wrong sorry :('}
|
|
|
|
}
|
|
|
|
$mReturnControl.Name = $mControl.Name
|
|
|
|
$mSizeX=$null
|
|
$mSizeY=$null
|
|
|
|
foreach ($mProperty in $mControl.Properties){
|
|
|
|
switch ($mProperty.Name){
|
|
'Text' {$mReturnControl.Text=$mProperty.Value}
|
|
'SizeX' {$mSizeX=$mProperty.Value}
|
|
'SizeY' {$mSizeY=$mProperty.Value}
|
|
'Top' {$mReturnControl.Top=$mProperty.Value}
|
|
'Left' {$mReturnControl.Left=$mProperty.Value}
|
|
'Anchor'{$mReturnControl.Anchor=$mProperty.Value}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
$mReturnControl.Size = New-Object System.Drawing.Size($mSizeX,$mSizeY)
|
|
$mReturnControl.Add_MouseDown({MouseDown})
|
|
$mReturnControl.Add_MouseMove({MouseMove ($mControl.Name)})
|
|
$mReturnControl.Add_MouseUP({MouseUP})
|
|
|
|
Return $mReturnControl
|
|
|
|
}
|
|
|
|
function PropertiesEndEdit{
|
|
|
|
foreach ($mProperty in $Global:mFormObj.Elements[$mElemetnsGrid.CurrentRow.Index].Properties){
|
|
|
|
if ($mProperty.Name -eq $mPropertiesGrid.currentrow.Cells[0].FormattedValue){
|
|
|
|
$mProperty.Value = $mPropertiesGrid.currentrow.Cells[1].FormattedValue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
repaintForm
|
|
|
|
}
|
|
|
|
|
|
Function repaintForm {
|
|
|
|
$mFormGroupBox.Size = New-Object System.Drawing.Size(($mFormObj.SizeX),($mFormObj.SizeY))
|
|
$mFormGroupBox.controls.clear()
|
|
|
|
Foreach ($mElement in $mFormObj.Elements){
|
|
|
|
$mFormGroupBox.controls.add((AddControl $mElement))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Function EditFormSize ($x,$y){
|
|
|
|
$Global:mFormObj.SizeX = $X
|
|
$Global:mFormObj.SizeY = $Y
|
|
|
|
repaintForm
|
|
|
|
}
|
|
|
|
|
|
function ExportForm {
|
|
|
|
$mFormObj
|
|
$mExportString = "
|
|
"
|
|
$mExportString+= '
|
|
Add-Type -AssemblyName System.Windows.Forms
|
|
Add-Type -AssemblyName System.Drawing
|
|
$MyForm = New-Object System.Windows.Forms.Form
|
|
$MyForm.Text="MyForm"
|
|
$MyForm.Size = New-Object System.Drawing.Size('+$mFormObj.SizeX+','+$mFormObj.SizeY+')
|
|
'
|
|
foreach ($mElement in $mFormObj.Elements){
|
|
|
|
$mExportString+='
|
|
|
|
$m'+$mElement.Name+' = New-Object System.Windows.Forms.'+$mElement.Type+''
|
|
$mPrSizeX=''
|
|
$mPrSizeY=''
|
|
|
|
foreach ($mProperty in $mElement.Properties){
|
|
|
|
If ($mProperty.Name -eq 'SizeX'){
|
|
|
|
$mPrSizeX = $mProperty.Value
|
|
|
|
}
|
|
elseIf ($mProperty.Name -eq 'SizeY'){
|
|
|
|
$mPrSizeY = $mProperty.Value
|
|
|
|
}
|
|
else{
|
|
|
|
$mExportString+='
|
|
$m'+$mElement.Name+'.'+$mProperty.Name +'="'+$mProperty.Value+'"'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$mExportString+='
|
|
$m'+$mElement.Name+'.Size = New-Object System.Drawing.Size('+$mPrSizeX+','+$mPrSizeY+')
|
|
$MyForm.Controls.Add($m'+$mElement.Name+')
|
|
'
|
|
|
|
}
|
|
|
|
$mExportString+= '$MyForm.ShowDialog()'
|
|
|
|
$mFileName=''
|
|
$mFileName = get-filename 'C:\'
|
|
if ($mFileName -notlike ''){
|
|
|
|
$mExportString > $mFileName
|
|
|
|
}
|
|
}
|
|
|
|
Function Get-FileName($initialDirectory) {
|
|
|
|
$SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
|
|
$SaveFileDialog.initialDirectory = $initialDirectory
|
|
$SaveFileDialog.filter = “Powershell Script (*.ps1)|*.ps1|All files (*.*)|*.*”
|
|
$SaveFileDialog.ShowDialog() | Out-Null
|
|
$SaveFileDialog.filename
|
|
|
|
}
|
|
|
|
|
|
$mForm = New-Object System.Windows.Forms.Form
|
|
$mForm.AutoSize = $true
|
|
$mForm.Text='FormsMaker'
|
|
|
|
$mControlType = New-Object System.Windows.Forms.ComboBoX
|
|
$mControlType.Anchor = 'Left,Top'
|
|
$mControlType.Size = New-Object System.Drawing.Size(100,23)
|
|
$mControlType.Left = 5
|
|
$mControlType.Top = 5
|
|
$mControlType.Items.Add("TextBox")
|
|
$mControlType.Items.Add("ListBox")
|
|
$mControlType.Items.Add("ComboBoX")
|
|
$mControlType.Items.Add("Label")
|
|
$mControlType.Items.Add("DataGrid")
|
|
$mControlType.Items.Add("Button")
|
|
$mControlType.Items.Add("CheckBox")
|
|
$mControlType.Items.Add("DateTimePicker")
|
|
$mControlType.Items.Add("ListView")
|
|
$mControlType.Items.Add("PictureBox")
|
|
$mControlType.Items.Add("RichTextBox")
|
|
$mControlType.Items.Add("TreeView")
|
|
$mControlType.Items.Add("WebBrowser")
|
|
$mForm.Controls.Add($mControlType)
|
|
|
|
$mAddButton = New-Object System.Windows.Forms.Button
|
|
$mAddButton.Anchor = 'Left,Top'
|
|
$mAddButton.Text = 'Add'
|
|
$mAddButton.Left = 110
|
|
$mAddButton.Top = 5
|
|
$mAddButton.Size = New-Object System.Drawing.Size(50,23)
|
|
$mAddButton.Add_Click({AddElement})
|
|
$mForm.Controls.Add($mAddButton)
|
|
|
|
$mFormLabel = New-Object System.Windows.Forms.Label
|
|
$mFormLabel.Text = 'Form Size:'
|
|
$mFormLabel.Top = 5
|
|
$mFormLabel.Left = 165
|
|
$mFormLabel.Anchor = 'Left,Top'
|
|
$mFormLabel.Size = New-Object System.Drawing.Size(80,23)
|
|
$mFormLabel.TextAlign='MiddleRight'
|
|
$mForm.Controls.Add($mFormLabel)
|
|
|
|
$mFormXTextBox = New-Object System.Windows.Forms.TextBox
|
|
$mFormXTextBox.left = 250
|
|
$mFormXTextBox.top = 5
|
|
$mFormXTextBox.Size = New-Object System.Drawing.Size(30,23)
|
|
$mFormXTextBox.Anchor = 'Left,Top'
|
|
$mFormXTextBox.Text=300
|
|
$mForm.Controls.Add($mFormXTextBox)
|
|
|
|
$mFormXLabel = New-Object System.Windows.Forms.Label
|
|
$mFormXLabel.Text = 'X'
|
|
$mFormXLabel.Top = 5
|
|
$mFormXLabel.Left = 280
|
|
$mFormXLabel.Anchor = 'Left,Top'
|
|
$mFormXLabel.Size = New-Object System.Drawing.Size(20,23)
|
|
$mFormXLabel.TextAlign='MiddleCenter'
|
|
$mFormXTextBox.Add_TextChanged({EditFormSize $mFormXTextBox.Text $mFormYTextBox.Text })
|
|
$mForm.Controls.Add($mFormXLabel)
|
|
|
|
$mFormYTextBox = New-Object System.Windows.Forms.TextBox
|
|
$mFormYTextBox.left = 300
|
|
$mFormYTextBox.top = 5
|
|
$mFormYTextBox.Size = New-Object System.Drawing.Size(30,23)
|
|
$mFormYTextBox.Anchor = 'Left,Top'
|
|
$mFormYTextBox.Text= 300
|
|
$mFormYTextBox.Add_TextChanged({EditFormSize $mFormXTextBox.Text $mFormYTextBox.Text})
|
|
$mForm.Controls.Add($mFormYTextBox)
|
|
|
|
$mFormGroupBox = New-Object System.Windows.Forms.GroupBox
|
|
$mFormGroupBox.left = 350
|
|
$mFormGroupBox.top = 5
|
|
$mFormGroupBox.Anchor = 'Left,Top'
|
|
$mFormGroupBox.Size = New-Object System.Drawing.Size($mFormXTextBox.Text,$mFormYTextBox.Text)
|
|
$mFormGroupBox.Text = 'New Form'
|
|
$mForm.Controls.Add($mFormGroupBox)
|
|
|
|
$mElemetnsGrid = New-Object System.Windows.Forms.DataGridView
|
|
$mElemetnsGrid.size = New-Object System.Drawing.Size(155,600)
|
|
$mElemetnsGrid.left=5
|
|
$mElemetnsGrid.top=33
|
|
$mElemetnsGrid.Anchor='Top,Left'
|
|
$mElemetnsGrid.RowHeadersVisible =$false
|
|
$mElemetnsGrid.Add_CellContentClick({ElementsChanged})
|
|
$mElemetnsGrid.Add_CellEndEdit({ElementsEndEdit})
|
|
$mForm.Controls.Add($mElemetnsGrid)
|
|
|
|
$mPropertiesGrid = New-Object System.Windows.Forms.DataGridView
|
|
$mPropertiesGrid.size = New-Object System.Drawing.Size(155,600)
|
|
$mPropertiesGrid.left=180
|
|
$mPropertiesGrid.top=33
|
|
$mPropertiesGrid.Anchor='Top,Left'
|
|
$mPropertiesGrid.ColumnHeadersVisible=$true
|
|
$mPropertiesGrid.RowHeadersVisible =$false
|
|
$mPropertiesGrid.Add_CellEndEdit({PropertiesEndEdit})
|
|
$mForm.Controls.Add($mPropertiesGrid)
|
|
|
|
$mDeleteButton = New-Object System.Windows.Forms.Button
|
|
$mDeleteButton.size = New-Object System.Drawing.Size(155,23)
|
|
$mDeleteButton.Text = 'Delete'
|
|
$mDeleteButton.Left = 5
|
|
$mDeleteButton.Top = 638
|
|
$mDeleteButton.Anchor = 'Top,Left'
|
|
$mDeleteButton.Add_Click({DeleteElement})
|
|
$mForm.Controls.Add($mDeleteButton)
|
|
|
|
$mExportButton = New-Object System.Windows.Forms.Button
|
|
$mExportButton.size = New-Object System.Drawing.Size(155,23)
|
|
$mExportButton.text = 'Export'
|
|
$mExportButton.Left = 180
|
|
$mExportButton.top = 638
|
|
$mExportButton.Anchor='Top,Left'
|
|
$mExportButton.Add_Click({ExportForm})
|
|
$mForm.Controls.Add($mExportButton)
|
|
|
|
$Global:mFormObj = new-object PSCustomObject
|
|
$Global:mFormObj | Add-Member -Name 'SizeX' -MemberType NoteProperty -Value 300
|
|
$Global:mFormObj | Add-Member -Name 'SizeY' -MemberType NoteProperty -Value 300
|
|
$Global:mFormObj | Add-Member -Name 'Elements' -MemberType NoteProperty -Value @()
|
|
$Global:mCurFirstX =0
|
|
$Global:mCurFirstY =0
|
|
|
|
$mForm.ShowDialog() |