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

📄 sm_msgp.pas

📁 SM_Msg.rar 手机短信发送程序
💻 PAS
📖 第 1 页 / 共 4 页
字号:
unit SM_Msgp;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls, OleCtrls, MSCommLib_TLB, ImgList, StdCtrls,
  Grids, Buttons, DBCtrls, DBGrids, Menus, mmSystem, Registry, ToolWin,
  XPMenu, DB, ADODB, CheckLst;

type
  TfrmSM_Msg = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    StatusBar1: TStatusBar;
    Timer1: TTimer;
    ImageList1: TImageList;
    TmrReceive: TTimer;
    Panel6: TPanel;
    TmrBackMes: TTimer;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    PopupMenu2: TPopupMenu;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    TabSheet4: TTabSheet;
    CoolBar1: TCoolBar;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    MainMenu1: TMainMenu;
    N9: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    N13: TMenuItem;
    N14: TMenuItem;
    bit_PhoneNoteApp: TBitBtn;
    bit_PhoneNoteSave: TBitBtn;
    bit_PhoneNoteDel: TBitBtn;
    Panel2: TPanel;
    BitBtn6: TBitBtn;
    BitBtn7: TBitBtn;
    BitBtn8: TBitBtn;
    N15: TMenuItem;
    N16: TMenuItem;
    V1: TMenuItem;
    D1: TMenuItem;
    TmrSend: TTimer;
    Panel1: TPanel;
    bit_DelChatMsg: TBitBtn;
    BitBtn11: TBitBtn;
    TabSheet5: TTabSheet;
    Panel3: TPanel;
    BitBtn13: TBitBtn;
    BitBtn14: TBitBtn;
    BitBtn15: TBitBtn;
    bit_PhoneNoteCan: TBitBtn;
    ImageList2: TImageList;
    Panel11: TPanel;
    sgrdString: TStringGrid;
    bit_Send: TBitBtn;
    bit_Search: TBitBtn;
    bitAllSelect: TBitBtn;
    bit_StopSend: TBitBtn;
    BitBtn10: TBitBtn;
    bit_ReadSM: TBitBtn;
    mem_InfoSend: TMemo;
    Panel12: TPanel;
    mem_InfoReceive: TMemo;
    Panel13: TPanel;
    MSComm: TMSComm;
    sgrdString2: TStringGrid;
    Panel7: TPanel;
    TV_PhoneNote: TTreeView;
    TV_ChatRecord: TTreeView;
    Panel10: TPanel;
    sgrdString3: TStringGrid;
    Panel14: TPanel;
    mem_Chat: TMemo;
    sgrdString1: TStringGrid;
    Memo1: TMemo;
    sgrdString4: TStringGrid;
    procedure Timer1Timer(Sender: TObject);
    procedure TmrReceiveTimer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure mem_InfoSendChange(Sender: TObject);
    procedure MSCommComm(Sender: TObject);
    procedure StatusBar1DrawPanel(StatusBar: TStatusBar;
      Panel: TStatusPanel; const Rect: TRect);
    procedure N13Click(Sender: TObject);
    procedure N10Click(Sender: TObject);
    procedure N11Click(Sender: TObject);
    procedure TmrBackMesTimer(Sender: TObject);
    procedure TV_PhoneNoteDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure TV_PhoneNoteDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure sgrdStringDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure sgrdStringExit(Sender: TObject);
    procedure sgrdStringKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure sgrdStringSelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure bit_SearchClick(Sender: TObject);
    procedure bit_SearchOnClick(Sender: TObject);
    procedure sgrdStringSetEditText(Sender: TObject; ACol, ARow: Integer;
      const Value: String);
    procedure N8Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure sgrdStringGetEditText(Sender: TObject; ACol, ARow: Integer;
      var Value: String);
    procedure TmrSendTimer(Sender: TObject);
    procedure sgrdString3DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure TV_ChatRecordChange(Sender: TObject; Node: TTreeNode);
    procedure sgrdString3SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure BitBtn8Click(Sender: TObject);
    procedure BitBtn7Click(Sender: TObject);
    procedure BitBtn6Click(Sender: TObject);
    procedure bit_DelChatMsgClick(Sender: TObject);
    procedure BitBtn11Click(Sender: TObject);
    procedure bit_ReadSMClick(Sender: TObject);
    procedure V1Click(Sender: TObject);
    procedure N16Click(Sender: TObject);
    procedure D1Click(Sender: TObject);
    procedure sgrdString1DblClick(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure MenuItem5Click(Sender: TObject);
    procedure MenuItem3Click(Sender: TObject);
    procedure bit_StopSendClick(Sender: TObject);
    procedure TV_PhoneNoteGetSelectedIndex(Sender: TObject;
      Node: TTreeNode);
    procedure TV_PhoneNoteChanging(Sender: TObject; Node: TTreeNode;
      var AllowChange: Boolean);
    procedure sgrdString3KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure bit_SendKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure bit_PhoneNoteDelClick(Sender: TObject);
    procedure BitBtn13Click(Sender: TObject);
    procedure bit_PhoneNoteAppClick(Sender: TObject);
    procedure sgrdString2SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure bit_PhoneNoteCanClick(Sender: TObject);
    procedure bit_PhoneNoteSaveClick(Sender: TObject);
    procedure bit_SendClick(Sender: TObject);
    procedure sgrdString2GetEditText(Sender: TObject; ACol, ARow: Integer;
      var Value: String);
    procedure sgrdString2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure sgrdString2SetEditText(Sender: TObject; ACol, ARow: Integer;
      const Value: String);
    procedure StatusBar1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure StatusBar1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure sgrdString1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure StatusBar1DblClick(Sender: TObject);
    procedure N5Click(Sender: TObject);
  private
   A_Rect:TRect;
   F_OldMobilePhone,
   F_OldValue:string;
   procedure Load_PhoneNote;
   procedure LoadSM_Dy;
   procedure Class_Info(var DataPar:string);
   function SearchPhoneNote(Par:string):string;
   procedure Send_SM;
   procedure ChatRecord;
   procedure CommitData(MobilePhone,FName,Occur_Date,Content,Falg:string);
   procedure Refresh_sgrd(Falg:integer);
   procedure SavePhoneNote_Data(Falg:integer);
   procedure Cur_Send;
   procedure ReadPhoneBook(Receive_Str:string);  
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmSM_Msg: TfrmSM_Msg;
  RI:Integer=0;
  RI1:Integer=0;
  Try_Error_Count:Integer=1;
  TempFont:TFontStyles;
  RootNode, SubNode,
  Chat_RootNode,Chat_SubNode: TTreeNode;
  Receive_Name,Receive_MobilePhone,Info_Content:string;
  StartX, StartY, Save_Falg, FNode,
  Classe_ID,  Cur_Point:Integer;
  Receive_Message:Boolean;

implementation

{$R *.dfm}
{$R sound.RES}

uses SM_MsgDLL, ParSet, ADOSM_Data, PhoneNote, Search,
     CustLogin, MsgDB;


type
  TGrid_State = (stBrowse, stEdit, stInsert);
var
   sgrdString_State:TGrid_State;

//============================================================================//

function OnlyNum(Key:Char):Boolean;
begin
  Result:=True;
  if not(Ord(Key) in [vk_Back, vk_Return]) then
    if (Key <> #0) and not (Char(Key) in [^V, ^X, ^C]) then
      if not(Key in ['0'..'9']) then Result:=False;
end;

function OnlyHex(Key:Char):Boolean;
begin
  Result:=True;
  if not (Ord(Key) in [vk_Back, vk_Return]) then
    if (Key <> #0) and not (Char(Key) in [^V, ^X, ^C]) then
      if not((Key in ['0'..'9'])or(Upcase(Key) in ['A'..'F'])) then Result:=False;
end;
//============================================================================//
//读取SIM卡中的电话本//
procedure TfrmSM_Msg.ReadPhoneBook(Receive_Str:string);
var
 i:integer;
begin
PhoneBook.Add(Receive_Str);
for i:=0 to PhoneBook.Count-1 do
 if Pos('+CPBR:',PhoneBook.Strings[i])>0 then
  begin
   sgrdString4.Cells[1,i+1]:=PhoneBook.Strings[i];
   sgrdString4.RowCount:=sgrdString4.RowCount+1;
   memo1.Lines.Add(PhoneBook.Strings[i]);
  end;
end;

procedure TfrmSM_Msg.CommitData(MobilePhone,FName,Occur_Date,Content,Falg:string);
begin
if MobilePhone<>'' then
begin
with frmMsgDB.tblChatMsg do
 begin
  Open;
  Insert;
  Fields[1].Text:=MobilePhone;
  Fields[2].Text:=FName;
  Fields[3].Text:=Occur_Date;
  Fields[4].Text:=Content;
  Fields[6].Text:=Falg;
  Post;
  Close;
end;
with frmMsgDB.qryChatNum do
 begin
  Close;
  Parameters.ParamByName('FMobilePhone').Value:=MobilePhone;
  Open;
 end;
if frmMsgDB.qryChatNum.RecordCount=0 then
 with frmMsgDB.tblChatNum do
  begin
   Open;
   Insert;
   Fields[0].Text:=MobilePhone;
   Fields[1].Text:=FName;
   Post;
   Close;
  end;
 end;
end;

procedure TfrmSM_Msg.Send_SM;
var
 s:string;
 i:integer;
 TmpPar:TStringList;
begin
 TmpPar:=TStringList.Create;
 bit_Send.Enabled:=False;
 bit_ReadSM.Enabled:=False;
 SendLine.Clear;
 for i:=0 to MobilePhone_List.Count-1 do
 if ShortMess_Mode=0 then
  TmpPar.Add(Head+WriteSM(MobilePhone_List[i])+'0008')    //中文格式//
  else
  TmpPar.Add(Head+WriteSM(MobilePhone_List[i])+'0018');  //英文格式短信免提 //
 MobilePhone_List.Clear;
//交换字符串列表//
  for i:=0 to TmpPar.Count-1 do                  //
  MobilePhone_List.Add(TmpPar.Strings[i]);      //
//添加信息内容//
 for i:=0 to mem_InfoSend.Lines.Count-1 do
 s:=s+mem_InfoSend.Lines.Strings[i];
 SendLine.Add(StrToUnicode(Copy(Trim(s),1,140)));

 if Length(s)<1 then
  begin
   mem_InfoSend.SetFocus;
   bit_Send.Enabled:=True;
   ErrorMsg(1,'发送信息不能为空!');
   mem_InfoSend.SetFocus;
   Abort;
  end;
 if MobilePhone_List.Count=0 then
  begin
   bit_Send.Enabled:=True;
   bit_ReadSM.Enabled:=True;
   ErrorMsg(1,'数据编码出错!');
   Abort;
  end;
TmpPar.Free;
TmrSend.Enabled:=True;
end;

function TfrmSM_Msg.SearchPhoneNote(Par:string):string;
begin
with frmMsgDB.qrySearchNum do
 begin
  Close;
  Parameters.ParamByName('FMobilePhone').Value:=Par;
  ExecSQL;
  Open;
 end;
if frmMsgDB.qrySearchNum.RecordCount>0 then
  Result:=frmMsgDB.qrySearchNum.Fields[1].Text;
frmMsgDB.qrySearchNum.Close;
end;

procedure TfrmSM_Msg.Class_Info(var DataPar:string);
begin
with frmMsgDB.qrySearchClass do
 begin
  Close;
  Parameters.ParamByName('FID').Value:=DataPar;
  ExecSQL;
  Open;
 end;
end;

procedure TfrmSM_Msg.LoadSM_Dy;
var
  aa,bb:TStringList;
  i:integer;
begin
aa:=TStringList.Create;
bb:=TStringList.Create;
aa.Clear;bb.Clear;
aa.LoadFromFile(ExtractFilePath(Application.ExeName)+'SM_Dy.Txt');
if aa.Count-1>0 then
begin
 for i:=0 to aa.Count-1 do
 begin
  bb:=SplitString(aa.Strings[i],' ');
  sgrdString1.RowCount:=2+i;
  sgrdString1.Cells[1,i+1]:=bb.Strings[0];
 end;
end;
sgrdString1.Row:=1;
aa.Free;
bb.Free;
end;

procedure TfrmSM_Msg.Refresh_sgrd(Falg:integer);
var
 i:integer;
begin
case Falg of
 1:
 begin
  for i:=0 to sgrdString1.RowCount-1 do
  if sgrdString1.Cells[1,i+1]='' then
   with sgrdString1 do
   begin
    Cells[1,i+1]:=Cells[1,i+2];
    Cells[1,i+2]:='';
   end;
  if sgrdString1.RowCount>2 then
   sgrdString1.RowCount:=sgrdString1.RowCount-1;
 end;
 2:
 begin
  for i:=0 to sgrdString2.RowCount do
    sgrdstring2.Cells[1,i]:='';
 end;
 3:
 begin
  for i:=0 to sgrdString3.RowCount do
  if sgrdString3.Cells[1,i+1]='' then
   with sgrdString3 do
    begin
     Cells[0,i+1]:=Cells[0,i+2];
     Cells[1,i+1]:=Cells[1,i+2];
     Cells[2,i+1]:=Cells[2,i+2];
     Cells[3,i+1]:=Cells[3,i+2];
     Cells[4,i+1]:=Cells[3,i+2];
     Cells[0,i+2]:='';
     Cells[1,i+2]:='';
     Cells[2,i+2]:='';
     Cells[3,i+2]:='';

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -