Модификация приложения F #: создание форм и рисование объектов на форме
F# является . NET -языком и ему доступно всё то что можно реализовать и на C#. Например, попробуем поработать с графикой GDI +.
Следующий блок кода будет создавать простую форму Windows Forms и рисовать в ней два объекта. Для выхода с формы будет предусмотрена одна кнопка «Выход» (приложение не будет закрыто).
// Создание формы Windows Forms: Рисование объектов на форме
Console.Title <- "Различные примеры (F#) :: Рисование объектов на форме"
open System.Collections.Generic
open System.Windows.Forms
open System.ComponentModel
open System.Drawing
let graphicForm = new Form(Text = "Различные примеры (F#) :: Рисование объектов на форме", AutoScaleDimensions = new System.Drawing.SizeF(60.0F, 13.0F), ClientSize = new System.Drawing.Size(500, 200), StartPosition = FormStartPosition.CenterScreen)
// Создаём элементы управления
let exitButton = new Button(Text = "Выход", Location = new System.Drawing.Point(415, 167), Size = new Size(75, 23))
// Событие нажатия на кнопку "Выход"
exitButton.Click.Add(fun quit -> graphicForm.Close())
// Событие прорисовки элементов формы
graphicForm.Paint.Add(fun draw ->
let array = [|new Point(100, 150);new Point(250, 10);new Point(400, 150)|]
// Перо рисования (цвет: синий, толщина 10 пикселей)
let pen = new Pen(Color.Blue, Width = 10.0f)
// Создаём заливку
let brush = new SolidBrush(Color.LightGreen)
// Рисуем треугольник на основе массива точек
draw.Graphics.DrawPolygon(pen, array)
// Заполняем треугольник
draw.Graphics.FillPolygon(brush, array)
// Рисуем эллипс
draw.Graphics.DrawEllipse(pen, 10.0f, 10.0f, 100.0f, 100.0f)
// Заполняем эллипс
draw.Graphics.FillEllipse(brush, 10.0f, 10.0f, 100.0f, 100.0f))
// Добавляем на форму кнопку "Выход"
graphicForm.Controls.Add(exitButton)
// Запускаем новую форму
|
|
Application.Run(graphicForm)
printfn "\t\t\tНажмите клавишу Enter для продолжения..."
Console.ReadKey()
Console.Clear()
Компилируем приложение (Debug) и запускаем. Как только доберёмся до этой итерации в приложении, увидим открывшуюся форму и два нарисованных на форме объекта. Для выхода с формы жмём кнопку «Выход»:
Рис. 4. 1. Результат работы приложения F#: форма «Рисование объектов на форме»
Следующий пример немного содержательнее. На форме будут создано три кнопки. «Выход», «Загрузить» и «Печать». Вторая кнопка: вызывает стандартный диалог открытия файлов (изображений двух типов: JPEG и GIF). После выбора файла, изображения, оно будет отмасштабировано и помещено в PictureBox на форме. Нажатие на кнопку «Печать» отправит рисунок печататься на первом же возможном принтере (если тот подключен к ПК). Также, если на ПК установлено Microsoft Office 2010 и OneNote 2010 в комплекте с «офисом», нажатие кнопки «Печать» вызовет это приложение. Также, код изменяет курсор на форме на один из стандартных (крест), но можно использовать и свой (закомментированный код). Весь код такой:
// Создание формы Windows Forms: Печать выбранного рисунка
Console.Title <- "Различные примеры (F#) :: Печать выбранного рисунка"
open System.Drawing.Printing
|
|
open System.Drawing.Imaging
let imageForm = new Form(Text = "Различные примеры (F#) :: Печать выбранного рисунка", AutoScaleDimensions = new System.Drawing.SizeF(60.0F, 13.0F), ClientSize = new System.Drawing.Size(500, 250), StartPosition = FormStartPosition.CenterScreen)
// Создаём элементы управления
let exitButton2 = new Button(Text = "Выход", Location=new System.Drawing.Point(400, 210))
let loadButton2 = new Button(Text = "Загрузить", Location=new System.Drawing.Point(320, 210))
let printButton2 = new Button(Text = "Печать", Location=new System.Drawing.Point(240, 210))
let pictueBox2 = new PictureBox(SizeMode = PictureBoxSizeMode.StretchImage, Location = new System.Drawing.Point(20, 20), BorderStyle = BorderStyle.FixedSingle, Size = new System.Drawing.Size(100, 100))
let label2 = new Label(AutoSize = true, Location = new System.Drawing.Point(0, 120))
let openFileDialog2 = new OpenFileDialog()
let draw2 = imageForm.CreateGraphics()
let printDocument2 = new System.Drawing.Printing.PrintDocument()
imageForm.Controls.Add(pictueBox2)
imageForm.Controls.Add(loadButton2)
imageForm.Controls.Add(label2)
imageForm.Controls.Add(printButton2)
imageForm.Controls.Add(exitButton2)
// События нажатия кнопок
printButton2.Click.Add(fun startprint2 -> printDocument2.Print())
loadButton2.Click.Add(fun load2 ->
openFileDialog2.Filter <- "Изображения JPEG (*.jpg,*.jpeg)|*.jpg;*.jpeg|Изображения GIF (*.gif)|*.gif"
openFileDialog2.Title <- "Различные примеры (F#) :: Выбор файла изображения"
if (openFileDialog2.ShowDialog() = DialogResult.OK) then
// Создаём растровый рисунок и снимаем поворот и отражение (если есть)
let bitmap2 = new System.Drawing.Bitmap(openFileDialog2.FileName)
bitmap2.RotateFlip(RotateFlipType.RotateNoneFlipNone)
// Помещаем выбранное изображение в PictureBox
|
|
pictueBox2.Image <- bitmap2
// Отображаем в Label асболютный путь до изображения
label2.Text <- "\tИмя файла изображения:\n" + Convert.ToString(Convert.ToChar(32)) + (openFileDialog2.FileName))
// Вызываем страницу печати
printDocument2.PrintPage.Add(fun printData2 -> draw2.DrawImage(pictueBox2.Image, 10, 10))
exitButton2.Click.Add(fun quit2 -> imageForm.Close())
// Создание своего курсора (добавленного как ресурс в корень проекта)
// let customCursor2 = new System.Windows.Forms.Cursor("/Pointer.cur")
// imageForm.MouseHover.Add(fun custom2 -> imageForm.Cursor <- customCursor2)
imageForm.MouseHover.Add(fun Cross2 -> imageForm.Cursor <- Cursors.Cross)
[<STAThreadAttribute>]
Application.Run(imageForm)
printfn "\t\t\tНажмите клавишу Enter для продолжения..."
Console.ReadKey()
Console.Clear()
Компилируем приложение (Debug) и запускаем. Жмём «Загрузить», выбираем любое изображение с нужным расширением, затем, если есть принтер жмём на «Печать»:
Рис. 4. 2. Результат работы приложения F#: форма «Печать выбранного рисунка»
Наконец добавим последний код, реализующий рисование. На этот раз будем рисовать курсором мыши на форме (аналог инструмент «карандаша»). Толщина пера будет неизменной, а вот цвет будем выбирать через стандартный диалог выбора цвета. Также на форме будет кнопка «Стереть»:
// Создание формы Windows Forms: Рисование мышкой
Console.Title <- "Различные примеры (F#) :: Рисование мышкой"
|
|
open System.Drawing.Drawing2D
let drawingForm = new Form(Text = "Различные примеры (F#) :: Рисование мышкой", AutoScaleDimensions = new System.Drawing.SizeF(60.0F, 13.0F), ClientSize = new System.Drawing.Size(500, 250), StartPosition = FormStartPosition.CenterScreen)
let exitButton3 = new Button(Text = "Выход", Location = new System.Drawing.Point(400, 210))
let eraseButton3 = new Button(Text = "Очистить", Location = new System.Drawing.Point(320, 210))
let colorButton3 = new Button(Text = "Цвет пера", Location = new System.Drawing.Point(240, 210))
drawingForm.Controls.Add(exitButton3)
drawingForm.Controls.Add(eraseButton3)
drawingForm.Controls.Add(colorButton3)
// Создаём диалог выбора цвета
let colorDialog3 = new ColorDialog()
// Создаём объект ColorBlend
let mutable color3 = new ColorBlend()
// Инициализируем объекты рисования
let createGraphics3 = drawingForm.CreateGraphics()
createGraphics3.SmoothingMode<-SmoothingMode.HighQuality
drawingForm.Load.Add(fun background3 ->
// Устанавливаем цвет заливки по умолчанию: Indigo
color3.Colors <- [|Color.Indigo|])
// Событие перемещения мыши на форме
drawingForm.MouseMove.Add(fun trail->
// Когда мышка двигается и левая кнопка нажата
if (trail.Button = System.Windows.Forms.MouseButtons.Left) then
//Рисуем объект с выбранным цветом из диалога выбора цвета (или цвета по умолчанию)
createGraphics3.FillRectangle(new SolidBrush(color3.Colors.[0]),new Rectangle(trail.X,trail.Y,5,5)))
// Событие нажатия кнопки "Очистить", возвращаем цвет формы и стираем всё на форме
eraseButton3.Click.Add(fun erase3-> createGraphics3.Clear(drawingForm.BackColor))
exitButton3.Click.Add(fun quit3 -> drawingForm.Close())
colorButton3.Click.Add(fun colors3 ->
// Вызываем диалог выбора цвета
if colorDialog3.ShowDialog() = DialogResult.OK then
// Сохраняем выбранный цвет
color3.Colors<-[|colorDialog3.Color|])
Application.Run(drawingForm)
printfn "\t\t\tНажмите клавишу Enter для продолжения..."
Console.ReadKey()
Console.Clear()
Компилируем приложение (Debug) и запускаем. Зажимаем левую кнопку мыши на форме, рисуем, выбираем другой текст, рисуем, стираем, выходим:
Рис. 4. 3. Результат работы приложения F#: форма «Рисование мышкой»
Дата добавления: 2019-09-13; просмотров: 198; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!