📄 main.pas
字号:
unit Main;
{$IFDEF VER150}
{$WARN UNSAFE_TYPE OFF}
{$ENDIF}
interface
uses Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,
RegDeRegServer,AxCtrls,ExtCtrls,ShutDownRequest;
type
TForm1 = class(TForm)
PulseTimer: TTimer;
DateTimeLbl: TLabel;
GroupBox1: TGroupBox;
RegSerBtn: TButton;
UnRegBtn: TButton;
SDButton: TButton;
Panel1: TPanel;
Label2: TLabel;
ClientConLbl: TLabel;
GrpCountLbl: TLabel;
Label1: TLabel;
CloseBtn: TButton;
procedure RegSerBtnClick(Sender: TObject);
procedure CloseBtnClick(Sender: TObject);
procedure SDButtonClick(Sender: TObject);
procedure PulseTimerTimer(Sender: TObject);
procedure UnRegBtnClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
public
clientsConnected:integer;
function ReturnItemValue(ii:integer):variant;
procedure UpdateGroupCount;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
uses ServImpl,OPCCOMN,Globals,ActiveX;
const
serverName = 'MRD.DA2.1';
procedure TForm1.RegSerBtnClick(Sender: TObject);
begin
RegisterTheServer(serverName);
end;
procedure TForm1.CloseBtnClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.SDButtonClick(Sender: TObject);
var
i:integer;
Obj: Pointer;
begin
ShutDownDlg:=nil;
try
Application.CreateForm(TShutDownDlg,ShutDownDlg);
for i:= low(theServers) to high(theServers) do
begin
ShutDownDlg.RadioGroup1.controls[i].enabled:=(theServers[i] <> nil);
if ShutDownDlg.RadioGroup1.controls[i].enabled then
ShutDownDlg.RadioGroup1.itemIndex:=i; //select the last one why...
end; //just so one is selected ;)
if ShutDownDlg.ShowModal = mrOk then
begin
i:=ShutDownDlg.RadioGroup1.itemIndex;
if theServers[i] <> nil then
if theServers[i].ClientIUnknown <> nil then
if Succeeded(theServers[i].ClientIUnknown.QueryInterface(IOPCShutdown,Obj)) then
IOPCShutdown(Obj).ShutdownRequest('MRD IOPCShutdown request.')
else
ShowMessage('The client does not support IOPCShutdown.');
end;
ShutDownDlg.Release;
finally
end;
end;
procedure TForm1.PulseTimerTimer(Sender: TObject);
var
i:integer;
cTime:TDateTime;
begin
try
PulseTimer.enabled:=false;
cTime:=Now;
//0 complete time and date
//1 complete date
//2 day
//3 month
//4 year
//5 complete time
//6 hour
//7 minute
//8 second
//9 millisecond
//10 complete Date Inverted
//11 day Inverted
//12 month Inverted
//13 year Inverted
//14 complete time Inverted
//15 hour Inverted
//16 minute Inverted
//17 second Inverted
//18 millisecond Inverted
//19 Test_Tag_1
//20 Test_Tag_1 Inverted
//21 Test_Tag_2
//22 Test_Tag_2 Inverted
DecodeDate(cTime,itemValues[4],itemValues[3],itemValues[2]);
DecodeTime(cTime,itemValues[6],itemValues[7],itemValues[8],itemValues[9]);
DateTimeLbl.Caption:=TimeToStr(cTime) + ' ' + DateToStr(cTime);
for i:= low(theServers) to high(theServers) do
if theServers[i] <> nil then
theServers[i].TimeSlice(cTime);
finally
PulseTimer.enabled:=true;
end;
end;
function TForm1.ReturnItemValue(ii:integer):variant;
var
s1:string;
begin
result:=0;
// result:='test';// + s1;
// Exit;
case ii of
0: result:=DateTimeLbl.Caption;
1:
begin
s1:=DateToStr(EncodeDate(itemValues[4],itemValues[3],
itemValues[2]));
result:=s1;
end;
5: result:=TimeToStr(EncodeTime(itemValues[6],itemValues[7],
itemValues[8],itemValues[9]));
10: result:=IntToStr(itemValues[13]) + '/' +
IntToStr(itemValues[12]) + '/' +
IntToStr(itemValues[11]);
14: result:=IntToStr(itemValues[15]) + ':' +
IntToStr(itemValues[16]) + ':' +
IntToStr(itemValues[17]) + ':' +
IntToStr(itemValues[18]);
else result:=itemValues[ii];
end;
end;
procedure TForm1.UnRegBtnClick(Sender: TObject);
begin
UnRegisterTheServer(serverName);
end;
procedure TForm1.UpdateGroupCount;
var
i,g:integer;
begin
if Application.Terminated then Exit;
clientsConnected:=0;
g:=0;
for i:= low(theServers) to high(theServers) do
if theServers[i] <> nil then
begin
clientsConnected:=succ(clientsConnected);
if Assigned(theServers[i].grps) then
g:=g + theServers[i].grps.count;
if Assigned(theServers[i].pubGrps) then
g:=g + theServers[i].pubGrps.count;
end;
Form1.ClientConLbl.caption:=IntToStr(clientsConnected);
GrpCountLbl.caption:=IntToStr(g);
SDButton.enabled:=(clientsConnected > 0);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
s1:string;
begin
if ParamCount <> 0 then
begin
s1:=LowerCase(ParamStr(1));
if (s1 = 'regserver') or (s1 = 'register') then
begin
RegSerBtnClick(self);
PostMessage(self.handle,WM_CLOSE,0,0);
Exit;
end
else if (s1 = 'unregserver') or (s1 = 'unregister') then
begin
UnRegBtnClick(self);
PostMessage(self.handle,WM_CLOSE,0,0);
Exit;
end;
end;
UpdateGroupCount;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if clientsConnected > 0 then
CanClose:=(MessageDlg('Clients are connected. Are you sure you want to quit?',
mtConfirmation,[mbYes,mbNo],0) = mrYes)
else
CanClose:=true;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -