📄 sm_msgp.pas
字号:
Cells[4,i+2]:='';
end;
if sgrdString3.RowCount>2 then
sgrdString3.RowCount:=sgrdString3.RowCount-1;
end;
end;
end;
procedure TfrmSM_Msg.Load_PhoneNote;
var
PhoneNote_Store:PUserInfo;
ClassInfo_Store:PClassInfo;
i,Cur_Point,Classe_ID:Integer;
Class_ID:string;
begin
with frmMsgDB.qrySysTblSet do
begin
Close;
Parameters.ParamByName('FTableName').Value:='PhoneNote';
Open;
end;
if frmMsgDB.qrySysTblSet.RecordCount>0 then
for i:=0 to frmMsgDB.qrySysTblSet.FieldCount-3 do
begin
sgrdString2.Cells[0,i]:=frmMsgDB.qrySysTblSet.Fields[i+2].Text;
sgrdString2.RowCount:=sgrdString2.RowCount+1;
end;
sgrdString2.RowCount:=sgrdString2.RowCount-2;
frmMsgDB.tblNum.Open;
frmMsgDB.tblClass.Open;
frmMsgDB.tblClass.First;
TV_PhoneNote.Items.Clear;
TV_PhoneNote.Items.BeginUpdate;
RootNode:=TV_PhoneNote.Items.AddFirst(nil,'通信录');
while not frmMsgDB.tblClass.Eof do
begin
New(ClassInfo_Store);
frmMsgDB.tblNum.First;
RootNode:=TV_PhoneNote.Items.AddChild(TV_PhoneNote.items.
GetFirstNode,frmMsgDB.tblClass.Fields[1].Value);
Class_ID:=frmMsgDB.tblClass.Fields[0].Value;
with ClassInfo_Store^ do
begin
FClass:=frmMsgDB.tblClass.Fields[0].Value;
FName:=frmMsgDB.tblClass.Fields[1].Value;
end;
UserClassInfo_Store.Add(ClassInfo_Store);
Classe_ID:=RootNode.Index;
Cur_Point:=0;
while not frmMsgDB.tblNum.Eof do
begin
if Class_ID=frmMsgDB.tblNum.Fields[1].Value then
begin //
New(PhoneNote_Store);
with PhoneNote_Store^ do
begin
FClasse_ID:=Classe_ID;
FCurPoint:=Cur_Point;
with frmMsgDB.tblNum do
begin
FCurIndex:=Fields[0].Value;
FClasse:= Fields[1].Text;
FName:= Fields[2].Text;
FPhoneNum1:= Fields[3].Text;
FPhoneNum2:= Fields[4].Text;
FFax:= Fields[5].Text;
FHomePhone:= Fields[6].Text;
FMobilePhone:= Fields[7].Text;
FEmail:= Fields[8].Text;
FUnit:= Fields[9].Text;
FOfficeAdd:= Fields[10].Text;
FCommAdd:= Fields[11].Text;
FPost:= Fields[12].Text;
FRetic:= Fields[13].Text;
FQQNum:= Fields[14].Text;
FBZ:= Fields[15].Text;
end;
end; //
SubNode:=TV_PhoneNote.Items.AddChild(RootNode,
frmMsgDB.tblNum.Fields[2].Value);
UserPhoneNote_Store.Add(PhoneNote_Store);
Inc(Cur_Point);
end;
frmMsgDB.tblNum.Next;
end;
frmMsgDB.tblClass.Next;
end;
TV_PhoneNote.Items.EndUpdate;
//if UserPhoneNote_Store.Count>0 then Dispose(PhoneNote_Store);
end;
procedure TfrmSM_Msg.ChatRecord;
begin
TV_ChatRecord.Items.Clear;
TV_ChatRecord.Items.BeginUpdate;
Chat_RootNode:=TV_ChatRecord.Items.AddFirst(nil,'聊天记录');
Chat_RootNode.ImageIndex:=1;
frmMsgDB.tblChatNum.Active:=True;
frmMsgDB.tblChatNum.Open;
frmMsgDB.tblChatNum.First;
while not frmMsgDB.tblChatNum.Eof do
begin
Chat_RootNode:=TV_ChatRecord.Items.AddChild(TV_ChatRecord.items.GetFirstNode,frmMsgDB.tblChatNum.Fields[0].Value);
frmMsgDB.tblChatNum.Next;
end;
frmMsgDB.tblChatNum.Close;
TV_ChatRecord.Items.EndUpdate;
end;
procedure TfrmSM_Msg.Timer1Timer(Sender: TObject);
begin
if MSCOMM.PortOpen then if RI>1 then RI:=0;
if not MSCOMM.PortOpen then RI:=2;
if Receive_Message then if RI1>1 then RI1:=0;
with StatusBar1.Canvas do
begin
Brush.Color := $00EBECED;
FillRect(A_Rect);
ImageList1.Draw(StatusBar1.Canvas,0,4,RI);
ImageList2.Draw(StatusBar1.Canvas,193,1,RI1);
if MSCOMM.PortOpen then TextOut(15, 4,stat_msg);
if not MSCOMM.PortOpen then TextOut(15,4,'端口连接失败...');
Font.Style:=TempFont;
end;
if MSCOMM.PortOpen=True then Inc(RI);
if Receive_Message then Inc(RI1);
end;
procedure TfrmSM_Msg.TmrReceiveTimer(Sender: TObject);
var
Search_falg:Boolean;
Name,ReceiveTime,PhoneString,s,b:string;
i,a,c:integer;
begin
s:=ReceiveStr;
ReceiveStr:='';
Receive_Message:=True;
bit_ReadSM.Enabled:=True;
if (Pos('+CPBR',s)>0) then ReadPhoneBook(s);
if (Pos('+CMT',s)>0)or(Pos('+CMGR',s)>0) then
begin
stat_msg:='状态:收到新的信息!';
ReceiveTime:=Copy(DateToStr(Date),1,2);
inc(MsgCount);
a:=Pos('D9168',s)+5;
SndPlaySound('msg.wav',SND_FILENAME or SND_SYNC);
if Copy(s,a+12,4)='0008' then //中文编码
begin
//ReceiveTime:=FormatFloat('#:00:00',StrToInt(ReadSM(Copy(s,a+22,6))));
ReceiveTime:=ReceiveTime+ReadSM(Copy(s,a+16,12));
c:=StrToInt('$'+Copy(s,a+30,2));
b:=UnicodeToStr(Copy(s,a+32,c*2));
PhoneString:=ReadSM(Copy(s,a,12));
end;
if Copy(s,a+12,4)='0000' then //英文编码
begin
ReceiveTime:=ReceiveTime+ReadSM(Copy(s,a+16,12));
c:=StrToInt('$'+Copy(s,a+30,2));
b:=UnicodeToStr(EnglishSMConv(Copy(s,a+32,c*2)));
PhoneString:=ReadSM(Copy(s,a,12));
end;
CurLogMsg(0,'收到'+SearchPhoneNote(PhoneString)+'的信息‖访问时间'+ReceiveTime+'‖信息内容'+'【'+b+'】');
CurLogMsg(0,'数据接收成功!');
with frmMsgDB.qrySearchNum do //查找用户信息
begin
Close;
Parameters.ParamByName('FMobilePhone').Value:=PhoneString;
ExecSQL;
Open;
end;
if frmMsgDB.qrySearchNum.RecordCount>0 then
begin
PhoneString:=frmMsgDB.qrySearchNum.Fields[6].Text;
Name:=frmMsgDB.qrySearchNum.Fields[1].Text;
Search_falg:=False;
for i:=1 to sgrdString.RowCount-1 do
if Trim(sgrdString.Cells[2,i])=Trim(frmMsgDB.qrySearchNum.Fields[6].Text) then
begin //如果在列表中找到
sgrdString.Row:=i;
Search_falg:=True;
break;
end;
if not Search_falg then
for i:=1 to sgrdString.RowCount do
if (Trim(sgrdString.Cells[1,i])='') and (Trim(sgrdString.Cells[2,i])='') then
begin //如果在列表中没找到
if i=sgrdString.RowCount-1 then sgrdString.RowCount:=sgrdString.RowCount+1;
sgrdString.Cells[1,i]:=Name;
sgrdString.Cells[2,i]:=PhoneString;
sgrdString.Row:=i;
break;
end;
end else begin
for i:=1 to sgrdString.RowCount-1 do
begin
Search_falg:=False;
if Trim(sgrdString.Cells[2,i])=PhoneString then
begin
sgrdString.Row:=i;
sgrdString.Cells[1,i]:='来访者';
Name:='来访者';
sgrdString.Cells[2,i]:=PhoneString;
Search_falg:=True;
break;
end;
end;
if not Search_falg then
for i:=1 to sgrdString.RowCount-1 do
if ((sgrdString.Cells[1,i]='') and (sgrdString.Cells[2,i]='')) then
begin
if i=sgrdString.RowCount-1 then
sgrdString.RowCount:=sgrdString.RowCount+1;
sgrdstring.Row:=i;
sgrdString.Cells[1,i]:='来访者';
Name:='来访者';
sgrdString.Cells[2,i]:=PhoneString;
break;
end;
end;
CommitData(PhoneString,Name,ReceiveTime,b,'Receive');
StatusBar1.Panels[2].Text:='收到新信息'+IntToStr(MsgCount)+'条';
end;
TmrReceive.Enabled:=False;
end;
procedure TfrmSM_Msg.FormCreate(Sender: TObject);
begin
SendLine:=TStringList.Create;
PhoneNote_List:=TStringList.Create;
MobilePhone_List:=TStringList.Create;
UserPhoneNote_Store:=TList.Create;
UserClassInfo_Store:=TList.Create;
PhoneBook:=TStringList.Create;
frmCustLogin:=TfrmCustLogin.Create(self);
end;
procedure TfrmSM_Msg.FormShow(Sender: TObject);
var
i:integer;
begin
frmSM_Msg.Caption:='短信精灵(本机号码:'+Reg_Phone+')';
PageControl1.TabIndex:=0;
sgrdString.Col:=2;
WriteSysReg;
ReadSysReg;
LoadSM_Dy;
Load_PhoneNote;
for i:=0 to sgrdString.RowCount do
sgrdString.Cells[0,i+1]:=IntToStr(i+1);
for i:=0 to sgrdString1.RowCount do
sgrdString1.Cells[0,i+1]:=IntToStr(i+1);
sgrdString.Cells[0,0]:='编号';
sgrdString.Cells[1,0]:='用户名';
sgrdString.Cells[2,0]:='手机号码';
sgrdString1.Cells[0,0]:='编号';
sgrdString1.Cells[1,0]:='短语名称';
sgrdString3.Cells[0,0]:='发送号码';
sgrdString3.Cells[1,0]:='接收号码';
sgrdString3.Cells[2,0]:='姓名';
sgrdString3.Cells[3,0]:='发生时间';
sgrdString3.Cells[4,0]:='备注';
ChatRecord;
CommCMGF;
end;
procedure TfrmSM_Msg.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
if frmSM_Msg.Active then
begin
CanClose:=False;
if Application.MessageBox('确定要退出本系统吗?','退出确认',
MB_IconQuestion+MB_YesNo)=IDYes then CanClose:=True;
end;
end;
procedure TfrmSM_Msg.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SendLine.Free;
PhoneNote_List.Free;
MobilePhone_List.Free;
UserPhoneNote_Store.Free;
UserClassInfo_Store.Free;
PhoneBook.Free;
Action:=caFree;
frmCustLogin.Release;
end;
procedure TfrmSM_Msg.mem_InfoSendChange(Sender: TObject);
begin
Panel12.Caption:='信息内容(长度:'+IntToStr(Length(mem_InfoSend.Text))+')';
if Length(mem_InfoSend.Text)>=140 then
MessageBox(Application.Handle,PChar('信息长度不能超过140个字节!'),
PChar('错误'),MB_ICONINFORMATION);
end;
procedure TfrmSM_Msg.MSCommComm(Sender: TObject);
begin
ReceiveStr:=ReceiveStr+MSComm.Input;
if Pos('+CMT',ReceiveStr)>0 then TmrReceive.Enabled:=True;
if Pos('+CMGR',ReceiveStr)>0 then TmrReceive.Enabled:=True;
if Pos('+CPBR',ReceiveStr)>0 then TmrReceive.Enabled:=True;
end;
procedure TfrmSM_Msg.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
A_Rect:=Rect;
end;
procedure TfrmSM_Msg.N13Click(Sender: TObject);
begin
Close;
end;
procedure TfrmSM_Msg.N10Click(Sender: TObject);
var
frmParSet:TfrmParSet;
begin
frmParSet:=TfrmParSet.Create(Self);
frmParSet.ShowModal;
end;
procedure TfrmSM_Msg.N11Click(Sender: TObject);
begin
PageControl1.Tabindex:=3;
end;
procedure TfrmSM_Msg.TmrBackMesTimer(Sender: TObject);
begin
case CurWork of
CMGR_Falg:
begin
if Pos('OK',ReceiveStr)>0 then
begin
ReceiveStr:='';
CurLogMsg(0,'从SIM中读取到新的信息!');
stat_msg:='状态:读取新的信息!';
// CommCMGD;
TmrBackMes.Enabled:=False;
end;
if Pos('ERROR',ReceiveStr)>0 then
begin
ReceiveStr:='';
CurLogMsg(0,'SIM中没有所要读取的信息!');
stat_msg:='状态:没有信息读取!';
ErrorMsg(1,'SIM中没有所要读取的信息!');
end;
end;
CMGF_Falg:
begin
if Pos('OK',ReceiveStr)>0 then
begin
CurLogMsg(0,'GSM设备初始化成功...');
stat_msg:='状态:GSM设备初始化成功!';
TmrBackMes.Enabled:=False;
bit_Send.Enabled:=True;
ReceiveStr:='';
end;
if Pos('ERROR',ReceiveStr)>0 then
begin
CurLogMsg(0,'GSM设备初始化失败...');
stat_msg:='状态:GSM设备初始化失败!';
CommRefresh;
end;
end;
Send_Falg:
begin
if Pos('ERROR',ReceiveStr)>0 then
begin
CurLogMsg(0,'第'+IntToStr(Try_Error_Count)+'次信息发送失败...');
stat_msg:='状态:信息发送失败!';
Timer1.Interval:=1000;
ReceiveStr:='';
CommRefresh;
TmrSend.Enabled:=True;
if Try_Error_Count<3 then inc(Try_Error_Count) else
begin
Try_Error_Count:=1;
if MobilePhone_List.Count>1 then bit_StopSend.OnClick(nil) else
begin
TmrSend.Enabled:=False;
bit_StopSend.Enabled:=True;
bit_Send.Enabled:=True;
bit_ReadSM.Enabled:=True;
end;
end;
end;
if Pos('OK',ReceiveStr)>0 then
begin
ReceiveStr:='';
Timer1.Interval:=1000;
CurLogMsg(0,'信息发送成功...');
stat_msg:='状态:信息发送成功!';
TmrBackMes.Enabled:=False;
TmrSend.Enabled:=False;
if MobilePhone_List.Count=1 then
begin
bit_Send.Enabled:=True;
bit_ReadSM.Enabled:=True;
end;
CommitData(Receive_MobilePhone,Receive_Name,d,Info_Content,'Send');
ReceiveStr:='';
if MobilePhone_List.Count>1 then
begin
MobilePhone_List.Delete(0);
Delay(4000);
TmrSend.Enabled:=True;
end;
end;
end;
end;
end;
procedure TfrmSM_Msg.TV_PhoneNoteDragDrop(Sender, Source: TObject; X,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -