📄 untmain.~pas
字号:
EdtAddr.Text := TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('地址').AsString
else EdtAddr.Text := '';
if not TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('公司').IsNull then
EdtCorp.Text := TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('公司').AsString
else EdtCorp.Text := '';
if not TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('职务').IsNull then
EdtJob.Text := TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('职务').AsString
else EdtJob.Text := '';
if not TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('电子邮箱').IsNull then
EdtEmail.Text := TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('电子邮箱').AsString
else EdtEmail.Text := '';
if not TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('通讯方式').IsNull then
EdtComm.Text := TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('通讯方式').AsString
else EdtComm.Text := '';
if not TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('电话').IsNull then
EdtPhone.Text := TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('电话').AsString
else EdtPhone.Text := '';
if not TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('手机').IsNull then
ComboBoxToHuman.Text := TADOQuery(DBGridEh2.DataSource.DataSet).fieldbyname('手机').AsString
else ComboBoxToHuman.Text := '';
end;
end;
procedure TFrmMain.RemoveOldData;
var
sSQL1,sSQL2:string;
begin
sSQL1 := ' Insert into 发送短信历史表 select * from 发送短信表'
+' Where 发送情况=''' + '成功' + '''';
sSQL2 := ' Delete from 发送短信表'
+' Where 发送情况=''' + '成功' + '''';
sSQL1 := sSQL1 + ' Or DateDiff("y",请发时间,now())>'
+ IntToStr(myLocalIni.SMSValidTimeToSend);
sSQL2 := sSQL2 + ' Or DateDiff("y",请发时间,now())>'
+ IntToStr(myLocalIni.SMSValidTimeToSend);
DM1.QryLogin.Close;
DM1.QryLogin.Connection.BeginTrans;
try
DM1.QryLogin.SQL.Text := sSQL1;
DM1.QryLogin.ExecSQL;
DM1.QryLogin.Close;
DM1.QryLogin.SQL.Text := sSQL2;
DM1.QryLogin.ExecSQL;
DM1.QryLogin.Close;
except
DM1.QryLogin.Connection.RollbackTrans;
exit;
end;
DM1.QryLogin.Connection.CommitTrans;
DM1.QryLogin.Close;
end;
function TFrmMain.LoadSMSData: Boolean;
var
TmpStr:string;
begin
LoadGroups(LoginUser.ID); //填写“接收者组”
TmpStr := '';
LoadPeople(TmpStr);//填写“接收者人”
EdtSender.Text := LoginUser.Name + LoginUser.MobilePhone; //填写“发送者”
ComboBoxToGroup.ItemIndex := 0;
Result := True;
end;
function TFrmMain.LoadGroups(UserID: string): Boolean;
var
TmpStr,sSQL:string;
begin
Result := False;
ComboBoxToGroup.Clear;
ComboBoxToGroup.Items.Add('所有组');
DM1.QryGUI2DB.Close;
if Length(UserID)=0 then
begin
sSQL := ' select 组名 from 联系人组别定义字典'
+' where 所属用户ID=' + '''' + '00000000000000000000' + '''';
end else
begin
sSQL := ' select 组名 from 联系人组别定义字典'
+' where (所属用户ID=' + '''' + '00000000000000000000' + ''''
+' )or(所属用户ID=' + '''' + UserID + '''' + ')';
end;
DM1.QryGUI2DB.SQL.Text := sSQL;
DM1.QryGUI2DB.Open;
if DM1.QryGUI2DB.RecordCount=0 then exit;
DM1.QryGUI2DB.First;
while not DM1.QryGUI2DB.Eof do
begin
TmpStr := DM1.QryGUI2DB.FieldByName('组名').AsString;
ComboBoxToGroup.Items.Add(TmpStr);
DM1.QryGUI2DB.Next;
end;
DM1.QryGUI2DB.Close;
Result := True;
end;
function TFrmMain.LoadPeople(GroupName: string): Boolean;
var
TmpStr,sSQL:string;
begin
Result := False;
ComboBoxToHuman.Clear;
ComboBoxToHuman.Items.Add('该组所有人');
DM1.QryGUI2DB.Close;
if Length(GroupName)=0 then
begin
sSQL := ' Select 姓名 from 联系人字典';
sSQL := sSQL + ' Where 2>1';
end else
begin
sSQL := ' Select p.姓名 from 联系人组别定义字典 g, 联系人分组表 pvg, 联系人字典 p ';
sSQL := sSQL + ' Where g.组名=' + '''' + StrToSQL(GroupName) + '''';
sSQL := sSQL + ' And g.组ID=pvg.组ID ';
sSQL := sSQL + ' And pvg.联系人ID=p.联系人ID ';
end;
DM1.QryGUI2DB.SQL.Text := sSQL;
DM1.QryGUI2DB.Open;
if DM1.QryGUI2DB.RecordCount=0 then exit;
DM1.QryGUI2DB.First;
while not DM1.QryGUI2DB.Eof do
begin
TmpStr := DM1.QryGUI2DB.FieldByName('姓名').AsString;
ComboBoxToHuman.Items.Add(TmpStr);
DM1.QryGUI2DB.Next;
end;
DM1.QryGUI2DB.Close;
Result := True;
end;
function TFrmMain.WhenToSendSMS(aTime: TDateTime;
SendAtOnce: Boolean): Boolean;
var
CryptSMS,sSender,TmpStr,sTmp,sSMS,sSQL:string;
nSenderLen,nMaxMsgLen,i,j:integer;
DestMobiles:array of string;
begin
inherited;
Result := False;
//确定目标手机
SetLength(DestMobiles,0);
case ComboBoxToHuman.ItemIndex of
-1: begin
TmpStr := ComboBoxToHuman.Text ;
if Length(TmpStr)<>11 then
begin
Application.MessageBox('输入的目标手机号(应为11位)不正确,请重新输入!','消息');
exit;
end;
for i:=1 to 11 do
if (Ord(TmpStr[i])<48)or(Ord(TmpStr[i])>57) then
begin
Application.MessageBox('输入的目标手机号(应为数字)不正确,请重新输入!','消息');
exit;
end;
SetLength(DestMobiles,1);
DestMobiles[0] := TmpStr;
end;
0: begin
if ComboBoxToHuman.Items.Count<2 then
begin
Application.MessageBox('没有接收者,请重新选择组或输入手机号!','消息');
exit;
end else
begin
sSQL := ' Select 手机 from 联系人字典'
+' Where 姓名=' + '''' + StrToSQL(comboBoxToHuman.Items.Strings[1]) + '''';
for i:=2 to ComboboxToHuman.Items.Count-1 do
sSQL := sSQL + ' or 姓名=' + '''' + StrToSQL(comboBoxToHuman.Items.Strings[i]) + '''';
DM1.QryGUI2DB.Close;
DM1.QryGUI2DB.SQL.Text := sSQL;
DM1.QryGUI2DB.Open;
SetLength(DestMobiles,DM1.QryGUI2DB.RecordCount);
i:=0;
While not DM1.QryGUI2DB.Eof do
begin
DestMobiles[i] := DM1.QryGUI2DB.FieldByName('手机').AsString;
DM1.QryGUI2DB.Next;
Inc(i);
end;
DM1.QryGUI2DB.Close;
end;
end;
else begin
sSQL := ' Select 手机 from 联系人字典'
+' Where 姓名=' + '''' + StrToSQL(ComboBoxToHuman.Text) + '''';
DM1.QryGUI2DB.Close;
DM1.QryGUI2DB.SQL.Text := sSQL;
DM1.QryGUI2DB.Open;
SetLength(DestMobiles,DM1.QryGUI2DB.RecordCount);
i:=0;
While not DM1.QryGUI2DB.Eof do
begin
DestMobiles[i] := DM1.QryGUI2DB.FieldByName('手机').AsString;
DM1.QryGUI2DB.Next;
Inc(i);
end;
DM1.QryGUI2DB.Close;
end;
end;//of "case..."
//确定短消息内容
sSender := '';
if Length(EdtSender.Text)>0 then
sSender := ' ' + EdtSender.Text; //加了一个汉字的空格
nSenderLen := Length(sSender);
nMaxMsgLen := 108 - nSenderLen;
TmpStr := MemoSend.Text ;
if Length(TmpStr)>nMaxMsgLen then
begin
sTmp := '';
i := 1;
while i<nMaxMsgLen do
begin
if Ord(TmpStr[i])>160 then
begin
sTmp := sTmp + Copy(TmpStr, i, 2);
i := i + 2;
end else
begin
sTmp := sTmp + Copy(TmpStr, i, 1);
i := i + 1;
end;
end;
if (i=nMaxMsgLen)and(Ord(TmpStr[i])<160) then
begin
sTmp := sTmp + TmpStr[i];
i := i + 1;
end;
TmpStr := sTmp;
//TmpStr := LeftStr(TmpStr,nMaxMsgLen);//暂没作“截断后导致字符串最后是半个汉字”的处理 傅远山200206
end;
sSMS := TmpStr + sSender;
//若要求立刻发送,则发送之
if SendAtOnce then
begin
for i:=1 to StrToInt(EdtSendTimes.Text) do
for j:=0 to Length(DestMobiles)-1 do
begin
StatusBar1.Panels[1].Text := '正在发送......';
if CheckBoxCrypt.Checked then CryptSMS := CryptStr2(sSMS, 0)
else CryptSMS := sSMS;
if (SMSEnabled)and(SendSMS(PChar(DestMobiles[j]), 11, PChar(CryptSMS), Length(CryptSMS))=0) then
StatusBar1.Panels[1].Text := '发送成功!'
else StatusBar1.Panels[1].Text := '发送失败!';
end;
end;
//将要发送的短信存入数据库
for i:=0 to Length(DestMobiles)-1 do
begin
if SendAtOnce then
begin
sSQL := ' Insert into 发送短信表( 短信ID, 用户ID, 请求机器名, 请求手机, 请求时间,';
sSQL := sSQL +' 目标手机, 请发次数, 实发次数, 请发时间, 实发时间, 内容, 加密, 发送情况 )';
sSQL := sSQL +' values ( ' + '''' + GetRandomStr + '''';
sSQL := sSQL + ',' + '''' + LoginUser.ID + '''';
sSQL := sSQL + ',' + '''' + StrToSQL(myLocalHostMsg.HostName) + '''';
sSQL := sSQL + ',' + '''' + LoginUser.MobilePhone + '''';
sSQL := sSQL + ',' + '''' + FormatDateTime('yyyy-MM-dd HH:mm:ss',Now()) + '''';
sSQL := sSQL + ',' + '''' + DestMobiles[i] + '''';
sSQL := sSQL + ',' + EdtSendTimes.Text;
sSQL := sSQL + ',' + EdtSendTimes.Text;
sSQL := sSQL + ',' + '''' + FormatDateTime('yyyy-MM-dd HH:mm:ss',aTime) + '''';
sSQL := sSQL + ',' + '''' + FormatDateTime('yyyy-MM-dd HH:mm:ss',Now()) + '''';
if SysConfigData.SMSMustBeRecordCryptly then
begin
sSQL := sSQL + ',' + '''' + StrToSQL(CryptStr(sSMS,0)) + '''';
sSQL := sSQL + ',' + '''' + '是' + '''';
end else
begin
sSQL := sSQL + ',' + '''' + StrToSQL(sSMS) + '''';
sSQL := sSQL + ',' + '''' + '否' + '''';
end;
sSQL := sSQL + ',' + '''' + '成功' + ''')';
end else
begin
sSQL := ' Insert into 发送短信表( 短信ID, 用户ID, 请求机器名, 请求手机, 请求时间,';
sSQL := sSQL +' 目标手机, 请发次数, 实发次数, 请发时间, 内容, 加密, 发送情况 )';
sSQL := sSQL +' values ( ' + '''' + GetRandomStr + '''';
sSQL := sSQL + ',' + '''' + LoginUser.ID + '''';
sSQL := sSQL + ',' + '''' + StrToSQL(myLocalHostMsg.HostName) + '''';
sSQL := sSQL + ',' + '''' + LoginUser.MobilePhone + '''';
sSQL := sSQL + ',' + '''' + FormatDateTime('yyyy-MM-dd HH:mm:ss',Now()) + '''';
sSQL := sSQL + ',' + '''' + DestMobiles[i] + '''';
sSQL := sSQL + ',' + EdtSendTimes.Text;
sSQL := sSQL + ',' + '0';
sSQL := sSQL + ',' + '''' + FormatDateTime('yyyy-MM-dd HH:mm:ss',aTime) + '''';
if SysConfigData.SMSMustBeRecordCryptly then
begin
sSQL := sSQL + ',' + '''' + StrToSQL(CryptStr(sSMS,0)) + '''';
sSQL := sSQL + ',' + '''' + '是' + '''';
end else
begin
sSQL := sSQL + ',' + '''' + StrToSQL(sSMS) + '''';
sSQL := sSQL + ',' + '''' + '否' + '''';
end;
sSQL := sSQL + ',' + '''' + '请求' + ''')';
end;
DM1.QryGUI2DB.Close;
DM1.QryGUI2DB.SQL.Text := sSQL;
DM1.QryGUI2DB.ExecSQL;
end;
DM1.QryGUI2DB.Close;
Result := True;
end;
procedure TFrmMain.LoadSysConfigData;
var
sSQL:string;
begin
SysConfigData.SMSMustBeRecordCryptly := True;
SysConfigData.UserPasswordMustBeRecordCryptly := True;
DM1.QryLogin.Close;
sSQL := ' Select 值 from 系统配置信息字典'
+' Where 名='+''''+'手机短信必须加密存储'+'''';
DM1.QryLogin.SQL.Text := sSQL;
try
DM1.QryLogin.Open;
if DM1.QryLogin.RecordCount>0 then
begin
DM1.QryLogin.First;
if DM1.QryLogin.FieldByName('值').AsString='否' then SysConfigData.SMSMustBeRecordCryptly := False
else SysConfigData.SMSMustBeRecordCryptly := True;
end;
except
SysConfigData.SMSMustBeRecordCryptly := True;
end;
DM1.QryLogin.Close;
sSQL := ' Select 值 from 系统配置信息字典'
+' Where 名='+''''+'用户口令必须加密存储'+'''';
DM1.QryLogin.SQL.Text := sSQL;
try
DM1.QryLogin.Open;
if DM1.QryLogin.RecordCount>0 then
begin
DM1.QryLogin.First;
if DM1.QryLogin.FieldByName('值').AsString='否' then SysConfigData.UserPasswordMustBeRecordCryptly := False
else SysConfigData.UserPasswordMustBeRecordCryptly := True;
end;
except
SysConfigData.UserPasswordMustBeRecordCryptly := True;
end;
DM1.QryLogin.Close;
end;
procedure TFrmMain.Button2Click(Sender: TObject);
var
askTime:TDateTime;
begin
if not SMSEnabled then exit;
TimerRS.Enabled := False;
askTime := TimeOf(TimePickerSend.DateTime) + DateOf(DatePickerSend.DateTime);
if WhenToSendSMS(askTime, False) then StatusBar1.Panels[1].text := '提示:已成功记录到发送短信!'
else StatusBar1.Panels[1].Text := '提示:记录到发送短信失败!';
TimerRS.Enabled := True;
end;
procedure TFrmMain.Button3Click(Sender: TObject);
begin
if not SMSEnabled then exit;
//if CheckBoxReqStatus.Checked then PDUtype:='31' else PDUtype:='11';
WhenToSendSMS(now,True);
end;
procedure TFrmMain.EdtSenderChange(Sender: TObject);
begin
lblCount.Caption := IntToStr(Length(MemoSend.Lines.Text)+Length(EdtSender.Text));
Statusbar1.Panels[1].Text := '';
end;
procedure TFrmMain.MemoSendChange(Sender: TObject);
begin
lblCount.Caption := IntToStr(Length(MemoSend.Lines.Text)+Length(EdtSender.Text));
Statusbar1.Panels[1].Text := '';
end;
procedure TFrmMain.ComboBoxToHumanChange(Sender: TObject);
begin
Statusbar1.Panels[1].Text := '';
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -