📄 sm_msgp.pas
字号:
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 + -