MODULE Graphics; (* ========================================================================= Example GPCP .NET WinForms Graphics Program Rectangles, circles, text and lines. Author : Chris Burrows Created: August 2007 (c) 2007-2008 CFB Software http://www.cfbsoftware.com/gpcp ========================================================================= *) IMPORT Sys := "[mscorlib]System", Cpm := "[System]System.ComponentModel", Wfm := "[System.Windows.Forms]System.Windows.Forms", Drw := "[System.Drawing]System.Drawing", WinMain; TYPE MainForm = POINTER TO RECORD (Wfm.Form) components: Cpm.Container; pictureBox: Wfm.PictureBox END; VAR frm: MainForm; (* ==================================================================== *) PROCEDURE (frm: MainForm) Dispose*(disposing: BOOLEAN); BEGIN IF disposing THEN IF frm.components # NIL THEN frm.components.Dispose() END; frm.Dispose^(disposing) END END Dispose; (* ==================================================================== *) PROCEDURE (frm: MainForm) ActionPaint(sender: Sys.Object; e: Wfm.PaintEventArgs), NEW; CONST x1 = 20; x2 = 120; width = 50; height = 50; gap = 30; VAR g: Drw.Graphics; i, y, fontSize: INTEGER; font: Drw.Font; fontName: Sys.String; BEGIN g := e.get_Graphics(); y := 20; g.DrawRectangle(Drw.Pen.init(Drw.Brushes.get_Red()), x1, y, width, height); g.FillRectangle(Drw.Brushes.get_Red(), x2, y, width, height); INC(y, height + gap); g.DrawEllipse(Drw.Pen.init(Drw.Brushes.get_Blue()), x1, y, width, height); g.FillEllipse(Drw.Brushes.get_Blue(), x2, y, width, height); INC(y, height + gap); fontName := 'Arial'; g.DrawString(fontName, Drw.Font.init(fontName, 10), Drw.Brushes.get_Black(), x1, y); INC(y, gap); fontName := 'Times New Roman'; g.DrawString(fontName, Drw.Font.init(fontName, 12), Drw.Brushes.get_Gray(), x1, y); INC(y, gap); fontName := 'Tahoma'; g.DrawString(fontName, Drw.Font.init(fontName, 14), Drw.Brushes.get_Chartreuse(), x1, y); INC(y, gap); g.DrawLine(Drw.Pen.init(Drw.Brushes.get_Red()), x1, y, x2, y); INC(y, 3); g.DrawLine(Drw.Pen.init(Drw.Brushes.get_Orange()), x1, y, x2, y); INC(y, 3); g.DrawLine(Drw.Pen.init(Drw.Brushes.get_Yellow()), x1, y, x2, y); INC(y, 3); g.DrawLine(Drw.Pen.init(Drw.Brushes.get_Green()), x1, y, x2, y); INC(y, 3); g.DrawLine(Drw.Pen.init(Drw.Brushes.get_Blue()), x1, y, x2, y); INC(y, 3); g.DrawLine(Drw.Pen.init(Drw.Brushes.get_Indigo()), x1, y, x2, y); INC(y, 3); g.DrawLine(Drw.Pen.init(Drw.Brushes.get_Violet()), x1, y, x2, y) END ActionPaint; (* ==================================================================== *) PROCEDURE (frm: MainForm) ActionOnLoad(sender: Sys.Object; e: Sys.EventArgs), NEW; BEGIN frm.pictureBox.set_Dock(Wfm.DockStyle.Fill); frm.pictureBox.set_BackColor(Drw.Color.get_White()); REGISTER(frm.pictureBox.Paint, frm.ActionPaint); frm.get_Controls().Add(frm.pictureBox) END ActionOnLoad; (* ==================================================================== *) PROCEDURE (frm: MainForm) InitializeComponent(), NEW; CONST frmWidth = 200; frmHeight = 300; BEGIN NEW(frm.components); NEW(frm.pictureBox); frm.SuspendLayout(); frm.set_Text("Simple Graphics"); frm.set_AutoScaleBaseSize(Drw.Size.init(5, 13)); frm.set_ClientSize(Drw.Size.init(frmWidth, frmHeight)); frm.set_FormBorderStyle(Wfm.FormBorderStyle.Sizable); REGISTER(frm.Load, frm.ActionOnLoad); frm.ResumeLayout(FALSE) END InitializeComponent; (* ==================================================================== *) BEGIN NEW(frm); frm.InitializeComponent(); Wfm.Application.Run(frm) END Graphics.