⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sm_msgp.pas

📁 SM_Msg.rar 手机短信发送程序
💻 PAS
📖 第 1 页 / 共 4 页
字号:
     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 + -