📄 tscmain.pas.svn-base
字号:
GetAlterScript(AlterNo,ATable);
TSCDM.qrySys910A.Next;
end;
TSCDM.qrySys910A.Close;
end;
//显示在线用户信息
procedure TTscMainForm.GetOnlineUser(AAcctName:string);
var
AUser:string;
begin
//在事件触发的时候显示在线用户信息,其实都只要在
adsSys500E.DisableControls;
qrySys500E.Close;
qrySys500E.SQL.Clear;
qrySys500E.SQL.Add('select A.*,B.S500A_002 from SYS500E A, SYS500A B where S500E_001=S500A_001');
qrySys500E.Open;
while not qrySys500E.Eof do
begin
AUser:=qrySys500E.FieldByName('S500A_002').AsString;
if adsSys500E.Locate('FDatabase;FUser',VarArrayOf([AAcctName,AUser]),[]) then
adsSys500E.Edit
else
adsSys500E.Append;
adsSys500E.FieldByName('FDatabase').Value:=AAcctName;
adsSys500E.FieldByName('FUser').Value:=AUser;
adsSys500E.FieldByName('FLogin').Value:=qrySys500E.FieldByName('S500E_002').Value;
adsSys500E.FieldByName('FLast').Value:=qrySys500E.FieldByName('S500E_003').Value;
adsSys500E.FieldByName('FIP').Value:=qrySys500E.FieldByName('S500E_004').Value;
adsSys500E.FieldByName('FComputer').Value:=qrySys500E.FieldByName('S500E_005').Value;
case qrySys500E.FieldByName('S500E_006').AsInteger of
0:adsSys500E.FieldByName('FStatus').Value:='OnLine';
1:adsSys500E.FieldByName('FStatus').Value:='OffLine';
end;
adsSys500E.FieldByName('FUserNo').Value:=qrySys500E.FieldByName('S500E_001').Value;
adsSys500E.Post;
qrySys500E.Next;
end;
adsSys500E.EnableControls;
qrySys500E.Close;
end;
procedure TTscMainForm.Timer1Timer(Sender: TObject);
var
AFileName,ADBUser,ADBPass,AServer:String;
ADatabase:Integer;
AStringList:TStringList;
ADate:TDateTime;
begin
if AIsBusy then Exit;
AIsBusy:=True;
AStringList:=TStringList.Create;
TSCDM.qryDatabase.Close;
TSCDM.qryDatabase.Open;
while not TSCDM.qryDatabase.Eof do
begin
Application.ProcessMessages;
try
AFileName:=TSCDM.qryDatabase.FieldByName('FPath').AsString;
ADBUser:=TSCDM.qryDatabase.FieldByName('FUser').AsString;
ADBPass:=TSCDM.qryDatabase.FieldByName('FPass').AsString;
AServer:=TSCDM.qryDatabase.FieldByName('FHost').AsString;
ADatabase:=TSCDM.qryDatabase.FieldByName('FType').AsInteger;
case ADatabase of
0:ConnectDB(TSCDM.ADOC,ADatabase,AServer,AFileName,ADBUser,ADBPass);
1:ConnectDB(TSCDM.ADOC,ADatabase,AServer,AFileName,ADBUser,ADBPass);
end;
//在线用户无活动时间超过180秒时,则自动删除
ADate:=GetServerDate;
TSCDM.qryQuery.Close;
TSCDM.qryQuery.SQL.Clear;
TSCDM.qryQuery.SQL.Add('select * from SYS500E');
TSCDM.qryQuery.Open;
while not TSCDM.qryQuery.Eof do
begin
if ADate-TSCDM.qryQuery.FieldByName('S500E_003').Value>=AOnline/(60*60*24) then
TSCDM.qryQuery.Delete
else
TSCDM.qryQuery.Next;
end;
//显示在线用户信息
GetOnlineUser(TSCDM.qryDatabase.FieldByName('FName').AsString);
SetAlterInfo; //预警消息插入
// SendMail(AStringList); //邮件发送
except
Continue;
end;
TSCDM.qryDatabase.Next;
end;
TSCDM.qryDatabase.Close;
TSCDM.qryQuery.Close;
AIsBusy:=False;
AStringList.Free;
end;
procedure TTscMainForm.SendMail(AStringList:TStringList);
var
ASubJect,AToEMail,AToMobile,ALine,ATitle,ARemark:String;
ALangNo,AAlterNo:Integer;
begin
AAlterNo:=0;
ALangNo:=0;
//邮件发送
//取得所有需要发送邮件,但尚未发送邮件的预警信息
//预警名称,预警时间,信息内容,邮箱地址,短信号码
qrySys910.Close;
qrySys910.SQL.Clear;
case ADatabase of
0:qrySys910.SQL.Add('select * from SYS910 where S910_007<>0 and S910_008=0 and S910_011<=now() order by S910_001,S910_005');
1:qrySys910.SQL.Add('select * from SYS910 where S910_007<>0 and S910_008=0 and S910_011<=getdate() order by S910_001,S910_005');
end;
try
qrySys910.Open
except
Exit
end;
AStringList.Clear;
ALine:='=================== ===================================================================';
ATitle:='预警时间 预警内容';
ARemark:='注:该邮件由宝丽玛信息系统自动发送,如有问题请直接回复';
while not qrySys910.Eof do
begin
Application.ProcessMessages;
qrySys910.Edit;
qrySys910.FieldByName('S910_008').Value:=True; //已发送邮件
qrySys910.Post;
//合并邮件(相同的预警名称、相同的接收人员)
if (AAlterNo<>qrySys910.FieldByName('S910_001').AsInteger) or (AToEMail<>qrySys910.FieldByName('S500A_007').AsString) then
begin
if AStringList.Count<>0 then
begin
AStringList.Add(ALine);
AStringList.Add(ARemark);
case ALangNo of
0:AStringList.Text:=AStringList.Text; //简体
1:AStringList.Text:=GB2Big5(AStringList.Text); //繁体
2:AStringList.Text:=GB2Big5(AStringList.Text); //英文
end;
case ALangNo of
0:ASubJect:=ASubJect; //简体
1:ASubJect:=GB2Big5(ASubJect); //繁体
2:ASubJect:=GB2Big5(ASubJect); //英文
end;
//设置已发送邮件标志
SendEMail(AStringList,AToEMail,'','',ASubJect,False,nil);
end;
ASubJect:=qrySys910.FieldByName('S910A_002').AsString; //预警名称
AAlterNo:=qrySys910.FieldByName('S910_001').AsInteger; //预警号
AToEMail:=qrySys910.FieldByName('S500A_007').AsString; //邮箱地址
AToMobile:=qrySys910.FieldByName('S500A_008').AsString; //短信号码
ALangNo:=qrySys910.FieldByName('S910_012').AsInteger; //语种类别
AStringList.Clear;
AStringList.Add(ALine);
AStringList.Add(ATitle);
AStringList.Add(ALine);
end;
AStringList.Add(qrySys910.FieldByName('S910_002').AsString+' '+qrySys910.FieldByName('S910_003').AsString); //预警时间 信息内容
qrySys910.Next;
end;
qrySys910.Close;
end;
procedure TTscMainForm.FormCreate(Sender: TObject);
begin
ATrayIcon:=THwTrayIcon.Create(Self);
ImageList1.GetIcon(0,ATrayIcon.Icon);
ATrayIcon.IconVisible:=True;
ATrayIcon.Hint:=GetDBString('COM00005020'); //浩晖预警服务器
ATrayIcon.MinimizeToTray:=True;
ATrayIcon.PopupMenu:=PopupMenu1;
ATrayIcon.OnDblClick:=ATrayIconDbClick;
Application.OnMinimize:=ActShowMainExecute;
if not FileExists('.\HwTSC.ini') then
begin
WriteIniFile('.\HwTSC.ini','ALTER','TIME',2,5); //预警信息的发送间隔时间5秒
WriteIniFile('.\HwTSC.ini','ALTER','ONLINE',2,180); //在线用户无活动时间超过180秒时,则自动删除
WriteIniFile('.\HwTSC.ini','EMAIL','ADDRESS',1,'jacky@polymide.com.cn'); //邮件地址
WriteIniFile('.\HwTSC.ini','EMAIL','SMTP',1,'mail.polymide.com.cn'); //发送服务器
WriteIniFile('.\HwTSC.ini','EMAIL','PORT',2,25); //发送服务器端口
WriteIniFile('.\HwTSC.ini','EMAIL','USER',1,'jacky@polymide.com.cn'); //帐号
WriteIniFile('.\HwTSC.ini','EMAIL','PASS',1,'admin0507'); //密码
end;
AAlterTime:=ReadIniFile('.\HwTSC.ini','ALTER','TIME',2); //预警信息的发送间隔时间5秒
AOnLine:=ReadIniFile('.\HwTSC.ini','ALTER','ONLINE',2); //在线用户无活动时间超过180秒时,则自动删除
AFromEMail:=ReadIniFile('.\HwTSC.ini','EMAIL','ADDRESS',1); //邮件地址
ASmtpHost:=ReadIniFile('.\HwTSC.ini','EMAIL','SMTP',1); //发送服务器
ASmtpPort:=ReadIniFile('.\HwTSC.ini','EMAIL','PORT',2); //发送服务器端口
ASmtpUser:=ReadIniFile('.\HwTSC.ini','EMAIL','USER',1); //帐号
ASmtpPass:=ReadIniFile('.\HwTSC.ini','EMAIL','PASS',1); //密码
Timer1.Enabled:=False;
Timer1.Interval:=AAlterTime*1000;
Timer1.Enabled:=True;
ActStart.Enabled:=not Timer1.Enabled;
ActStop.Enabled:=Timer1.Enabled;
adsSys500E.Close;
adsSys500E.CreateDataSet;
Timer1Timer(Timer1);
end;
procedure TTscMainForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
//退出浩晖事务服务控制器后,将不能接收到任何预警消息,您确定要退出吗?
if ShowDialog('UMS10000140')=IDNO then Abort;
TSCDM.qryDatabase.Close;
TSCDM.qryQuery.Close;
TSCDM.qrySys910.Close;
TSCDM.qrySys910A.Close;
TSCDM.qrySys910B.Close;
ATrayIcon.Destroy;
end;
procedure TTscMainForm.ActShowMainExecute(Sender: TObject);
begin
//显示/隐藏主界面(&S)
Application.ShowMainForm:=not Application.ShowMainForm;
if Application.ShowMainForm then
begin
ATrayIcon.ShowMainForm
end else
begin
ATrayIcon.HideMainForm;
end;
end;
procedure TTscMainForm.ActExitExecute(Sender: TObject);
begin
//退出(&X)
Close;
end;
procedure TTscMainForm.ActStartExecute(Sender: TObject);
begin
//启动预警服务(&T)
Timer1.Enabled:=True;
ActStart.Enabled:=not Timer1.Enabled;
ActStop.Enabled:=Timer1.Enabled;
end;
procedure TTscMainForm.ActStopExecute(Sender: TObject);
begin
//停止预警服务(&P)
//停止预警服务后,将不能接收到任何预警消息,您确定要停止预警服务?
if ShowDialog('UMS10000141')=IDYES then
begin
Timer1.Enabled:=False;
ActStart.Enabled:=not Timer1.Enabled;
ActStop.Enabled:=Timer1.Enabled;
end;
end;
procedure TTscMainForm.ActHelpExecute(Sender: TObject);
begin
//帮助
end;
procedure TTscMainForm.ActAboutExecute(Sender: TObject);
begin
//关于
end;
procedure TTscMainForm.ActSetupExecute(Sender: TObject);
begin
//设置
TscParForm:=TTscParForm.Create(Application);
if TscParForm.ShowModal=1 then
begin
AAlterTime:=ReadIniFile('.\HwTSC.ini','ALTER','TIME',2); //预警信息的发送间隔时间5秒
Timer1.Enabled:=False;
Timer1.Interval:=AAlterTime*1000;
Timer1.Enabled:=True;
end;
end;
procedure TTscMainForm.ActRefreshExecute(Sender: TObject);
begin
//刷新
Timer1Timer(Timer1);
end;
procedure TTscMainForm.ActLogoutExecute(Sender: TObject);
begin
//注销
if qrySys500E.IsEmpty then
begin
ShowMsg('UMS10000002'); //表记录为空,操作无效
Abort;
end;
if ShowDialog('UMS10000008')=IDYES then //确定要删除此记录吗?
begin
qrySys500E.Delete;
end;
end;
procedure TTscMainForm.qrySys500ES500E_006GetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
if qrySys500E.IsEmpty then Exit;
case Sender.AsInteger of
0:Text:='Online'; //活动
1:Text:='Offline'; //不活动
end;
end;
procedure TTscMainForm.dbgSys500EBackgroundDrawEvent(Sender: TObject;
ACanvas: TCanvas; ARect: TRect);
var
AText:string;
begin
inherited;
ARect.Left:=0;
ARect.Top:=0;
ACanvas.Brush.Color:=dbgSys500E.GroupPanelColor;
ACanvas.Font.Color:=dbgSys500E.GroupPanelFontColor;
//您可以把列标题拖放到此处使记录按此列进行分组
if dbgSys500E.GroupColumnCount=0 then AText:=' '+GetDBString('NOT10001012') else AText:='';
Windows.FillRect(ACanvas.Handle, ARect, 0);
DrawText(ACanvas.Handle, PChar(AText), Length(AText), ARect, DT_LEFT or DT_EXPANDTABS or DT_NOPREFIX or DT_SINGLELINE or DT_VCENTER);
end;
procedure TTscMainForm.ATrayIconDbClick(Sender: TObject);
begin
ATrayIcon.ShowMainForm;
Application.ShowMainForm:=True;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -