⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lpmain.pas

📁 线性规划CAI应用程序及原代码
💻 PAS
📖 第 1 页 / 共 3 页
字号:
    enter_num:integer;
begin
if (varnum=0) or (leashnum=0) then
 begin
   showmessage('文件格式不对,请使用标准的格式');
 end
else
begin
 sele:=true;
 docalculate:=true;
stringgrid1.ColCount :=varnum+1;
stringgrid1.rowcount:=leashnum+1;
if (not tiaojianfree) then
begin
 for i:=1 to originvarnum do
   begin
	  tiaojianx[i].visible:=false;
	  tiaojianvar[i].visible:=false;
	  tiaojianequal[i].visible:=false;

	  tiaojianx[i].free;
     tiaojianvar[i].free;
	  tiaojianequal[i].free;
   end;
end;
tiaojianfree:=true;
label1.visible:=true;
label1.left:=5;
label1.top:=label4.top+45;
if (objtype='max') or (objtype='Max') then
  label1.caption:='Max(f(x))='
else
  label1.caption:='Min(f(x))=';
stringgrid4.visible:=true;
stringgrid4.width:=varnum*(colw+1)+1;
stringgrid4.height:=2*(roww+1)+adjust;
stringgrid4.colcount:=varnum;
stringgrid4.left:=label1.left+label1.width+2;
stringgrid4.top:=label1.top-(roww+1);
for i:=1 to varnum do
 begin
  stringgrid4.cells[i-1,0]:='X'+inttostr(i);
 end;
stringgrid1.visible:=true;
stringgrid2.visible:=true;
stringgrid3.visible:=true;
stringgrid1.left:=stringgrid4.left;
stringgrid1.top:=stringgrid4.top+stringgrid4.height+30;
stringgrid2.cells[0,0]:='等式类型';
stringgrid3.cells[0,0]:='右端项';
stringgrid2.rowcount:=leashnum+1;
stringgrid3.rowcount:=leashnum+1;
if bigques then
begin
     if varnum>8 then
     begin
     stringgrid1.width:=(colw+1)*9+10;
     stringgrid1.Height :=(roww+1)*(leashnum+1)+20;
     stringgrid1.ScrollBars :=sshorizontal;
     end
     else
     stringgrid1.width:=(colw+1)*(varnum+1)+adjust;
     if leashnum>8 then
         if varnum>8 then
         begin
         stringgrid1.Height :=(roww+1)*9+20;
         stringgrid1.ScrollBars :=ssboth;
         end
         else
         begin
         stringgrid1.Height :=(roww+1)*9+adjust;
         stringgrid1.ScrollBars :=ssvertical;
         end
     else
         if varnum>8 then
         begin
         stringgrid1.Height :=(roww+1)*(leashnum+1)+20;
         stringgrid1.ScrollBars :=sshorizontal;
         end
         else
         stringgrid1.Height :=(roww+1)*(leashnum+1)+adjust;
end
else
begin
stringgrid1.width:=(colw+1)*(varnum+1)+adjust;
stringgrid1.Height :=(roww+1)*(leashnum+1)+adjust;
end;
stringgrid1.fixedcols:=1;
stringgrid1.FixedRows :=1;

if varnum>8 then
   begin
   stringgrid4.width:=stringgrid1.Width-colw+1;
   stringgrid4.height:=2*(roww+1)+20;
   stringgrid4.ScrollBars :=sshorizontal;
   end
else
   begin
   stringgrid4.height:=2*(roww+1)+adjust;
   stringgrid4.width:=stringgrid1.Width-colw+1;
   stringgrid4.ScrollBars :=ssnone;
   end;
stringgrid1.left:=stringgrid4.left;
stringgrid1.top:=stringgrid4.top+stringgrid4.height+30;
stringgrid2.top:=stringgrid1.top;
stringgrid2.left:=stringgrid1.left+stringgrid1.width;


if leashnum<9 then
   begin
   if varnum>8 then
      begin
      stringgrid2.height:=stringgrid1.height-14;
      end
   else
      stringgrid2.height:=stringgrid1.height;
   stringgrid2.Width :=(colw+1)+adjust;
   end
else
    if varnum >8 then
    begin
    stringgrid2.Width :=(colw+1)+20;
    stringgrid2.ScrollBars :=ssvertical;
    stringgrid2.height:=stringgrid1.height-14;
    end
    else
    begin
    stringgrid2.Width :=(colw+1)+20;
    stringgrid2.ScrollBars :=ssvertical;
    stringgrid2.height:=stringgrid1.height;
    end;

stringgrid3.width:=stringgrid2.Width-8;
stringgrid3.ScrollBars :=stringgrid2.ScrollBars ;
stringgrid3.height:=stringgrid2.height;
stringgrid3.top:=stringgrid1.top;
stringgrid3.left:=stringgrid2.left+stringgrid2.width;

for i:=1 to varnum do
  stringgrid1.cells[i,0]:='X'+inttostr(i);
for i:=1 to leashnum do
  stringgrid1.cells[0,i]:='约束条件'+inttostr(i);

tiaojianpos:=100;
originvarnum:=varnum;
originleashnum:=leashnum;
stringgrid1.ColCount :=varnum+1;
stringgrid1.rowcount:=leashnum+1;
enter_num:=0;
 top_num:=stringgrid1.Top+stringgrid1.height+30;
 tiaojianfree:=false;
 for ij:=1 to varnum do
 begin

      tiaojianx[ij]:=TLabel.create(main);
      with tiaojianx[ij] do
      begin
        left:=tiaojianpos;
        parent:=main;caption:='X';
        if left>(stringgrid3.left) then
            begin
               enter_num:=enter_num+1;
               top_num:=stringgrid1.top+stringgrid1.height+30+40*enter_num;
               tiaojianpos:=100;
            end;
            top:=top_num;
            left:=tiaojianpos;font.size:=14;
    end;
    tiaojianvar[ij]:=TLabel.create(main);
    with tiaojianvar[ij] do
      begin
           parent:=main;top:=tiaojianx[ij].top+10;left:=tiaojianx[ij].left+tiaojianx[ij].width;
           caption:=inttostr(ij);font.size:=10;font.Style :=[fsbold];
      end;
   tiaojianequal[ij]:=TLabel.create(main);
   with tiaojianequal[ij] do
     begin parent:=main;caption:='>=0';top:=tiaojianx[ij].top;left:=tiaojianvar[ij].left+tiaojianvar[ij].width;
      font.size:=14;tiaojianequalarr[ij]:=1;onclick:=label2click;
     end;
  tiaojianpos:=tiaojianpos+110;
 end;
for i:=1 to varnum do
  stringgrid4.cells[i-1,1]:=floattostr(c^[i].num);
for i:=1 to varnum do
  if c^[i].att=' >=' then
    begin
     tiaojianequal[i].caption:='>=0';
     tiaojianequalarr[i]:=1;
     end
  else if (c^[i].att=' <=') or (c^[i].att='<= ') then
    begin
     tiaojianequal[i].caption:='<=0';
     tiaojianequalarr[i]:=2;
    end
  else if c^[i].att='<=>' then
    begin
      tiaojianequal[i].caption:='正负不限';
      tiaojianequalarr[i]:=3;
    end;
for i:=1 to varnum do
begin
   bptiaojianarr[i]:=tiaojianequalarr[i];
end;
for i:=1 to varnum do
for j:=1 to leashnum do  {这儿要注意I,J的顺序}
begin
    stringgrid1.Cells[i,j]:=floattostr(a^[j,i]);
    bp_old_a[i,j]:=a^[j,i];
end;
for i:=1 to leashnum do
  begin
  stringgrid3.cells[0,i]:=floattostr(b^[i]);
  bp_old_b[i]:=b^[i];
  end;
for i:=1 to leashnum do
  stringgrid2.cells[0,i]:=tiaojian^[i];
end;{varnum and leashnum have no problem}
	speedbutton4.enabled:=true;
	speedbutton5.enabled:=true;
	speedbutton6.enabled:=true;
	speedbutton10.enabled:=true;
	speedbutton11.enabled:=true;
	speedbutton12.enabled:=true;        

end;
procedure Tmain.N3Click(Sender: TObject);{读取文件}

begin
havedata:=true;
if readfromfiledlg.execute then
  begin
   datafromfile:=true;
   datachange:=false;
   nameoffile:=readfromfiledlg.filename;
   readfromfile;
   showfiledata;
//   image1.visible:=false;
   label3.visible:=true;
   label4.visible:=true;
   label4.caption:=nameoffile;
   filedata:=true;
  end
else
  begin
    havedata:=false;
  end;
end;

procedure Tmain.StringGrid2SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
whichcellx:=acol;
whichcelly:=arow;
tiaojianform.top:=stringgrid2.top+starty+50;
tiaojianform.left:=stringgrid2.left+startx+6;
datachange1:=true;
datachange:=datachange1 or datachange2;
if datachange then
	n20.enabled:=true
else
	n20.enabled:=false;
n21.enabled:=n20.enabled;
speedbutton3.enabled:=n20.enabled;
{calculate.hide;}
tiaojianform.showmodal;
end;

procedure Tmain.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
datachange2:=true;
datachange:=datachange1 or datachange2;
if datachange then
	n20.enabled:=true
else
	n20.enabled:=false;
n21.enabled:=n20.enabled;
speedbutton3.enabled:=n20.enabled;
end;

procedure Tmain.N18Click(Sender: TObject);  {输入框宽度菜单}
begin
changescreenform.showmodal
end;

procedure Tmain.StringGrid4MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
startx:=x;
starty:=y;
end;

procedure Tmain.StringGrid3MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
startx:=x;
starty:=y;

end;

procedure Tmain.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
startx:=x;
starty:=y;

end;

procedure Tmain.StringGrid2MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
startx:=x;
starty:=y;
end;

procedure Tmain.N19Click(Sender: TObject);{关闭文件菜单}
begin
if not (nameoffile='') then
begin
havedata:=false;
//image1.visible:=true;
label4.visible:=false;
label1.visible:=false;
label3.visible:=false;
stringgrid1.visible:=false;
stringgrid2.visible:=false;
stringgrid3.visible:=false;
stringgrid4.visible:=false;
if tiaojianfree=false then
begin
for i:=1 to varnum do
 begin
  tiaojianx[i].visible:=false;
  tiaojianvar[i].visible:=false;
  tiaojianequal[i].visible:=false;
  tiaojianx[i].free;
  tiaojianvar[i].free;
  tiaojianequal[i].free;
 end;
end;
nameoffile:='';
tiaojianfree:=true;
end
else
 n19.enabled:=false;
end;

procedure Tmain.L1Click(Sender: TObject);
begin
{if not havedata then{表示如果当前没有数据则将相应的菜单不可用
 begin
  o1.enabled:=false;
  t1.enabled:=false;
  n7.enabled:=false;
  c1.enabled:=false;
 end
else}
datachange:=datachange1 or datachange2;
if not filedata then
  datachange:=true;
if datachange then
	n20.enabled:=true
else
	n20.enabled:=false;
n21.enabled:=n20.enabled;
speedbutton3.enabled:=n20.enabled;  
if datachange then
	begin
{    showmessage('ddd');
	 datachange1:=false;
	 datachange2:=false;
 }
 notsave:=true;
	end;

readfromframe;
end;

procedure Tmain.FormClick(Sender: TObject);
begin
calculate.hide;
tiaojianform.hide;
end;

procedure Tmain.N20Click(Sender: TObject);    {保存文件菜单}
begin
if  (nameoffile='') then
  button1.click
else
 begin
	readfromframe;
	writeorigin;
 end;
datachange1:=false;
datachange2:=false;
end;

procedure Tmain.N21Click(Sender: TObject); {另存文件菜单}
begin
button1.click;
end;

procedure Tmain.FormShow(Sender: TObject);
begin
          which_in_form:=0;
	  main.Refresh;
end;


procedure Tmain.N12Click(Sender: TObject);
begin
     showmessage('该功能正在建设中');
end;

procedure Tmain.N13Click(Sender: TObject);
begin
     showmessage('该功能正在建设中');
end;

procedure Tmain.N15Click(Sender: TObject);
begin
        studymode:=false;
    	duiouform.show;

end;

procedure Tmain.N24Click(Sender: TObject);
begin
        studymode:=true;
	duiouform.show;

end;

procedure Tmain.SpeedButton1Click(Sender: TObject);
begin
N2Click(Sender);
end;

procedure Tmain.SpeedButton2Click(Sender: TObject);
begin
N3Click(Sender);
end;

procedure Tmain.SpeedButton3Click(Sender: TObject);
begin
N20Click(Sender);
speedbutton3.enabled:=false;
end;

procedure Tmain.SpeedButton7Click(Sender: TObject);
begin
	speedbutton4.enabled:=false;
	speedbutton5.enabled:=false;
	speedbutton6.enabled:=false;
	speedbutton10.enabled:=false;
	speedbutton11.enabled:=false;
	speedbutton12.enabled:=false;        

	N19Click(Sender);
end;

procedure Tmain.SpeedButton4Click(Sender: TObject);
begin
N8Click(Sender);
end;

procedure Tmain.SpeedButton5Click(Sender: TObject);
begin
N10Click(Sender);
end;

procedure Tmain.SpeedButton6Click(Sender: TObject);
begin
N15Click(Sender);
end;

procedure Tmain.SpeedButton10Click(Sender: TObject);
begin
N9Click(Sender);
end;

procedure Tmain.SpeedButton11Click(Sender: TObject);
begin
N11Click(Sender);
end;

procedure Tmain.SpeedButton12Click(Sender: TObject);
begin
N24Click(Sender);
end;

procedure Tmain.SpeedButton9Click(Sender: TObject);
begin
N17Click(Sender);
end;

procedure Tmain.SpeedButton8Click(Sender: TObject);
begin
close;
end;

procedure Tmain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
	speedbutton4.enabled:=false;
	speedbutton5.enabled:=false;
	speedbutton6.enabled:=false;
	speedbutton10.enabled:=false;
	speedbutton11.enabled:=false;
	speedbutton12.enabled:=false;        
end;

procedure Tmain.N1Click(Sender: TObject);
begin
datachange:=datachange1 or datachange2;
if datachange then
	n20.enabled:=true
else
	n20.enabled:=false;
n21.enabled:=n20.enabled;
speedbutton3.enabled:=n20.enabled;
if nameoffile<>'' then
  n19.enabled:=true
else
  n19.enabled:=false;

end;

procedure Tmain.N14Click(Sender: TObject);
begin
xinxiform.show;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -