📄 main.pas
字号:
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, OleCtrls, ExtCtrls, DAQCounterLib_TLB;
type
TfrmMain = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
txtDeviceNum: TEdit;
txtDeviceName: TEdit;
cmdSelectDevice: TButton;
GroupBox2: TGroupBox;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
GroupBox3: TGroupBox;
Label7: TLabel;
cmbChannel: TComboBox;
cmbGateMode: TComboBox;
txtScanTime: TEdit;
txtCounter: TEdit;
cmdCounterStart: TButton;
cmdCounterStop: TButton;
cmdExit: TButton;
ScanTimer: TTimer;
Label8: TLabel;
Label9: TLabel;
txtError: TEdit;
DAQCounter1: TDAQCounter;
procedure cmdExitClick(Sender: TObject);
procedure cmdSelectDeviceClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure cmdCounterStartClick(Sender: TObject);
procedure cmdCounterStopClick(Sender: TObject);
procedure ScanTimerTimer(Sender: TObject);
procedure txtDeviceNumChange(Sender: TObject);
procedure txtScanTimeChange(Sender: TObject);
procedure cmbChannelChange(Sender: TObject);
procedure cmbGateModeChange(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.DFM}
{********************************************************************}
{ Function : Display error message to a dialog box. }
{ The format of Long string and short string in Delphi is }
{ different from Null-terminated that used in C. }
{ }
{ The long/short string use 1'st char to denote the string}
{ length without termonated char in the tail of string. }
{ }
{ The Null-terminated string use Null Char as a string }
{ termonated and without string length information. }
{ }
{ The Message box use Null-Terminated string. }
{ }
{ Paramater: sErrMsg: In, Error message string. }
{ Return: None }
{********************************************************************}
procedure ErrorMsgBox( sErrMsg : WideString);
var
sErrString : String[51];
sCaption : String[51];
begin
sErrString := sErrMsg + Char(0);
sCaption := frmMain.Caption + ' Error' + Char(0);
Application.MessageBox(@sErrString[1], @sCaption, MB_OK or MB_ICONEXCLAMATION);
end;
procedure TfrmMain.cmdExitClick(Sender: TObject);
begin
application.Terminate
end;
procedure TfrmMain.cmdSelectDeviceClick(Sender: TObject);
Var
sTmp : string[50];
i : integer;
begin
{Select Device from list}
DAQCounter1.SelectDevice;
{Dispaly selection result}
txtDeviceNum.Text := IntToStr(DAQCounter1.DeviceNumber);
txtDeviceName.Text := DAQCounter1.DeviceName;
{Clear previous selection}
cmbChannel.Clear;
cmdCounterStart.Enabled := False;
{Add Counter channel for selection}
If DAQCounter1.OpenDevice Then
Begin
ErrorMsgBox(DAQCounter1.ErrorMessage);
Exit;
End;
if DAQCounter1.MaxCounterNumber = 0 then
begin
ShowMessage('Function Not Supported');
DAQCounter1.CloseDevice;
Exit;
end;
For i := 0 To (DAQCounter1.MaxCounterNumber-1) do
begin
str(i, sTmp);
cmbChannel.Items.Add(sTmp);
end;
If DAQCounter1.MaxCounterNumber > 0 Then
cmbChannel.ItemIndex := DAQCounter1.Channel;
DAQCounter1.CloseDevice;
{Manage UI after selection}
cmdCounterStart.Enabled := True;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
{Give the default UI}
cmdSelectDeviceClick(Sender);
cmdCounterStop.Enabled := False;
cmbGateMode.ItemIndex := DAQCounter1.GateMode;
cmbChannel.ItemIndex := DAQCounter1.Channel;
ScanTimer.Enabled := False;
end;
procedure TfrmMain.cmdCounterStartClick(Sender: TObject);
begin
{Open deice for acquiring }
If DAQCounter1.OpenDevice Then
Begin
ErrorMsgBox(DAQCounter1.ErrorMessage);
Exit;
End;
DAQCounter1.Channel := cmbChannel.ItemIndex;
DAQCounter1.GateMode := cmbGateMode.ItemIndex;
{Start action }
DAQCounter1.EnableCounter(True);
ScanTimer.Enabled := True;
{Manage UI, Avoid error command using}
cmdCounterStart.Enabled := False;
cmdCounterStop.Enabled := True;
cmdExit.Enabled := False;
cmdSelectDevice.Enabled := False;
end;
procedure TfrmMain.cmdCounterStopClick(Sender: TObject);
begin
{Stop counter action}
ScanTimer.Enabled := False;
DAQCounter1.EnableCounter(False);
{Close counter device}
If DAQCounter1.CloseDevice Then
Begin
ErrorMsgBox(DAQCounter1.ErrorMessage);
Exit;
End;
{Manage UI}
cmdCounterStart.Enabled := True;
cmdCounterStop.Enabled := False;
cmdExit.Enabled := True;
cmdSelectDevice.Enabled := True;
end;
procedure TfrmMain.ScanTimerTimer(Sender: TObject);
begin
txtError.Text := DAQCounter1.ErrorMessage;
If DAQCounter1.ErrorCode <> 0 Then
Begin
ScanTimer.Enabled := False;
End;
txtCounter.Text := IntToStr(DAQCounter1.CounterValue);
end;
procedure TfrmMain.txtDeviceNumChange(Sender: TObject);
begin
DAQCounter1.DeviceNumber := StrToInt(txtDeviceNum.text);
txtDeviceName.Text := DAQCounter1.DeviceName;
end;
procedure TfrmMain.txtScanTimeChange(Sender: TObject);
begin
ScanTimer.Interval := StrToInt(txtScanTime.Text);
end;
procedure TfrmMain.cmbChannelChange(Sender: TObject);
begin
DAQCounter1.Channel := cmbChannel.ItemIndex;
end;
procedure TfrmMain.cmbGateModeChange(Sender: TObject);
begin
DAQCounter1.Channel := cmbGateMode.ItemIndex;
end;
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ScanTimer.Enabled := False;
DAQCounter1.EnableCounter(False);
DAQCounter1.CloseDevice;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -