MODULE ImageFromFile; (* ========================================================================= Example GPCP .NET WinForms Graphics Program Prompt for a filename of a jpg or bmp format file using a standard File Open dialog and display the image on a form Author : Chris Burrows Created: Aug 2006 (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 Panel = POINTER TO RECORD (Wfm.Panel) END; MainForm = POINTER TO RECORD (Wfm.Form) components: Cpm.Container; openFile: Wfm.OpenFileDialog; img: Drw.Image; panel: Panel; fileName: Sys.String 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) OpenFile(), NEW; CONST imageFilter = "JPEG (*.jpg)|*.jpg|Bitmap (*.bmp)|*.bmp|All files (*.*)|*.*"; BEGIN NEW(frm.openFile); frm.openFile.set_Filter(imageFilter); IF (frm.openFile.ShowDialog() = Wfm.DialogResult.OK) THEN frm.fileName := frm.openFile.get_FileName(); frm.img := Drw.Image.FromFile(frm.fileName); frm.panel.set_ClientSize(Drw.Size.init(frm.img.get_Width(), frm.img.get_Height())) END END OpenFile; (* ==================================================================== *) PROCEDURE (panel: Panel) PanelPaint(sender: Sys.Object; e: Wfm.PaintEventArgs), NEW; VAR g: Drw.Graphics; BEGIN panel.set_DoubleBuffered(TRUE); g := e.get_Graphics(); g.DrawImage(frm.img, 0, 0, frm.img.get_Width(), frm.img.get_Height()) END PanelPaint; (* ==================================================================== *) PROCEDURE (frm: MainForm) InitializeComponent(), NEW; BEGIN NEW(frm.components); NEW(frm.panel); frm.SuspendLayout(); frm.set_Text("Image from File"); frm.set_AutoScaleBaseSize(Drw.Size.init(5, 13)); frm.set_AutoScroll(TRUE); (* frm.panel.set_Dock(Wfm.DockStyle.Fill); *) frm.get_Controls().Add(frm.panel); REGISTER(frm.panel.Paint, frm.panel.PanelPaint); frm.ResumeLayout(FALSE) END InitializeComponent; (* ==================================================================== *) BEGIN NEW(frm); frm.InitializeComponent(); frm.OpenFile(); Wfm.Application.Run(frm) END ImageFromFile.