PowerShellで画像表示の改良(ファイルを選択できるようにする)

今回はメニューをつけて、ファイルを選択できるようにしました。しかし、ワンライナー限定なので、一行で長い関数を書くことになります。

Add-Type -Assembly System.Windows.Forms
$w = New-Object System.Windows.Forms.Form
#
$ms = New-Object System.Windows.Forms.MenuStrip
$w.Controls.Add($ms)
#
$mi_file = New-Object System.Windows.Forms.ToolStripMenuItem("ファイル")
$ms.Items.Add($mi_file)
#
$pb = New-Object System.Windows.Forms.PictureBox
$pb.Location = New-Object System.Drawing.Point(0, $ms.Height)
$w.Controls.Add($pb)
#
$mi_open = New-Object System.Windows.Forms.ToolStripMenuItem("開く")
$mi_file.DropDownItems.Add($mi_open)
#
$mi_separator = New-Object System.Windows.Forms.ToolStripSeparator
$on_open_click = {$ofd = New-Object System.Windows.Forms.OpenFileDialog; $ofd.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*"; if ($ofd.ShowDialog() -eq "OK"){$w.Text = $ofd.FileName; $img = New-Object System.Drawing.Bitmap($ofd.FileName); $pb.Image = $img; $pb.ClientSize = $img.Size}}
$mi_open.Add_Click($on_open_click)
$mi_file.DropDownItems.Add($mi_separator)
#
$mi_exit = New-Object System.Windows.Forms.ToolStripMenuItem("終了")
$mi_exit.Add_Click({$w.Dispose()})
$mi_file.DropDownItems.Add($mi_exit)
#
$w.ShowDialog()

$on_open_click というのが処理内容です。空白行が禁止なのでコメント行にしているし見辛いことこの上ないです。OpenFileDialogオブジェクトをあらかじめ作っておくと多少ましになりますが、あまりうれしくないかもしれません。

Add-Type -Assembly System.Windows.Forms
$w = New-Object System.Windows.Forms.Form
#
$ms = New-Object System.Windows.Forms.MenuStrip
$w.Controls.Add($ms)
#
$mi_file = New-Object System.Windows.Forms.ToolStripMenuItem("ファイル")
$ms.Items.Add($mi_file)
#
$pb = New-Object System.Windows.Forms.PictureBox
$pb.Location = New-Object System.Drawing.Point(0, $ms.Height)
$w.Controls.Add($pb)
#
$mi_open = New-Object System.Windows.Forms.ToolStripMenuItem("開く")
$mi_file.DropDownItems.Add($mi_open)
#
$mi_separator = New-Object System.Windows.Forms.ToolStripSeparator
$ofd = New-Object System.Windows.Forms.OpenFileDialog
$ofd.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*"
$on_open_click = {if ($ofd.ShowDialog() -eq "OK"){$w.Text = $ofd.FileName; $img = New-Object System.Drawing.Bitmap($ofd.FileName); $pb.Image = $img; $pb.ClientSize = $img.Size}}
$mi_open.Add_Click($on_open_click)
$mi_file.DropDownItems.Add($mi_separator)
#
$mi_exit = New-Object System.Windows.Forms.ToolStripMenuItem("終了")
$mi_exit.Add_Click({$w.Dispose()})
$mi_file.DropDownItems.Add($mi_exit)
#
$w.ShowDialog()

本来ならスクロールバーをつけるべきなんでしょうね。。。。それは気が向いたら作ってみます。