unit main; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Spin, EditBtn, Buttons, CustomDrawnControls, ExtCtrls, RTTICtrls, TAGraph, TATransformations, TASeries, CustomDrawn_Common, Printers, TAChartUtils, PrintersDlgs,Process, TADrawUtils, TATools, TAchartprint, Types, LazFileUtils, LazUTF8, LCLType, Menus,Dos, OSPrinters, TAPrint {$ifdef unix} ,BaseUnix {$endif} ; type { TmainForm } TmainForm = class(TForm) EscTextoutbutton: TCDButton; onsetLineSeries: TLineSeries; SelectDirectoryDialog1: TSelectDirectoryDialog; SetBaselinebutton: TCDButton; EscBaselinebutton: TCDButton; curvedbaselinedraggLineSeries: TLineSeries; CurvedbaselinedirectionLineSeries2: TLineSeries; marker2DataPointDragTool: TDataPointDragTool; marker2ConstantLine: TConstantLine; ChartToolset: TChartToolset; marker1DataPointDragTool: TDataPointDragTool; CurvedbaselineDataPointDragTool: TDataPointDragTool; SetTextoutbutton: TCDButton; TextDataPointDragTool: TDataPointDragTool; markersLineSeries: TLineSeries; Text1LineSeries: TLineSeries; Text2LineSeries: TLineSeries; marker1ConstantLine: TConstantLine; CurvedbaselineLineSeries: TLineSeries; CurvedbaselinedirectionLineSeries1: TLineSeries; CurvedbaselinemarkerLineSeries: TLineSeries; resultlabel: TLabel; Baselinebutton: TCDButton; drawbutton: TCDButton; Memo: TMemo; Savebutton: TCDButton; Textoutbutton: TCDButton; Diferencebutton: TCDButton; Areabutton: TCDButton; onsetbutton: TCDButton; Timer: TTimer; Tmaxbutton: TCDButton; Chart1: TChart; Filterbutton: TCDButton; Lowerlimitbutton: TCDButton; LagLinearAxisTrans: TLinearAxisTransform; LagTrans: TChartAxisTransformations; Upperlimitbutton: TCDButton; Newbutton: TCDButton; Image: TCDButton; Print: TCDButton; PrintDialog: TPrintDialog; Qbutton: TCDButton; QLinearAxisTrans: TLinearAxisTransform; QmaxEdit: TFloatSpinEdit; QminEdit: TFloatSpinEdit; QTrans: TChartAxisTransformations; Quit: TCDButton; TempLinearAxisTrans: TLinearAxisTransform; Tempbutton: TCDButton; TempmaxEdit: TFloatSpinEdit; TempminEdit: TFloatSpinEdit; TempTrans: TChartAxisTransformations; temp_tempmLineSeries: TLineSeries; temp_q0LineSeries: TLineSeries; temp_q1LineSeries: TLineSeries; Timebutton: TCDButton; TimeLinearAxisTrans: TLinearAxisTransform; TimemaxEdit: TFloatSpinEdit; TimeminEdit: TFloatSpinEdit; TimeTrans: TChartAxisTransformations; time_tempmLineSeries: TLineSeries; time_q0LineSeries: TLineSeries; time_q1LineSeries: TLineSeries; time_tempLineSeries: TLineSeries; Xaxisbutton: TCDButton; Yaxisbutton: TCDButton; procedure AreabuttonClick(Sender: TObject); procedure BaselinebuttonClick(Sender: TObject); procedure CurvedbaselineDataPointDragToolAfterMouseDown(ATool: TChartTool; APoint: TPoint); procedure CurvedbaselineDataPointDragToolAfterMouseUp(ATool: TChartTool; APoint: TPoint); procedure CurvedbaselineDataPointDragToolDrag(ASender: TDataPointDragTool; var AGraphPoint: TDoublePoint); procedure DiferencebuttonClick(Sender: TObject); procedure drawbuttonClick(Sender: TObject); procedure EscTextoutbuttonClick(Sender: TObject); procedure EscBaselinebuttonClick(Sender: TObject); procedure FilterbuttonClick(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); procedure ImageClick(Sender: TObject); procedure LowerlimitbuttonClick(Sender: TObject); procedure marker1DataPointDragToolAfterMouseDown(ATool: TChartTool; APoint: TPoint); procedure marker1DataPointDragToolDragStart(ASender: TDataPointDragTool; var AGraphPoint: TDoublePoint); procedure marker2DataPointDragToolAfterMouseUp(ATool: TChartTool; APoint: TPoint); procedure marker2DataPointDragToolDrag(ASender: TDataPointDragTool; var AGraphPoint: TDoublePoint); procedure marker1DataPointDragToolAfterMouseUp(ATool: TChartTool; APoint: TPoint); procedure marker1DataPointDragToolDrag(ASender: TDataPointDragTool; var AGraphPoint: TDoublePoint); procedure marker2DataPointDragToolDragStart(ASender: TDataPointDragTool; var AGraphPoint: TDoublePoint); procedure NewbuttonClick(Sender: TObject); procedure onsetbuttonClick(Sender: TObject); procedure PrintClick(Sender: TObject); procedure QbuttonClick(Sender: TObject); procedure QbuttonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure QmaxEditKeyPress(Sender: TObject; var Key: char); procedure QmaxEditMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure QminEditKeyPress(Sender: TObject; var Key: char); procedure QminEditMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure QuitClick(Sender: TObject); procedure SavebuttonClick(Sender: TObject); procedure SetTextoutbuttonClick(Sender: TObject); procedure SetBaselinebuttonClick(Sender: TObject); procedure TempbuttonClick(Sender: TObject); procedure TempbuttonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure TempmaxEditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure TempmaxEditMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure TempminEditKeyPress(Sender: TObject; var Key: char); procedure TempminEditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure TempminEditMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure TextDataPointDragToolAfterMouseUp(ATool: TChartTool; APoint: TPoint); procedure TextDataPointDragToolDrag(ASender: TDataPointDragTool; var AGraphPoint: TDoublePoint); procedure TextoutbuttonClick(Sender: TObject); procedure TimebuttonClick(Sender: TObject); procedure TimemaxEditKeyPress(Sender: TObject; var Key: char); procedure TimemaxEditMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure TimeminEditKeyPress(Sender: TObject; var Key: char); procedure TimeminEditMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure TimerTimer(Sender: TObject); procedure TmaxbuttonClick(Sender: TObject); procedure UpperlimitbuttonClick(Sender: TObject); procedure XaxisbuttonClick(Sender: TObject); procedure YaxisbuttonClick(Sender: TObject); private public end; var mainForm: TmainForm; procedure settimemax; procedure settimemin; procedure settempmax; procedure settempmin; procedure setqmax; procedure setqmin; procedure setxaxis; procedure setyaxis; procedure xxset; function q2_01(x:double):double; function time2_01(x:double):double; function temp2_01(x:double):double; function t01_q(x:double):double; function t01_time(x:double):double; function t01_temp(x:double):double; procedure redraw; procedure resultout(s:string); procedure cleartextoutset; implementation {$R *.lfm} uses variables, loadunit,fit,baselineset; { TmainForm } procedure TmainForm.FormCreate(Sender: TObject); begin inits; end; procedure TmainForm.QuitClick(Sender: TObject); begin saveparam; halt; end; procedure resultout(s:string); begin mainform.resultlabel.caption:=s; end; procedure TmainForm.TimerTimer(Sender: TObject); begin end; procedure getyaxispointer; var i:longint; begin if yaxispointer>2 then yaxispointer:=1; for i:=1 to 2 do begin if yaxis[yaxispointer] then exit; inc(yaxispointer); if yaxispointer=3 then begin yaxispointer:=1; exit; end; end end; procedure setxaxis; begin mainform.Chart1.AxisList[2].Visible:=false; mainform.Chart1.AxisList[3].Visible:=false; case xaxispointer of 1:mainform.Chart1.AxisList[2].Visible:=true; 2:mainform.Chart1.AxisList[3].Visible:=true; end; end; procedure setyaxis; begin getyaxispointer; mainform.Chart1.AxisList[4].Visible:=false; mainform.Chart1.AxisList[5].Visible:=false; case yaxispointer of 1:mainform.Chart1.AxisList[4].Visible:=true; 2:mainform.Chart1.AxisList[5].Visible:=true; end; end; procedure setdraw; begin Mainform.Time_q0Lineseries.Active:=false; Mainform.Time_q1Lineseries.Active:=false; Mainform.Time_tempLineseries.Active:=false; Mainform.Time_tempmLineseries.Active:=false; Mainform.Temp_q0Lineseries.Active:=false; Mainform.Temp_q1Lineseries.Active:=false; Mainform.Temp_tempmLineseries.Active:=false; Case xaxispointer of 1:begin Mainform.Time_q0Lineseries.Active:=true; Mainform.Time_q1Lineseries.Active:=true; Mainform.Time_tempLineseries.Active:=true; Mainform.Time_tempmLineseries.Active:=true; end; 2:begin Mainform.temp_q0Lineseries.Active:=true; Mainform.temp_q1Lineseries.Active:=true; Mainform.temp_tempmLineseries.Active:=true; end; end; end; function q2_01(x:double):double; begin q2_01:=qscale*x+qoffset; if q2_011 then q2_01:=1; end; function t01_q(x:double):double; begin t01_q:=(x-qoffset)/qscale; end; function temp2_01(x:double):double; begin temp2_01:=tempscale*x+tempoffset; if temp2_01<0 then temp2_01:=0; if temp2_01>1 then temp2_01:=1; end; function t01_temp(x:double):double; begin t01_temp:=(x-tempoffset)/tempscale; end; function time2_01(x:double):double; begin time2_01:=timescale*x+timeoffset; if time2_01<0 then time2_01:=0; if time2_01>1 then time2_01:=1; end; function t01_time(x:double):double; begin t01_time:=(x-timeoffset)/timescale; end; procedure Add_draw1(i:longint); begin if (t1[i]>timemin) and (t1[i]tempmin) and (temp2[i]timemin) and (t1[i]tempmin) and (temp2[i]2 then xaxispointer:=1; setxaxis; if xaxispointer=1 then yaxis[2]:=true; if xaxispointer=2 then yaxis[2]:=false; setyaxis; setdraw; end; procedure Tmainform.XaxisbuttonClick(Sender: TObject); var s:string; begin if baselineindex1b or baselineindex2b or integrationindex1b or integrationindex2b then exit; xxset; end; procedure Tmainform.YaxisbuttonClick(Sender: TObject); begin inc(yaxispointer); if yaxispointer>2 then yaxispointer:=1; setyaxis; end; procedure TmainForm.BaselinebuttonClick(Sender: TObject); begin if not fileloaded then exit; if baselineb then exit; if baselineindex1b or baselineindex2b or integrationindex1b or integrationindex2b then exit; if (xaxispointer=2) and not monotonb then xxset; if baseline.visible then exit; marker1dragged:=false; marker2dragged:=false; straightbaselineb:=false; curvedbaselineb:=false; baseline.Visible:=true; if nobaselineset then begin index1:=bimin+5; index2:=index1; end; end; procedure TmainForm.SavebuttonClick(Sender: TObject); var SelectDirectoryDialog: TSelectDirectoryDialog; begin if not fileloaded then exit; if nobaselineset then begin showmessage('Baseline was not selected'); exit; end; differencep; SelectDirectoryDialog:=TSelectDirectoryDialog.create(nil); SelectDirectoryDialog.Initialdir:=loaddirectory; if not SelectDirectoryDialog.execute then begin SelectDirectoryDialog.free; exit; end; saveDirectory:=SelectDirectoryDialog.Filename+bs; SelectDirectoryDialog.free; savep; end; procedure Filterp; var y,y1:x_vector; procedure filt(datanum:longint); var i,j,k:longint; begin for i:=1 to datanum do begin y1[i]:=0; for j:=-5 to 5 do begin k:=i+j; if k<1 then k:=1; if k>datanum then k:=datanum; y1[i]:=y1[i]+y[k]; end; y1[i]:=y1[i]/11; end; end; begin y:=a1; filt(datanum1); a1:=y1; y:=a2; filt(datanum1); a2:=y1; end; procedure TmainForm.FilterbuttonClick(Sender: TObject); begin if not fileloaded then exit; filterp; minmax; redraw; end; procedure TmainForm.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin saveparam; halt; end; function getmarker(x:double):longint; var i:longint=0; y:double; begin if xaxispointer=1 then y:=t01_time(x) else y:=t01_temp(x); while (iy) then exit; if (xaxispointer=2) and (temp2[i]>y) then exit; end; end; procedure posout1; var s:string; begin if xaxispointer=1 then s:=floattostrF(t01_time(mainform.marker1constantline.position),ffFixed,10,2)+' s' else s:=floattostrF(t01_temp(mainform.marker1constantline.position),ffFixed,10,2)+' K'; end; procedure posout2; var s:string; begin if xaxispointer=1 then s:=floattostrF(t01_time(mainform.marker2constantline.position),ffFixed,10,2)+' s' else s:=floattostrF(t01_temp(mainform.marker2constantline.position),ffFixed,10,2)+' K'; end; procedure TmainForm.marker1DataPointDragToolDrag(ASender: TDataPointDragTool; var AGraphPoint: TDoublePoint); var s:string; begin if ASender <> marker1DataPointDragTool then exit; posout1; end; procedure TmainForm.marker2DataPointDragToolDragStart( ASender: TDataPointDragTool; var AGraphPoint: TDoublePoint); begin marker2dragged:=true; end; procedure TmainForm.NewbuttonClick(Sender: TObject); begin if Loadform.Visible then begin Loadform.Visible:=false; mainForm.Newbutton.Color:=clAqua; end else begin measurefiles:=true; drawfiles:=false; Loadform.Visible:=true; mainForm.Newbutton.Color:=clRed; clearbaselineset; cleartextoutset; clearindexes; end; end; procedure TmainForm.marker1DataPointDragToolDragStart( ASender: TDataPointDragTool; var AGraphPoint: TDoublePoint); begin upallowed:=true; marker1dragged:=true; end; procedure TmainForm.marker2DataPointDragToolDrag(ASender: TDataPointDragTool; var AGraphPoint: TDoublePoint); begin if ASender <> marker2DataPointDragTool then exit; posout2; upallowed:=true; end; procedure TmainForm.marker2DataPointDragToolAfterMouseUp(ATool: TChartTool; APoint: TPoint); begin if not marker2dragged then exit; index2:=getmarker(mainform.marker2constantline.position); marker2DataPointDragTool.Enabled:=false; if straightbaselineb then begin baselinesetready:=true; resultout('Press "set" to set the baseline'); end; if curvedbaselineb then begin resultout(''); curvedbaseline; baselinesetready:=true; end; if areaprocb then begin arearesult; end; if onsetprocb then begin onsetresult; end; end; procedure TmainForm.marker1DataPointDragToolAfterMouseUp(ATool: TChartTool; APoint: TPoint); begin if not upallowed then exit; if not marker1dragged then exit; lineindex:=getmarker(mainform.marker1constantline.position); if lowerlimitb then begin bimin:=lineindex; lowerlimitb:=false; minmax; marker1ConstantLine.Active:=false; marker1dragged:=false; resultout(''); exit; end; if upperlimitb then begin bimax:=lineindex; upperlimitb:=false; minmax; marker1ConstantLine.Active:=false; marker1DataPointDragTool.Enabled:=false; marker1dragged:=false; resultout(''); exit; end; if tmaxprocb then begin marker1ConstantLine.Active:=false; marker1DataPointDragTool.Enabled:=false; tmaxprocb:=false; index1:=lineindex; integrationindex1b:=false; marker1dragged:=false; tmaxresult; exit; end; if baselineindex1b or integrationindex1b then begin index1:=lineindex; index2:=index1+5; marker1dragged:=false; if index2>datanum1 then index2:=datanum-1; marker1DataPointDragTool.Enabled:=false; marker2constantline.Active:=true; if xaxispointer=1 then marker2constantline.position:=time2_01(t1[index2]) else marker2constantline.position:=temp2_01(temp2[index2]); baselineindex1b:=false; if baselineindex1b then begin resultout('Set upper baseline point by dragging the line'); baselineindex1b:=false; baselineindex2b:=true; end; if integrationindex1b then begin if areaprocb then resultout('Set upper integration point by dragging the line'); if onsetprocb then resultout('Set upper fitting point by dragging the line'); integrationindex1b:=false; integrationindex2b:=true; end; upallowed:=false; marker2datapointdragtool.Enabled:=true; end; marker1DataPointDragTool.Enabled:=false; end; procedure TmainForm.marker1DataPointDragToolAfterMouseDown(ATool: TChartTool; APoint: TPoint); begin upallowed:=true; end; procedure TmainForm.LowerlimitbuttonClick(Sender: TObject); begin if not fileloaded then exit; if (xaxispointer=2) and not monotonb then xxset; if baselineindex1b or baselineindex2b or integrationindex1b or integrationindex2b then exit; bimin:=1; index1:=bimin+2; minmax; marker1dragged:=false; marker1ConstantLine.Active:=true; if xaxispointer=1 then marker1ConstantLine.position:=time2_01(t1[1]) else marker1ConstantLine.position:=temp2_01(temp2[1]); lowerlimitb:=true; resultout('Set lower limit by dragging the line'); marker1DataPointDragTool.Enabled:=true; end; procedure TmainForm.UpperlimitbuttonClick(Sender: TObject); begin if not fileloaded then exit; if (xaxispointer=2) and not monotonb then xxset; if baselineindex1b or baselineindex2b or integrationindex1b or integrationindex2b then exit; bimax:=datanum1; index2:=bimin+2; minmax; marker1dragged:=false; marker1ConstantLine.Active:=true; if xaxispointer=1 then marker1ConstantLine.position:=time2_01(t1[datanum1-1]) else marker1ConstantLine.position:=temp2_01(temp2[datanum1-1]); upperlimitb:=true; resultout('Set upper limit by dragging the line'); marker1DataPointDragTool.Enabled:=true; end; procedure TmainForm.CurvedbaselineDataPointDragToolDrag( ASender: TDataPointDragTool; var AGraphPoint: TDoublePoint); var xx0,xx1,xx2:double; yy0,yy1,yy2:double; m1,m2:double; i0,i1,i2,j:longint; cy14,cy34,cy12:double; begin xx0:=mainform.Curvedbaselinedragglineseries.XValue[0]; yy0:=mainform.Curvedbaselinedragglineseries.YValue[0]; xx1:=mainform.Curvedbaselinedragglineseries.XValue[1]; yy1:=mainform.Curvedbaselinedragglineseries.YValue[1]; xx2:=mainform.Curvedbaselinedragglineseries.XValue[2]; yy2:=mainform.Curvedbaselinedragglineseries.YValue[2]; mainform.CurvedbaselinedirectionLineSeries1.SetxValue(1,xx0); mainform.CurvedbaselinedirectionLineSeries1.SetyValue(1,yy0); mainform.CurvedbaselinedirectionLineSeries2.SetxValue(1,xx2); mainform.CurvedbaselinedirectionLineSeries2.SetyValue(1,yy2); i0:=getmarker(xx0); i1:=getmarker(xx1); i2:=getmarker(xx2); if xaxispointer=1 then begin xx0:=t01_time(xx0); xx1:=t01_time(xx1); xx2:=t01_time(xx2); end else begin xx0:=t01_temp(xx0); xx1:=t01_temp(xx1); xx2:=t01_temp(xx2); end; if i0=bindex1 then i0:=i0+5; if i2=bindex2 then i2:=i2-5; yy0:=t01_q(yy0); yy2:=t01_q(yy2); yy1:=t01_q(yy1); y1drag:=yy1; if xaxispointer=1 then begin if abs(xx0-t1[bindex1])<0.001then m1:=0 else m1:=(yy0-a1[bindex1])/(xx0-t1[bindex1]); if abs(xx2-t1[bindex2])<0.001then m2:=0 else m2:=(yy2-a1[bindex2])/(xx2-t1[bindex2]); j:=bindex1+((bindex2-bindex1) div 4); cy14:=a1[bindex1]-m1*(t1[bindex1]-t1[j]); j:=index1+((index2-index1) div 8); y0drag:=a1[index1]-m1*(t1[index1]-t1[j]); j:=bindex2-((bindex2-bindex1) div 4); cy34:=a1[bindex2]-m2*(t1[bindex2]-t1[j]); j:=index2-((index2-index1) div 8); y2drag:=a1[index2]-m2*(t1[index2]-t1[j]); cy12:=yy1; end else begin if abs(xx0-temp2[bindex1])<0.001then m1:=0 else m1:=(yy0-a1[bindex1])/(xx0-temp2[bindex1]); if abs(xx2-temp2[bindex2])<0.001then m2:=0 else m2:=(yy2-a1[bindex2])/(xx2-temp2[bindex2]); j:=bindex1+((bindex2-bindex1) div 4); cy14:=a1[bindex1]-m1*(temp2[bindex1]-temp2[j]); j:=index1+((index2-index1) div 8); y0drag:=a1[index1]-m1*(temp2[index1]-temp2[j]); j:=bindex2-((bindex2-index1) div 4); cy34:=a1[bindex2]-m2*(temp2[bindex2]-temp2[j]); j:=index2-((index2-index1) div 8); y2drag:=a1[index2]-m2*(temp2[index2]-temp2[j]); cy12:=yy1; end; courveline(bindex1,bindex2, a1[bindex1],a1[bindex2],cy14,cy12,cy34); drawcurvedbaseline; end; procedure TmainForm.DiferencebuttonClick(Sender: TObject); begin if nobaselineset then begin showmessage('Baseline was not selected'); exit; end; differencep; end; procedure TmainForm.drawbuttonClick(Sender: TObject); begin if Loadform.Visible then begin Loadform.Visible:=false; mainForm.Drawbutton.Color:=clSilver; end else begin measurefiles:=false; drawfiles:=true; Loadform.Visible:=true; mainForm.drawbutton.Color:=clRed; clearindexes; end; end; procedure TmainForm.CurvedbaselineDataPointDragToolAfterMouseUp( ATool: TChartTool; APoint: TPoint); var j:longint; begin baselineredraw; end; procedure TmainForm.CurvedbaselineDataPointDragToolAfterMouseDown( ATool: TChartTool; APoint: TPoint); begin end; procedure TmainForm.SetBaselinebuttonClick(Sender: TObject); begin if not baselinesetready then exit; nobaselineset:=false; if straightbaselineb then begin straightbaseline; end; if curvedbaselineb then begin curvedbaselinefinish; end; clearbaselineset; end; procedure TmainForm.EscBaselinebuttonClick(Sender: TObject); begin clearbaselineset; end; procedure TmainForm.AreabuttonClick(Sender: TObject); begin if not fileloaded then exit; if nobaselineset then begin showmessage('Baseline was not selected'); exit; end; if (xaxispointer=2) and not monotonb then xxset; differencep; index1:=index2+2; marker1constantline.Active:=true; marker1dragged:=false; marker2dragged:=false; if xaxispointer=1 then marker1constantline.position:=time2_01(t1[index1]) else marker1constantline.position:=temp2_01(temp2[index1]); integrationindex1b:=true; resultout('Set lower integration point by dragging the line'); marker1datapointdragtool.Enabled:=true; upallowed:=false; areaprocb:=true; end; procedure TmainForm.onsetbuttonClick(Sender: TObject); begin if not fileloaded then exit; if nobaselineset then begin showmessage('Baseline was not selected'); exit; end; if (xaxispointer=2) and not monotonb then xxset; differencep; index1:=index2+2; marker1dragged:=false; marker2dragged:=false; marker1constantline.Active:=true; if xaxispointer=1 then marker1constantline.position:=time2_01(t1[index1]) else marker1constantline.position:=temp2_01(temp2[index1]); integrationindex1b:=true; resultout('Set lower fitting point by dragging the line'); marker1datapointdragtool.Enabled:=true; upallowed:=false; onsetprocb:=true; end; procedure TmainForm.TmaxbuttonClick(Sender: TObject); begin if not fileloaded then exit; if nobaselineset then begin showmessage('Baseline was not selected'); exit; end; differencep; index1:=index2+2; marker1constantline.Active:=true; if xaxispointer=1 then marker1constantline.position:=time2_01(t1[index1]) else marker1constantline.position:=temp2_01(temp2[index1]); integrationindex1b:=true; resultout('Set T_max by dragging the line'); marker1datapointdragtool.Enabled:=true; upallowed:=false; tmaxprocb:=true; end; procedure cleartextoutset; begin mainform.textoutbutton.visible:=true; mainform.settextoutbutton.visible:=false; mainform.esctextoutbutton.visible:=false; mainform.TextDataPointDragTool.Enabled:=false; mainform.Text1lineseries.active:=false; resultout(''); end; procedure nexttext; begin inc(textindex); if (textindex=3) and (texts[textspindex].str[3]='') then textindex:=5; if textindex>4 then begin textindex:=1; inc(textspindex); end; if textspindex=textsp+1 then begin cleartextoutset; exit; end; textypos:=q2_01(texts[textspindex].y[textindex]); if xaxispointer=1 then begin textxpos:=time2_01(t1[texts[textspindex].index[textindex]]); end else begin textxpos:=temp2_01(temp2[texts[textspindex].index[textindex]]); end; singletextdraw(textspindex,textindex); end; procedure TmainForm.SetTextoutbuttonClick(Sender: TObject); begin texts[textspindex].index[textindex]:=getmarker(textxpos); texts[textspindex].y[textindex]:=t01_q(textypos); texts[textspindex].b[textindex]:=true; onetextdraw(textspindex,textindex); nexttext; end; procedure TmainForm.EscTextoutbuttonClick(Sender: TObject); begin texts[textspindex].b[textindex]:=false; nexttext; end; procedure cleartextset; begin end; procedure TmainForm.TextoutbuttonClick(Sender: TObject); begin if not fileloaded then exit; if nobaselineset then begin showmessage('Baseline was not selected'); exit; end; if textsp=0 then exit; mainform.Text2LineSeries.clear; mainform.textoutbutton.visible:=false; mainform.settextoutbutton.visible:=true; mainform.esctextoutbutton.visible:=true; mainform.Text1lineseries.active:=true; mainform.TextDataPointDragTool.Enabled:=true; resultout('Dragg text and press "set" or "Esc"'); textindex:=0; textspindex:=1; nexttext; singletextdraw(textspindex,textindex); end; procedure TmainForm.TextDataPointDragToolDrag(ASender: TDataPointDragTool; var AGraphPoint: TDoublePoint); begin if ASender <> TextDataPointDragTool then exit; textxpos:=Agraphpoint.x; textypos:=Agraphpoint.y; //chart1lineseries2.SetxValue(0,Agraphpoint.x); end; procedure TmainForm.TextDataPointDragToolAfterMouseUp(ATool: TChartTool; APoint: TPoint); begin end; end.