require 'mscorlib' require 'System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' require 'System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' Application = System::Windows::Forms::Application BorderStyle = System::Windows::Forms::BorderStyle Bitmap = System::Drawing::Bitmap Button = System::Windows::Forms::Button Color = System::Drawing::Color ColorDialog = System::Windows::Forms::ColorDialog ComboBox = System::Windows::Forms::ComboBox Convert = System::Convert Decimal = System::Decimal DialogResult = System::Windows::Forms::DialogResult Enum = System::Enum EventArgs = System::EventArgs Font = System::Drawing::Font FontStyle = System::Drawing::FontStyle Form = System::Windows::Forms::Form FormBorderStyle = System::Windows::Forms::FormBorderStyle FormStartPosition = System::Windows::Forms::FormStartPosition HatchBrush = System::Drawing::Drawing2D::HatchBrush HatchStyle = System::Drawing::Drawing2D::HatchStyle Icon = System::Drawing::Icon Label = System::Windows::Forms::Label LinearGradientBrush = System::Drawing::Drawing2D::LinearGradientBrush LinearGradientMode = System::Drawing::Drawing2D::LinearGradientMode MainMenu = System::Windows::Forms::MainMenu MenuItem = System::Windows::Forms::MenuItem MessageBox = System::Windows::Forms::MessageBox MessageBoxButtons = System::Windows::Forms::MessageBoxButtons MessageBoxIcon = System::Windows::Forms::MessageBoxIcon NumericUpDown = System::Windows::Forms::NumericUpDown PathGradientBrush = System::Drawing::Drawing2D::PathGradientBrush Pen = System::Drawing::Pen PictureBox = System::Windows::Forms::PictureBox PictureBoxSizeMode = System::Windows::Forms::PictureBoxSizeMode Point = System::Drawing::Point Rectangle = System::Drawing::Rectangle Size = System::Drawing::Size Shortcut = System::Windows::Forms::Shortcut SolidBrush = System::Drawing::SolidBrush StatusBar = System::Windows::Forms::StatusBar TextBox = System::Windows::Forms::TextBox TextureBrush = System::Drawing::TextureBrush WrapMode = System::Drawing::Drawing2D::WrapMode class Frm < Form def initialize #for texture brush only @pic = Bitmap.new('D:\source\Clouds.jpg') #for other brushes @col1 = Color.Blue @col2 = Color.White #initialization self.InitializeComponent() end def InitializeComponent() @mnuMain = MainMenu.new() @mnuFile = MenuItem.new() @mnuExit = MenuItem.new() @mnuHelp = MenuItem.new() @mnuInfo = MenuItem.new() @lblLabel0 = Label.new() @lblLabel1 = Label.new() @lblLabel2 = Label.new() @lblLabel3 = Label.new() @lblLabel4 = Label.new() @lblLabel5 = Label.new() @lblLabel6 = Label.new() @lblLabel7 = Label.new() @lblLabel8 = Label.new() @lblLabel9 = Label.new() @cboBrushType = ComboBox.new() @cboDrawing = ComboBox.new() @txtColor1 = TextBox.new() @txtColor2 = TextBox.new() @btnColor1 = Button.new() @btnColor2 = Button.new() @cboBrushSize = ComboBox.new() @cboWrapMode = ComboBox.new() @cboHatchStyle = ComboBox.new() @nudRotation = NumericUpDown.new() @nudGradBlend = NumericUpDown.new() @cboGradMode = ComboBox.new() @picDemoArea = PictureBox.new() @sbStatusBar = StatusBar.new() @cdlg = ColorDialog.new() # #mnuMain # [@mnuFile, @mnuHelp].each {|item| @mnuMain.MenuItems.Add item} # #mnuFile # @mnuFile.MenuItems.Add @mnuExit @mnuFile.Text = '&File' # #mnuExit # @mnuExit.Shortcut = Shortcut.CtrlX @mnuExit.Text = 'E&xit' @mnuExit.Click {|sender, e| mnuExit_Click(sender, e)} # #mnuHelp # @mnuHelp.MenuItems.Add @mnuInfo @mnuHelp.Text = '&Help' # #mnuInfo # @mnuInfo.Text = 'About' @mnuInfo.Click {|sender, e| mnuInfo_Click(sender, e)} # #lblLabel0 # @lblLabel0.Location = Point.new(8, 16) @lblLabel0.Size = Size.new(96, 23) @lblLabel0.Text = 'Brush Type:' # #lblLabel1 # @lblLabel1.Location = Point.new(8, 40) @lblLabel1.Size = Size.new(96, 23) @lblLabel1.Text = 'Drawing:' # #lblLabel2 # @lblLabel2.Location = Point.new(8, 80) @lblLabel2.Size = Size.new(96, 23) @lblLabel2.Text = 'Color 1:' # #lblLabel3 # @lblLabel3.Location = Point.new(8, 104) @lblLabel3.Size = Size.new(96, 23) @lblLabel3.Text = 'Color 2:' # #lblLabel4 # @lblLabel4.Location = Point.new(8, 152) @lblLabel4.Size = Size.new(96, 23) @lblLabel4.Text = 'Brush Size:' # #lblLabel5 # @lblLabel5.Location = Point.new(8, 184) @lblLabel5.Size = Size.new(96, 23) @lblLabel5.Text = 'Wrap Mode:' # #lblLabel6 # @lblLabel6.Location = Point.new(8, 216) @lblLabel6.Size = Size.new(96, 23) @lblLabel6.Text = 'Hatch Style:' # #lblLabel7 # @lblLabel7.Location = Point.new(8, 248) @lblLabel7.Size = Size.new(96, 23) @lblLabel7.Text = 'Rotation:' # #lblLabel8 # @lblLabel8.Location = Point.new(8, 280) @lblLabel8.Size = Size.new(104, 23) @lblLabel8.Text = 'Gradient Blend:' # #lblLabel9 # @lblLabel9.Location = Point.new(8, 312) @lblLabel9.Size = Size.new(104, 23) @lblLabel9.Text = 'Gradient Mode:' # #cboBrushType # ['Solid', 'Hatch', 'Texture', 'LinearGradient', 'PathGradient'].each {|item| @cboBrushType.Items.Add item} @cboBrushType.Location = Point.new(112, 13) @cboBrushType.Size = Size.new(176, 24) @cboBrushType.SelectedItem = 'Solid' @cboBrushType.SelectedIndexChanged {|sender, e| RedrawPicture(sender, e)} # #cboDrawing # ['Fill', 'Ellipses', 'Lines'].each {|item| @cboDrawing.Items.Add item} @cboDrawing.Location = Point.new(112, 40) @cboDrawing.Size = Size.new(176, 24) @cboDrawing.SelectedItem = 'Fill' @cboDrawing.SelectedIndexChanged {|sender, e| RedrawPicture(sender, e)} # #txtColor1 # @txtColor1.BackColor = @col1 @txtColor1.Location = Point.new(112, 77) @txtColor1.Size = Size.new(144, 23) @txtColor1.Text = 'Color [Blue]' @txtColor1.TextChanged {|sender, e| RedrawPicture(sender, e)} # #txtColor2 # @txtColor2.BackColor = @col2 @txtColor2.Location = Point.new(112, 104) @txtColor2.Size = Size.new(144, 23) @txtColor2.Text = 'Color [White]' @txtColor2.TextChanged {|sender, e| RedrawPicture(sender, e)} # #btnColor1 # @btnColor1.Location = Point.new(256, 76) @btnColor1.Size = Size.new(32, 25) @btnColor1.Text = '...' @btnColor1.Click {|sender, e| btnColor1_Click(sender, e)} # #btnColor2 # @btnColor2.Location = Point.new(256, 103) @btnColor2.Size = Size.new(32, 25) @btnColor2.Text = '...' @btnColor2.Click {|sender, e| btnColor2_Click(sender, e)} # #cboBrushSize # ['Large', 'Medium', 'Small'].each {|item| @cboBrushSize.Items.Add item} @cboBrushSize.Location = Point.new(112, 149) @cboBrushSize.Size = Size.new(176, 24) @cboBrushSize.SelectedItem = 'Large' @cboBrushSize.SelectedIndexChanged {|sender, e| cboBrushSize_SelectedIndexChanged(sender, e)} # #cboWrapMode # @cboWrapMode.Location = Point.new(112, 181) @cboWrapMode.Size = Size.new(176, 24) @cboWrapMode.SelectedIndexChanged {|sender, e| RedrawPicture(sender, e)} # #cboHatchStyle # @cboHatchStyle.Location = Point.new(112, 213) @cboHatchStyle.Size = Size.new(176, 24) @cboHatchStyle.SelectedIndexChanged {|sender, e| RedrawPicture(sender, e)} # #nudRotation # @nudRotation.Increment = Decimal.new(5) @nudRotation.Location = Point.new(112, 245) @nudRotation.Maximum = Decimal.new(180) @nudRotation.Size = Size.new(176, 23) @nudRotation.ValueChanged {|sender, e| RedrawPicture(sender, e)} # #nudGradBlend # @nudGradBlend.DecimalPlaces = 2 @nudGradBlend.Increment = Decimal.new(0.10) @nudGradBlend.Location = Point.new(112, 277) @nudGradBlend.Maximum = Decimal.new(1) @nudGradBlend.Size = Size.new(176, 23) @nudGradBlend.Value = Decimal.new(1) @nudGradBlend.ValueChanged {|sender, e| RedrawPicture(sender, e)} # #cboGradMode # @cboGradMode.Location = Point.new(112, 309) @cboGradMode.Size = Size.new(176, 24) @cboGradMode.SelectedIndexChanged {|sender, e| RedrawPicture(sender, e)} # #picDemoArea # @picDemoArea.BorderStyle = BorderStyle.FixedSingle @picDemoArea.Location = Point.new(304, 16) @picDemoArea.Size = Size.new(312, 320) # #sbStatusBar # @sbStatusBar.SizingGrip = false # #Frm # self.ClientSize = Size.new(626, 371) [@lblLabel0, @lblLabel1, @lblLabel2, @lblLabel3, @lblLabel4, @lblLabel5, @lblLabel6, @lblLabel7, @lblLabel8, @lblLabel9, @cboBrushType, @cboDrawing, @txtColor1, @txtColor2, @btnColor1, @btnColor2, @cboBrushSize, @cboWrapMode, @cboHatchStyle, @nudRotation, @nudGradBlend, @cboGradMode, @picDemoArea, @sbStatusBar].each {|item| self.Controls.Add item} self.Font = Font.new('Microsoft Sans Serif', 10) self.FormBorderStyle = FormBorderStyle.FixedSingle self.MaximizeBox = false self.Menu = @mnuMain self.StartPosition = FormStartPosition.CenterScreen self.Text = 'Brushes' self.Load {|sender, e| frmMain_Load(sender, e)} end def mnuExit_Click(sender, e) Application.exit end def mnuInfo_Click(sender, e) FrmA.new().ShowDialog() end def btnColor1_Click(sender, e) if @cdlg.ShowDialog() == DialogResult.OK @col1 = @cdlg.Color @txtColor1.Text = @cdlg.Color.to_s @txtColor1.BackColor = @cdlg.Color end end def btnColor2_Click(sender, e) if @cdlg.ShowDialog() == DialogResult.OK @col2 = @cdlg.Color @txtColor2.Text = @cdlg.Color.to_s @txtColor2.BackColor = @cdlg.Color end end def cboBrushSize_SelectedIndexChanged(sender, e) case @cboBrushSize.Text when 'Large' @rec = Rectangle.new(0, 0, @picDemoArea.Width, @picDemoArea.Height) when 'Medium' @rec = Rectangle.new(0, 0, @picDemoArea.Width / 2, @picDemoArea.Height / 2) when 'Small' @rec = Rectangle.new(0, 0, @picDemoArea.Width / 4, @picDemoArea.Height / 4) end RedrawPicture(@cboBrushSize, EventArgs.new()) end def RedrawPicture(sender, e) @picDemoArea.CreateGraphics().Clear(@col2) @picDemoArea.Refresh() #brush selector case @cboBrushType.Text when 'Solid' @txtColor2.Enabled = false @btnColor2.Enabled = false @cboBrushSize.Enabled = false @cboWrapMode.Enabled = false @cboHatchStyle.Enabled = false @nudRotation.Enabled = false @nudGradBlend.Enabled = false @cboGradMode.Enabled = false @brush = SolidBrush.new(@col1) when 'Hatch' @sbStatusBar.Text = '' @txtColor1.Enabled = true @txtColor2.Enabled = true @btnColor1.Enabled = true @btnColor2.Enabled = true @cboBrushSize.Enabled = false @cboWrapMode.Enabled = false @cboHatchStyle.Enabled = true @nudRotation.Enabled = false @nudGradBlend.Enabled = false @cboGradMode.Enabled = false @brush = HatchBrush.new(@cboHatchStyle.SelectedItem, @col1, @col2) when 'Texture' @txtColor1.Enabled = false @txtColor2.Enabled = false @btnColor1.Enabled = false @btnColor2.Enabled = false @cboBrushSize.Enabled = true @cboWrapMode.Enabled = true @cboHatchStyle.Enabled = false @nudRotation.Enabled = true @nudGradBlend.Enabled = false @cboGradMode.Enabled = false begin tb = TextureBrush.new(@pic, @rec) tb.WrapMode = @cboWrapMode.SelectedItem tb.RotateTransform(Convert.ToSingle(@nudRotation.Value)) @brush = tb rescue Exception => e @sbStatusBar.Text = e.Message end when 'LinearGradient' @sbStatusBar.Text = '' @txtColor1.Enabled = true @txtColor2.Enabled = true @btnColor1.Enabled = true @btnColor2.Enabled = true @cboBrushSize.Enabled = true @cboWrapMode.Enabled = false @cboHatchStyle.Enabled = false @nudGradBlend.Enabled = true @cboGradMode.Enabled = true lgb = LinearGradientBrush.new(@rec, @col1, @col2, @cboGradMode.SelectedItem) lgb.RotateTransform(Convert.ToSingle(@nudRotation.Value)) lgb.SetBlendTriangularShape(Convert.ToSingle(@nudGradBlend.Value)) @brush = lgb when 'PathGradient' @cboWrapMode.Enabled = true @cboGradMode.Enabled = false points = System::Array[Point].new([Point.new(0, @rec.Height), Point.new(@rec.Width, @rec.Height), Point.new(@rec.Width, 0)]) pgb = PathGradientBrush.new(points) pgb.CenterColor = @col1 pgb.SurroundColors = System::Array[Color].new([@col2]) pgb.WrapMode = @cboWrapMode.SelectedItem pgb.RotateTransform(Convert.ToSingle(@nudRotation.Value)) pgb.SetBlendTriangularShape(Convert.ToSingle(@nudGradBlend.Value)) @brush = pgb end #drawing images gfx = @picDemoArea.CreateGraphics() case @cboDrawing.Text when 'Fill' gfx.FillRectangle(@brush, 0, 0, @picDemoArea.Width, @picDemoArea.Height) when 'Ellipses' gfx.FillEllipse(@brush, @picDemoArea.Width / 10, @picDemoArea.Height / 10, @picDemoArea.Width / 2, @picDemoArea.Height / 2) gfx.FillEllipse(@brush, @picDemoArea.Width / 3, @picDemoArea.Height / 3, @picDemoArea.Width / 2, @picDemoArea.Height / 2) when 'Lines' pen = Pen.new(@brush, 40) gfx.DrawLine(pen, 0, 0, @picDemoArea.Width, @picDemoArea.Height) gfx.DrawLine(pen, 0, 0, 0, @picDemoArea.Height) gfx.DrawLine(pen, 0, 0, @picDemoArea.Width, 0) gfx.DrawLine(pen, @picDemoArea.Width, 0, @picDemoArea.Width, @picDemoArea.Height) gfx.DrawLine(pen, 0, @picDemoArea.Height, @picDemoArea.Width, @picDemoArea.Height) gfx.DrawLine(pen, @picDemoArea.Width, 0, 0, @picDemoArea.Height) end end def frmMain_Load(sender, e) @rec = Rectangle.new(0, 0, @picDemoArea.Width, @picDemoArea.Height) #cboWrapMode filling Enum.GetValues(WrapMode.to_clr_type).each {|i| @cboWrapMode.Items.Add i} @cboWrapMode.SelectedIndex = 0 #cboHatchStyle filling Enum.GetValues(HatchStyle.to_clr_type).each {|i| @cboHatchStyle.Items.Add i} @cboHatchStyle.SelectedIndex = 0 #cboGradMode filling Enum.GetValues(LinearGradientMode.to_clr_type).each {|i| @cboGradMode.Items.Add i} @cboGradMode.SelectedIndex = 0 end end class FrmA < Form def initialize self.InitializeComponent() end def InitializeComponent() @pbImage = PictureBox.new() @lblName = Label.new() @lblCopy = Label.new() @btnExit = Button.new() # #pbImage # @pbImage.Location = Point.new(16, 16) @pbImage.Size = Size.new(32, 32) @pbImage.SizeMode = PictureBoxSizeMode.StretchImage # #lblName # @lblName.Font = Font.new('Microsoft Sans Serif', 9, FontStyle.Bold) @lblName.Location = Point.new(53, 19) @lblName.Size = Size.new(360, 18) @lblName.Text = 'Brushes v1.00' # #lblCopy # @lblCopy.Location = Point.new(55, 37) @lblCopy.Size = Size.new(360, 23) @lblCopy.Text = '(C) 2012 Grigori Zakharov gregzakh@gmail.com' # #btnExit # @btnExit.Location = Point.new(135, 67) @btnExit.Text = 'OK' # #FrmA # self.AcceptButton = @btnExit self.CancelButton = @btnExit self.ClientSize = Size.new(350, 110) [@pbImage, @lblName, @lblCopy, @btnExit].each {|item| self.Controls.Add item} self.ControlBox = false self.FormBorderStyle = FormBorderStyle.FixedSingle self.ShowInTaskbar = false self.StartPosition = FormStartPosition.CenterParent self.Text = 'About...' self.Load {|sender, e| frmAbout_Load(sender, e)} end def frmAbout_Load(sender, e) begin icon = Icon @pbImage.Image = self.icon.ToBitmap() rescue Exception => e MessageBox.Show(e.Message, self.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop) end end end Application.enable_visual_styles Application.run Frm.new()