📄 common.pas.~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 + -