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

📄 common.pas.~232~

📁 用于工厂对于门花尺寸进行自动计算
💻 ~232~
字号:
unit common;

interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls,grids,dm;
 type
    Tmaterail=class       //基类
      index:integer;
      name:string;       //
      materailType:string;
      width:integer;
      height:integer;
      length:integer;
      thick:integer;
      num:integer;
      memo:string;
      code:string;
      points:string;
      lengthformula:string;
      pointformula:string;

   public
     procedure printData(memo:Tmemo);
     procedure setBaseSize(width:integer;height:integer);

 end;
  type
    Tmodel=class       //基类
      name:string;       //
      materails:Array of  Tmaterail;
      materailnums:integer;
      width:integer;
      height:integer;
   public
     procedure loadBaseinfo();
     procedure setBaseSize(width:integer;height:integer);
     procedure loadinfo();virtual;
     procedure setSize(width:integer;height:integer);virtual;
     procedure printData(memo:Tmemo);

 end;
 function cacu(formula:string):integer;
 function replacethick(formula:string):string;

implementation
procedure   Tmaterail.printData(memo:Tmemo);
var     linestr:string;
begin
   linestr := name+'  长度:'+inttostr(length)+',  材料宽度:'+inttostr(thick)+',  数量:'+inttostr(num);
  // pointnum:= Length(points);
   if points<>'' then linestr := linestr+' ,交叉点:'+points;
   with dm.DataModule1.ADOQuery3 do

   begin
    edit;
    Append;
    FieldByName('index').AsString := inttostr(index);
    FieldByName('name').AsString := name;
    FieldByName('length').AsString := inttostr(length);
    FieldByName('thick').AsString := inttostr(thick);
    FieldByName('num').AsString := inttostr(num);
    FieldByName('points').AsString := points;
    post;
   end;
  //memo.Lines.Add(linestr);
end;
procedure  Tmodel.loadinfo();
begin

end;
procedure  Tmodel.loadBaseinfo();
var materail:Tmaterail;
    i,num,index:integer;
begin
   materailnums := 0;
   index := 0;
   //获取总的材料数量
   dm.DataModule1.ADOQuery1.Close;
   dm.DataModule1.ADOQuery1.SQL.Clear;
   dm.DataModule1.ADOQuery1.SQL.Add('select count(*) as nums from model_materail where modeltype='''+name+'''');
   dm.DataModule1.ADOQuery1.Open;
   dm.DataModule1.ADOQuery1.First;
   if (not dm.DataModule1.ADOQuery1.eof) then
   begin
      materailnums := dm.DataModule1.ADOQuery1.FieldByName('nums').Asinteger;
   end;
   setLength(materails,materailnums);

   dm.DataModule1.ADOQuery1.Close;
   dm.DataModule1.ADOQuery1.SQL.Clear;
   dm.DataModule1.ADOQuery1.SQL.Add('select * from model_materail where modeltype='''+name+'''');
   dm.DataModule1.ADOQuery1.Open;
   dm.DataModule1.ADOQuery1.First;
   while (not dm.DataModule1.ADOQuery1.eof) do
   begin
      //num := 0;
      //num :=  dm.DataModule1.ADOQuery1.FieldByName('num').Asinteger;
      {for i := 1 to num do
      begin }
      index := index +1;
      materail := Tmaterail.Create;
      materail.name := dm.DataModule1.ADOQuery1.FieldByName('materailtype').AsString;
      materail.materailType := dm.DataModule1.ADOQuery1.FieldByName('materailtype').AsString;
      materail.num := dm.DataModule1.ADOQuery1.FieldByName('num').Asinteger;
      materail.lengthformula:= dm.DataModule1.ADOQuery1.FieldByName('lengthformula').Asstring;
      materail.pointformula:= dm.DataModule1.ADOQuery1.FieldByName('pointformula').Asstring;
      materail.code:= dm.DataModule1.ADOQuery1.FieldByName('materailcode').Asstring;
      materail.index := index;
      materail.width :=  0;
      materail.height := 0;
      materail.length := 0;

      materails[index-1] := materail;
      //end;
      dm.DataModule1.ADOQuery1.next;
   end;
   

end;
procedure  Tmodel.printData(memo:Tmemo);
var materail:Tmaterail;
    i:integer;
begin
  //memo.Lines.Clear;
  //memo.Lines.Add(name+'材料列表如下:');
   materailnums := Length(materails);
   dm.DataModule1.ADOquery3.Close;
   dm.DataModule1.ADOquery3.SQL.Clear;
   dm.DataModule1.ADOquery3.SQL.Add('delelte from display');
   dm.DataModule1.ADOquery3.ExecSQL;

  dm.DataModule1.ADOquery3.SQL.Add('select * from display');
  dm.DataModule1.ADOquery3.Open;
  for I := 0 to materailnums - 1 do
  begin
  materail := Tmaterail(materails[i]);
  materail.printData(memo);

  end;

end;
procedure Tmodel.setBaseSize(width: Integer; height: Integer);
var materail:Tmaterail;
    i:integer;
begin
  materailnums := Length(materails);
  for I := 0 to materailnums - 1 do
  begin
  materail := Tmaterail(materails[i]);
  materail.setBaseSize(width,height);
  end;

end;
procedure Tmodel.setSize(width: Integer; height: Integer);
begin

end;
procedure TMaterail.setBaseSize(width: Integer; height: Integer);
var lengthformulanew,pointformulanew,tempstr:string;
    i,len:integer;
begin
    if(lengthformula<>'')    then
    begin
        lengthformulanew := lengthformula;
        lengthformulanew:=stringreplace(lengthformulanew,'#',inttostr(width),[rfReplaceAll]);
        lengthformulanew:=stringreplace(lengthformulanew,'$',inttostr(height),[rfReplaceAll]);
        lengthformulanew:=replacethick(lengthformulanew);
        length := cacu(lengthformulanew);
    end;
    thick:=strtoint(replacethick(code));
    points := '';
    if(pointformula<>'')    then
    begin
        pointformulanew := pointformula;
        pointformulanew:=stringreplace(pointformulanew,'#',inttostr(length),[rfReplaceAll]);
        //pointformulanew:=stringreplace(pointformulanew,'$',inttostr(height),[rfReplaceAll]);
        pointformulanew:=replacethick(pointformulanew);
        while  (pos(';',pointformulanew)>0) do
        begin
          i:= pos(';',pointformulanew);
          tempstr := copy(pointformulanew,0,i-1);
          points := points + '(位移:'+ inttostr(cacu(tempstr));
          pointformulanew := copy(pointformulanew,i+1,(strlen(pchar(pointformulanew))-i));
          i:= pos(';',pointformulanew);
          tempstr := copy(pointformulanew,0,i-1);
          points := points + '孔径:'+ inttostr(cacu(tempstr))+')';
          pointformulanew := copy(pointformulanew,i+1,strlen(pchar(pointformulanew))-i);
        end;
    end;
end;

 function cacu(formula:string):integer;
 var num:double;
 begin
   with dm.DataModule1.ADOQuery2 do
   begin
        close;
        sql.Clear;
        sql.Add('select '+formula+' as num from model_materail where id=1');
       // showmessage(sql.Text);
        open;
        num := fieldbyname('num').AsFloat;
        close;
        sql.Clear;
   end;
   result  := round(num);

 end;

 function replacethick(formula:string):string;
 var str:string;
 begin
   str := formula;
   with dm.DataModule1.ADOtable1 do
   begin
        first;
        while(not eof) do
        begin
           str := stringreplace(str,fieldbyname('code').asstring, fieldbyname('thick').asstring,[rfReplaceAll]);
           next;
        end;
        first;
   end;
   result  := str;

 end;

end.

⌨️ 快捷键说明

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