📄 tscmain.pas.svn-base
字号:
unit TscMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Menus, ActnList, ADODB, ComCtrls, ToolWin, HwTrayIcon,
dxExEdtr, dxCntner, dxTL, dxDBCtrl, dxDBGrid, DB, IdMessage, IdSMTP,
IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, DateUtils,
IdBaseComponent, ImgList, dxDBTLCl, dxGrClms, StdCtrls;
type
TTscMainForm = class(TForm)
Timer1: TTimer;
MainMenu1: TMainMenu;
ActionList1: TActionList;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
miFile: TMenuItem;
miUser: TMenuItem;
miHelp: TMenuItem;
miSet: TMenuItem;
N2: TMenuItem;
X1: TMenuItem;
ActSetup: TAction;
ActExit: TAction;
ActShowMain: TAction;
ActStart: TAction;
ActStop: TAction;
T1: TMenuItem;
P1: TMenuItem;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
dbgSys500E: TdxDBGrid;
dsSys500E: TDataSource;
qrySys500E: TADOQuery;
IdMsgSend: TIdMessage;
SMTP: TIdSMTP;
ImageList1: TImageList;
ActHelp: TAction;
ActAbout: TAction;
ActRefresh: TAction;
ActLogout: TAction;
N3: TMenuItem;
A1: TMenuItem;
N4: TMenuItem;
ActRefresh1: TMenuItem;
O1: TMenuItem;
O2: TMenuItem;
T2: TMenuItem;
P2: TMenuItem;
N5: TMenuItem;
X2: TMenuItem;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
qrySys500ES500E_001: TIntegerField;
qrySys500ES500E_002: TDateTimeField;
qrySys500ES500E_003: TDateTimeField;
qrySys500ES500E_004: TWideStringField;
qrySys500ES500E_005: TWideStringField;
qrySys500ES500E_006: TSmallintField;
qrySys500ES500A_002: TWideStringField;
adsSys500E: TADODataSet;
adsSys500EFDatabase: TStringField;
adsSys500EFUser: TStringField;
adsSys500EFLogin: TDateTimeField;
adsSys500EFLast: TDateTimeField;
adsSys500EFIP: TStringField;
adsSys500EFComputer: TStringField;
adsSys500EFStatus: TStringField;
adsSys500EFUserNo: TIntegerField;
dbgSys500EFDatabase: TdxDBGridMaskColumn;
dbgSys500EFUser: TdxDBGridMaskColumn;
dbgSys500EFLogin: TdxDBGridDateColumn;
dbgSys500EFLast: TdxDBGridDateColumn;
dbgSys500EFIP: TdxDBGridMaskColumn;
dbgSys500EFComputer: TdxDBGridMaskColumn;
dbgSys500EFStatus: TdxDBGridMaskColumn;
qrySys910: TADOQuery;
qrySys500A: TADOQuery;
qrySys910A: TADOQuery;
qrySys910S910_001: TIntegerField;
qrySys910S910_002: TDateTimeField;
qrySys910S910_003: TWideStringField;
qrySys910S910_004: TWideStringField;
qrySys910S910_005: TIntegerField;
qrySys910S910_006: TSmallintField;
qrySys910S910_007: TBooleanField;
qrySys910S910_008: TBooleanField;
qrySys910S910_009: TBooleanField;
qrySys910S910_010: TBooleanField;
qrySys910S910A_002: TStringField;
qrySys910S500A_007: TStringField;
qrySys910S500A_008: TStringField;
qrySys910S910_011: TDateTimeField;
qrySys910S910_012: TSmallintField;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ActShowMainExecute(Sender: TObject);
procedure ActExitExecute(Sender: TObject);
procedure ActStartExecute(Sender: TObject);
procedure ActStopExecute(Sender: TObject);
procedure ActHelpExecute(Sender: TObject);
procedure ActAboutExecute(Sender: TObject);
procedure ActSetupExecute(Sender: TObject);
procedure ActRefreshExecute(Sender: TObject);
procedure ActLogoutExecute(Sender: TObject);
procedure qrySys500ES500E_006GetText(Sender: TField; var Text: String;
DisplayText: Boolean);
procedure dbgSys500EBackgroundDrawEvent(Sender: TObject;
ACanvas: TCanvas; ARect: TRect);
procedure ATrayIconDbClick(Sender: TObject);
private
AFromEMail:string; //email address
ASmtpHost:string; //smtp host
ASmtpPort:integer; //smtp port
ASmtpUser:string; //smtp user
ASmtpPass:string; //smtp password
AAlterTime:Integer; //预警信息的发送间隔时间5秒
AOnline:Integer; //在线用户无活动时间超过180秒时,则自动删除
ATrayIcon:THwTrayIcon;
AIsBusy:Boolean;
procedure SendEMail(ABody:TStrings;AToEMail,ACCEMail,ABCCEMail,ASubJect:string;AReturnReciept:Boolean;AFileName:TStringList);
procedure GetOnlineUser(AAcctName:string);
procedure SendMail(AStringList:TStringList);
{ Private declarations }
public
{ Public declarations }
end;
var
TscMainForm: TTscMainForm;
implementation
uses TSCDATA, AlterComm, TscPar;
{$R *.dfm}
//发送邮件
procedure TTscMainForm.SendEMail(ABody:TStrings;AToEMail,ACCEMail,ABCCEMail,ASubJect:string;AReturnReciept:Boolean;AFileName:TStringList);
var
I:Integer;
begin
with IdMsgSend do
begin
Body.Assign(ABody);
From.Text:=AFromEMail;
Recipients.EMailAddresses:=AToEMail;
Subject:=ASubJect;
Priority:=mpNormal; //Highest,High,Normal,Low,Lowest
CCList.EMailAddresses:=ACCEMail;
BccList.EMailAddresses:=ABCCEMail;
//是否回复已读回执
if AReturnReciept then ReceiptRecipient.Text:=AFromEMail else ReceiptRecipient.Text:='';
//附件
if AFileName<>nil then
begin
for I:=0 to AFileName.Count do
begin
TIdAttachment.Create(MessageParts,AFileName[I]);
end;
end;
end;
try
SMTP.AuthenticationType:=atLogin;
SMTP.Host:=ASmtpHost;
SMTP.Port:=ASmtpPort;
SMTP.UserID:=ASmtpUser;
SMTP.Password:=ASmtpPass;
try
SMTP.Connect;
SMTP.Send(IdMsgSend);
qrySys910.UpdateBatch;
except
qrySys910.CancelBatch;
Abort;
end;
finally
SMTP.Disconnect;
end;
end;
function GetInfo(AlterName,AlterInfo:string):String;
var
S,AFieldName,ASubStr,AField:String;
I,AStart,AEnd:Integer;
begin
Result:=AlterName;
AStart:=0;
AEnd:=0;
S:=AlterInfo;
for I:=1 to Length(S) do
begin
if (AStart=0) and (S[I]='[') then AStart:=I
else if (AEnd=0) and (S[I]=']') then AEnd:=I;
if (AStart<>0) and (AEnd<>0) then
begin
AFieldName:=Copy(S,AStart+1,AEnd-AStart-1);
AField:=AFieldName;
Delete(AField,1,Pos('.',AField));
ASubStr:=TSCDM.qryQuery.FieldByName(AField).AsString;
ReplaceString(AFieldName,ASubStr,AlterInfo);
AStart:=0;
AEnd:=0;
end;
end;
Result:=Result+': '+AlterInfo;
end;
//取得发送的时间
function GetSendTime(AType,ATime:Integer):TDateTime;
var
ADate:TDateTime;
AYear,AMonth,ADay,AHour,AMine:Word;
begin
ADate:=GetServerDate;
AHour:=0;
AMine:=0;
if AType=1 then
begin
DecodeDate(ADate,AYear,AMonth,ADay);
AHour:=ATime div 60;
AMine:=ATime-AHour*60;
end;
if AType=3 then
begin
if AMonth=12 then
begin
AYear:=AYear+1;
AMonth:=1;
end else
AMonth:=AMonth+1;
if ATime=0 then
begin
ADay:=1;
DecodeDate(ADate,AYear,AMonth,ADay);
ADate:=GetMonthEndDate(ADate);
end else
begin
ADay:=ATime;
DecodeDate(ADate,AYear,AMonth,ADay);
end;
end;
case AType of //0=即时,1=每天,2=每周,3=每月
0:ADate:=ADate;
1:ADate:=EncodeDateTime(AYear,AMonth,ADay,AHour,AMine,0,0);
2:ADate:=ADate+7-DayOfWeek(ADate)+ATime+1;
3:ADate:=ADate;
end;
Result:=ADate;
end;
procedure InsertAlterInfo(ASQL:String);
var
S:String;
begin
TSCDM.qryQuery.Close;
TSCDM.qryQuery.SQL.Clear;
TSCDM.qryQuery.SQL.Add(ASQL);
TSCDM.qryQuery.Open;
while not TSCDM.qryQuery.Eof do
begin
S:=GetInfo(TSCDM.qrySys910A.FieldByName('S910A_002').Value,TSCDM.qrySys910A.FieldByName('S910A_007').Value); //内容
TSCDM.qrySys910.Close;
TSCDM.qrySys910.SQL.Clear;
TSCDM.qrySys910.SQL.Add('select * from SYS910 where S910_003='+''''+S+'''');
TSCDM.qrySys910.Open;
if TSCDM.qrySys910.IsEmpty then
begin
TSCDM.qrySys910B.Close;
TSCDM.qrySys910B.SQL.Clear;
TSCDM.qrySys910B.SQL.Add('select * from SYS910B where S910B_001='+TSCDM.qrySys910A.FieldByName('S910A_001').AsString);
TSCDM.qrySys910B.Open;
while not TSCDM.qrySys910B.Eof do
begin
TSCDM.qrySys910.Insert;
TSCDM.qrySys910.FieldByName('S910_001').Value:=TSCDM.qrySys910A.FieldByName('S910A_001').Value; //预警編號
TSCDM.qrySys910.FieldByName('S910_002').Value:=Now; //预警时间
TSCDM.qrySys910.FieldByName('S910_003').Value:=S; //内容
TSCDM.qrySys910.FieldByName('S910_004').Value:=TSCDM.qrySys910A.FieldByName('S910A_006').Value; //程序编号
TSCDM.qrySys910.FieldByName('S910_005').Value:=TSCDM.qrySys910B.FieldByName('S910B_002').Value; //接收人
TSCDM.qrySys910.FieldByName('S910_006').Value:=1; //状态 1=新消息,2=旧消息
TSCDM.qrySys910.FieldByName('S910_007').Value:=TSCDM.qrySys910B.FieldByName('S910B_003').Value; //发邮件否
TSCDM.qrySys910.FieldByName('S910_008').Value:=False; //已发邮件
TSCDM.qrySys910.FieldByName('S910_009').Value:=TSCDM.qrySys910B.FieldByName('S910B_004').Value; //发短信否
TSCDM.qrySys910.FieldByName('S910_010').Value:=False; //已发短信
TSCDM.qrySys910.FieldByName('S910_011').Value:=GetSendTime(TSCDM.qrySys910B.FieldByName('S910B_005').Value,TSCDM.qrySys910B.FieldByName('S910B_006').Value); //发送时间
TSCDM.qrySys910.FieldByName('S910_012').Value:=TSCDM.qrySys910B.FieldByName('S910B_007').Value; //语种类别
TSCDM.qrySys910.Post;
TSCDM.qrySys910B.Next;
end;
end;
TSCDM.qryQuery.Next;
end;
TSCDM.qryQuery.Close;
TSCDM.qrySys910.Close;
TSCDM.qrySys910B.Close;
end;
procedure GetAlterScript(AlterNo:Integer;ATableName:string);
var
S:String;
begin
if TSCDM.qrySys910A.Active then
TSCDM.qrySys910A.Locate('S910A_001',AlterNo,[]);
S:='select * from '+ATableName+' where '+TSCDM.qrySys910A.FieldByName('S910A_008').Value;
InsertAlterInfo(S);
end;
procedure SetAlterInfo;
var
AlterNo:Integer;
ATable:String;
begin
try
TSCDM.qrySys910A.Close;
TSCDM.qrySys910A.Open;
except
Abort;
end;
while not TSCDM.qrySys910A.Eof do
begin
AlterNo:=TSCDM.qrySys910A.FieldByName('S910A_001').Value;
ATable:=TSCDM.qrySys910A.FieldByName('S910A_005').Value;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -