📄 untbd2.pas
字号:
unit Untbd2;
interface
uses
Windows, Messages, SysUtils, StrUtils, DateUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids, ValEdit, DB, ADODB, DBGrids, Buttons,
ComCtrls, TeEngine, Series, TeeProcs, Chart, Menus, TeeTools;
type xypoint=record
Xpoint:double;
Ypoint:double;
end;
type
TFrmbd2 = class(TForm)
Panel1: TPanel;
GroupBox1: TGroupBox;
Panel2: TPanel;
GroupBox2: TGroupBox;
GroupBox6: TGroupBox;
ADOQuery2by: TADOQuery;
ADOQuery1: TADOQuery;
ADOQuery3: TADOQuery;
ADOQuery4: TADOQuery;
ADOConnection1: TADOConnection;
ADOQuery1jb: TADOQuery;
DataSource1: TDataSource;
OD1: TOpenDialog;
DBGrid1: TDBGrid;
Panel3: TPanel;
GroupBox7: TGroupBox;
Label1: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
ComboBox1: TComboBox;
BitBtn1: TBitBtn;
GroupBox4: TGroupBox;
Label5: TLabel;
Edit5: TEdit;
Label7: TLabel;
Edit6: TEdit;
Label6: TLabel;
Edit7: TEdit;
BitBtn2: TBitBtn;
GroupBox8: TGroupBox;
BitBtn3: TBitBtn;
Panel4: TPanel;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
sampling: TChart;
Series1: TLineSeries;
Edit3: TEdit;
Label2: TLabel;
Label4: TLabel;
Label10: TLabel;
Label11: TLabel;
TabSheet3: TTabSheet;
Memo1: TMemo;
TabSheet4: TTabSheet;
Chart2: TChart;
LineSeries1: TLineSeries;
Chart1: TChart;
Series2: TLineSeries;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
StatusBar1: TStatusBar;
ChartTool1: TCursorTool;
procedure FormCreate(Sender: TObject);
// procedure BitBtn4Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
function Shiyutu(ssa1:string):string;
procedure BitBtn3Click(Sender: TObject);
////////////////////最小二乘法拟合直线
function CalculateLineKB(const xy:array of xypoint;out k,b:double;n:integer):boolean;
//procedure Series5AfterDrawValues(Sender: TObject);
procedure Edit4KeyPress(Sender: TObject; var Key: Char);
procedure Edit8KeyPress(Sender: TObject; var Key: Char);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit1Change(Sender: TObject);
// procedure Series4AfterDrawValues(Sender: TObject);
procedure LineSeries1AfterDrawValues(Sender: TObject);
procedure Chart2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Frmbd2: TFrmbd2;
x0,y0,x1,y1:double;
implementation
uses Unit7;
{$R *.dfm}
procedure TFrmbd2.FormCreate(Sender: TObject);
var
s1,s2,s3,s4,MyPath:string;
t1:Tdatetime;
ia1,ia2:word;
begin
MyPath:=ExtractFilePath(ParamStr(0));
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
MyPath+'db1.mdb;Persist Security Info=False';
t1:=date;
s1:=inttostr(CurrentYear);
ia1:= MonthOfTheYear(t1);
ia2:= dayOf(t1);
if (ia1>=1) and (ia1<=9) then
s2:='0'+inttostr(ia1)
else
s2:=inttostr(ia1);
if (ia2>=1) and (ia2<=9) then
s3:='0'+inttostr(ia2)
else
s3:=inttostr(ia2);
s4:=s1+s2+s3+'-';
edit1.Text:=s4;
ADOQuery1jb.Close;
ADOQuery1jb.SQL.Clear;
ADOQuery1jb.SQL.Add('select * from BYANG order by testno desc, bybh asc');
ADOQuery1jb.Open;
end;
{
procedure TFrmbd2.BitBtn4Click(Sender: TObject);
var
s1,s2,ttbhao:string;
i2:integer;
begin
IF trim(Edit1.Text)='' then
begin
showmessage('请输入标定编号!');
exit;
end
else if trim(Edit3.Text)='' then
begin
showmessage('请输入标定人姓名!');
exit;
end;
ttbhao:=trim(edit1.Text); //标定编号
s1:='select count(*) as find from biaoding where testno='+QuotedStr(ttbhao);
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(s1);
ADOQuery1.Open;
i2:=ADOQuery1.FieldByName('find').AsInteger;
if i2>0 then
begin
if application.MessageBox('已经有此标定记录,您确认要覆盖吗?','覆盖确认',MB_YesNo+MB_DEFBUTTON2+MB_IconStop+MB_APPLMODAL)=IDYES THEN
BEGIN
s1:='update biaoding set testno='+ QuotedStr(edit1.Text)
+', testname='+ QuotedStr(edit3.Text)
+', p1us='+ QuotedStr(vle1.Cells[1,1])
+', d3US='+ QuotedStr(vle1.Cells[1,2])
+', d0us='+ QuotedStr(vle1.Cells[1,3])
+', TD='+ QuotedStr(vle1.Cells[1,4])
+', SW='+ QuotedStr(vle1.Cells[1,5])
+', DFW='+ QuotedStr(vle1.Cells[1,6])
+', SF1='+ QuotedStr(vle1.Cells[1,7])
+', o1k='+ QuotedStr(vle1.Cells[1,8])
+', RG='+ QuotedStr(vle1.Cells[1,9])
+', NS='+ QuotedStr(vle1.Cells[1,10])
+', DS='+ QuotedStr(vle1.Cells[1,11])
+' where testno='+QuotedStr(ttbhao);
ADOQuery1.Close; //插入其他加1
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(s1);
ADOQuery1.ExecSQL;
end
else
EXIT;
end
ELSE
BEGIN
s2:='INSERT INTO biaoding(testno,testname,p1us,d3US,d0us,TD,SW,DFW,SF1,o1k,RG,NS,DS) VALUES('
+QuotedStr(edit1.Text)
+','+QuotedStr(edit3.Text)
+','+QuotedStr(vle1.Cells[1,1])
+','+QuotedStr(vle1.Cells[1,2])
+','+QuotedStr(vle1.Cells[1,3])
+','+QuotedStr(vle1.Cells[1,4])
+','+QuotedStr(vle1.Cells[1,5])
+','+QuotedStr(vle1.Cells[1,6])
+','+QuotedStr(vle1.Cells[1,7])
+','+QuotedStr(vle1.Cells[1,8])
+','+QuotedStr(vle1.Cells[1,9])
+','+QuotedStr(vle1.Cells[1,10])
+','+QuotedStr(vle1.Cells[1,11])
+')';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(s2);
ADOQuery1.ExecSQL;
ADOQuery1.Close;
showmessage('保存成功!');
END;
end; }
procedure TFrmbd2.BitBtn1Click(Sender: TObject);
begin
OD1.Execute;
edit2.Text:=od1.FileName;
if edit2.Text='' then
begin
showmessage('请选择FID文件!');
end;
edit6.SetFocus;
end;
procedure TFrmbd2.BitBtn2Click(Sender: TObject);
var
s1,s2,s3,s4,s5,s6,maxwz,str_xbzhi:string;
i1,i2,i3,i4,i5:integer;
xbzhi:real;
begin
i2:=0;
if edit1.Text='' then
begin
showmessage('请输入标定编号!');
exit;
end;
s1:='select count(*) as find from bd1 where testno='+QuotedStr(trim(edit1.Text));
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(s1);
ADOQuery1.open;
i2:=ADOQuery1.FieldByName('find').AsInteger; //查标定编号
if (i2>0) then //新记录
begin
if application.MessageBox('标定编号与历史记录重复,请确定是否更改!?','提示',MB_YESNO+MB_DEFBUTTON1+MB_ICONWARNING+MB_SystemModal)<>IDNo then
begin
exit;
Edit1.SetFocus;
end;
end;
{
if edit3.Text='' then
begin
showmessage('请输入标定人姓名!');
exit;
end; }
if combobox1.Text='' then
begin
showmessage('请输入标准样品的数量!');
exit;
end;
if edit2.Text='' then
begin
showmessage('请打开NMR的路径及文件!');
exit;
end;
if edit5.Text='' then
begin
showmessage('请输入标样编号!');
exit;
end;
{ if edit6.Text='' then
begin
showmessage('请输入质量!');
exit;
end; }
if edit7.Text='' then
begin
showmessage('请输入标样含量!');
exit;
end;
i1:=combobox1.ItemIndex+1; //标样的数量
i3:=LastDelimiter('\', EDIT2.Text); //最后的文件名长度
s2:=LeftStr(edit2.Text,i3); //去掉文件名的路径部分
s3:=RightStr(edit2.Text,4); //.txt
i4:=length(edit2.Text)-i3;
s4:=RightStr(edit2.Text,i4); //文件名
i5:=LastDelimiter('.', s4);
s5:=LeftStr(s4,i5-1); ///////////// strtoint
s1:='select count(*) as find from BYANG where testno='+QuotedStr(trim(edit1.Text));
try
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(s1);
ADOQuery1.open;
i2:=ADOQuery1.FieldByName('find').AsInteger; //查标定编号
finally
if (i2=0) then //新记录
begin
Series1.Clear;
Series2.Clear;
maxwz:=Shiyutu(edit2.Text); //时域图
xbzhi:=strtofloat(maxwz)/strtofloat(edit6.Text); //最大值/质量
str_xbzhi:=FormatFloat('0.000',xbzhi); //取小数点后三位。
// showmessage('还有'+inttostr(i1)+'个标样要添加!');
s1:='INSERT INTO BYANG(testno,testname,bybh,bzhhl,zhl,byshuliang,NMRroadfile,zdzhi,maxweizhi) VALUES('
+QuotedStr(edit1.Text) //标定编号
+','+QuotedStr(edit3.Text) //标定人员姓名
+','+QuotedStr(edit5.Text) //标样编号
+','+QuotedStr(edit7.Text) //标准含量(%)
+','+QuotedStr(edit6.Text) //质量(克)
+','+QuotedStr(inttostr(i1)) // 标准样品的数量
+','+QuotedStr(edit2.Text) // 请选择第一个FID文件
+','+QuotedStr(maxwz) //最大值实部平方加虚部平方的和再开平方根
+','+QuotedStr(str_xbzhi) //最大值/质量比
+')';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(s1);
ADOQuery1.ExecSQL;
// ADOQuery1.Close;
showmessage('已经成功添加了一条标样记录!'+#13+'还有'+inttostr(i1-1)+'个标样要添加!');
edit5.Text:='2'; //加1
s6:=s2+ inttostr(strtoint(s5)+1)+s3;
edit2.Text:=s6;
// edit6.Text:='';
edit7.Text:='';
edit6.SetFocus;
end;
end;
if i2>0 then // 已经加过
begin
// showmessage('还有'+inttostr(i1-i2)+'个标样要添加!');
if i1-i2=0 then
begin
showmessage('已经添加好标样!');
edit5.Text:=''; //标样编号
exit;
end
else
begin
// BitBtn3.Enabled:=false;
Edit5.Text:=inttostr(i2+1); //标样编号
// edit5.Enabled:=false;
edit6.SetFocus;
end;
Series1.Clear;
Series2.Clear;
maxwz:=Shiyutu(edit2.Text); // 时域图 实部和虚部平方和的模的最大值
xbzhi:=strtofloat(maxwz)/strtofloat(edit6.Text); //最大值与质量之比
str_xbzhi:=FormatFloat('0.000',xbzhi);
s1:='INSERT INTO BYANG(testno,testname,bybh,bzhhl,zhl,byshuliang,NMRroadfile,zdzhi,maxweizhi) VALUES('
+QuotedStr(edit1.Text) //标定编号
+','+QuotedStr(edit3.Text) //标定人员姓名
+','+QuotedStr(edit5.Text) //标样编号
+','+QuotedStr(edit7.Text) // 标准含量(%)
+','+QuotedStr(edit6.Text) //质量(克)
+','+QuotedStr(inttostr(i1)) // 标准样品的数量
+','+QuotedStr(edit2.Text) // 请选择第一个FID文件
+','+QuotedStr(maxwz) //最大值实部平方加虚部平方的和再开平方根
+','+QuotedStr(str_xbzhi) //信号最大值比质量
+')';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(s1);
ADOQuery1.ExecSQL;
// ADOQuery1jb.Close;
i3:=LastDelimiter('\', EDIT2.Text); //最后的文件名长度
s2:=LeftStr(edit2.Text,i3); //去掉文件名的路径部分
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -