unit unitMPLdemo; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MPLLib_TLB; type TfrmMPLdemo = class(TForm) Label1: TLabel; editFilename: TEdit; Label2: TLabel; cbSolver: TComboBox; btnSolve: TButton; btnBrowse: TButton; ODFile: TOpenDialog; procedure btnSolveClick(Sender: TObject); procedure btnBrowseClick(Sender: TObject); function ParseAndSolveModel(model: String): Boolean; private { Private declarations } public { Public declarations } end; var frmMPLdemo: TfrmMPLdemo; MPL: OptiMax; csModel: Model; implementation {$R *.DFM} procedure TfrmMPLdemo.btnSolveClick(Sender: TObject); begin if cbSolver.ItemIndex < 0 then begin MessageDlg('You must choose a solver',mtError,[mbOk],0); end else if not FileExists(editFilename.Text) then begin MessageDlg('Can''t find file: ' + editFilename.Text, mtError,[mbOk],0); end else begin MPL := CoOptiMax.Create; MPL.Solvers.Add(cbSolver.Items[cbSolver.ItemIndex]); csModel := MPL.Models.Add('demo'); if ParseAndSolveModel(editFilename.Text) then begin MessageDlg(csModel.Solution.ResultString + #13'Objective = ' + FloatToStr(csModel.Solution.ObjectValue) + #13'Solver used: ' + cbSolver.Items[cbSolver.ItemIndex] ,mtInformation,[mbOk],0); end; end; end; function TfrmMPLdemo.ParseAndSolveModel(model: String): Boolean; var parseStatus, solveStatus: Integer; begin //Parse the model parseStatus := csModel.ReadFile(model); If parseStatus <> 0 Then begin // Errors were encountered, display message MessageDlg('Error parsing model' ,mtError, [mbOk], 0); Result := FALSE; Exit; end; // Solve the model solveStatus := csModel.Solve(MPL.CurrentSolver); If solveStatus <> 0 Then begin // Errors were encountered, display message MessageDlg('Error solving model',mtError, [mbOk], 0); Result := FALSE; Exit; end; // Success Result := TRUE; end; procedure TfrmMPLdemo.btnBrowseClick(Sender: TObject); begin if ODFile.Execute then editFilename.Text := ODFile.Filename; end; end.