📄 main.~pas
字号:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ImgList, ComCtrls, DB, inifiles, ADODB, ExtCtrls, Registry,
Menus, ShellAPI, AppEvnts, Buttons;
const WM_NID = WM_User + 1000; //声明一个常量
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
TreeView1: TTreeView;
ImageList1: TImageList;
BookQuery: TADOQuery;
StatusBar1: TStatusBar;
Timer1: TTimer;
ProgressBar1: TProgressBar;
Panel1: TPanel;
ComboBox1: TComboBox;
MainMenu1: TMainMenu;
S1: TMenuItem;
N6: TMenuItem;
U1: TMenuItem;
A1: TMenuItem;
CloseBton: TSpeedButton;
On_Bton: TSpeedButton;
Off_Bton: TSpeedButton;
Panel2: TPanel;
GroupBox2: TGroupBox;
Splitter1: TSplitter;
GroupBox3: TGroupBox;
O2: TMenuItem;
D1: TMenuItem;
CheckBox1: TCheckBox;
Button1: TButton;
N1: TMenuItem;
Q1: TMenuItem;
Panel3: TPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
ADOTable_Edit: TADOTable;
BitBtn3: TBitBtn;
ADOCommand_ADD: TADOCommand;
Timer2: TTimer;
ADOConnection1: TADOConnection;
OutSMSPageControl: TPageControl;
WaitSMSTab: TTabSheet;
WaitSMSListView: TListView;
UnSendSMSTab: TTabSheet;
UnSendSMSListView: TListView;
InSMSListView: TListView;
WaitPopupMenu: TPopupMenu;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
InPopupMenu: TPopupMenu;
N9: TMenuItem;
N10: TMenuItem;
UnPopupMenu: TPopupMenu;
S2: TMenuItem;
N11: TMenuItem;
D2: TMenuItem;
N12: TMenuItem;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
ADOCommand_SMS: TADOCommand;
WaitSMSQuery: TADOQuery;
N7: TMenuItem;
Button2: TButton;
N8: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure On_BtonClick(Sender: TObject);
procedure Off_BtonClick(Sender: TObject);
procedure CloseBtonClick(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Q1Click(Sender: TObject);
procedure O2Click(Sender: TObject);
procedure D1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure WaitSMSListViewMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure InSMSListViewMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure UnSendSMSListViewMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure D2Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure S2Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure TreeView1DblClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
procedure WMNID(var msg:TMessage);message WM_NID;
procedure SysCommand(var SysMsg: TMessage);message WM_SYSCOMMAND;
public
{ Public declarations }
ModuleStatus:array of Boolean; //各个串口是否打开,打开的为true
StopSend:Boolean;
WaitId:integer;
procedure ListCreate();
procedure InSMSFromSQL(str:string);
procedure SendSMS();
procedure GetPorts();
procedure SendSMSOnce(Msg,MobileNo:string);
function ChangeSMS(Str:String):String;//将短信内容中的回车和换行符转换为字符'|'
function ChangeSMS2(Str:String):String;//将短信内容中的'|'符转换为回车和换行
end;
function OpenComm(CommIndex: LongInt): LongInt; stdcall;
function CloseComm(CommIndex: LongInt): LongInt; stdcall;
function SendMsg(CommIndex: LongInt; msg,mobileNo: Pchar;Msg_Index:LongInt;chinese:boolean): LongInt; stdcall;
function GetNewMsg(CommIndex: LongInt; NewMsg:Pchar): boolean; stdcall;
function GetUnSendCount(CommIndex:LongInt):LongInt;stdcall;
function GetSCA(CommIndex:LongInt;SCA:Pchar):Boolean;stdcall;
function SetSCA(CommIndex:LongInt;SCA:Pchar):Boolean;stdcall;
function ForceCloseComm(CommIndex:LongInt):LongInt;stdcall;
function GetFailedMsg(CommIndex:LongInt;Msg:Pchar):Boolean;stdcall;
function GetNextSendMsg(CommIndex:LongInt;Msg:Pchar;DeleteAfterRead:Boolean):Boolean;stdcall;
var
Form1: TForm1;
ports_index:integer; //串口序号
NotifyIcon: TNotifyIconData; // 全局变量
PNode,CNode:Array of TTreeNode;
sendcontent:string;
function StrToID(str:string):string; //从数据库返回序号
function StrToName(str:string):string;
function StrToNumber(str:string):string;
function NumberToName(num:string):string;
// procedure Delay(MSecs: Longint);
implementation
uses config, AddUser, YJSET;
{$R *.dfm}
function OpenComm; external 'AscendSMS.dll';
function CloseComm; external 'AscendSMS.dll';
function SendMsg; external 'AscendSMS.dll';
function GetNewMsg;external 'AscendSMS.dll';
function GetUnSendCount;external 'AscendSMS.dll';
function GetSCA;external 'AscendSMS.dll';
function SetSCA;external 'AscendSMS.dll';
function ForceCloseComm;external 'AscendSMS.dll';
function GetFailedMsg;external 'AscendSMS.dll';
function GetNextSendMsg;external 'AscendSMS.dll';
procedure TForm1.FormCreate(Sender: TObject);
var
myini:tinifile;
begin
MyIni := TIniFile.Create(getcurrentdir()+'/system.ini');//连接system.ini文件,读取文件中的配置信息
form1.Caption:=MyIni.ReadString('Run-Settings', 'caption', '')+form1.Caption;
ADOConnection1.ConnectionString:=trim(MyIni.ReadString('database', 'database', ''));
try
ADOConnection1.Connected:=true;
myini.Free;
except
showmessage('连接数据库失败,程序将关闭!');
application.Terminate;
end;
GetPorts();
//=====从数据库获取号码簿=====================
ListCreate();
//=====从数据库读取已收信息===================
InSMSFromSQL('1'); //新的
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
with NotifyIcon do //在托盘区建立图标
begin
cbSize:=SizeOf(TNotifyIconData);
Wnd:=Handle; //指向当前窗体Form1的句柄
UID:=1;
uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage:=WM_NID;
hIcon:=Application.Icon.Handle;
szTip:='水雨情短信预警系统';
end;
Shell_NotifyIcon(NIM_ADD,@NotifyIcon);
end;
procedure TForm1.GetPorts();
var
RegFile : TRegIniFile;
Ports : TStringList;
i : Integer;
begin
//=============从注册表获取串口========================
RegFile := TRegIniFile.Create;
Ports := TStringList.Create;
try
RegFile.RootKey := HKey_Local_Machine;
if RegFile.OpenKey('\Hardware\Devicemap',False) then
begin
RegFile.ReadSectionValues('SerialComm', Ports);
if Ports.Count > 0 then
begin
SetLength(ModuleStatus,Ports.Count);
for i := 0 to Ports.Count-1 do
begin
ComboBox1.Items.Add('COM'+IntToStr(i+1));
ModuleStatus[i]:=False;
end;
ComboBox1.ItemIndex := 0;
end;
end
else
ShowMessage('无法从注册表中获取串口配置');
finally
RegFile.CloseKey;
RegFile.Free;
Ports.Free;
end;
ports_Index:=1;
end;
procedure TForm1.ListCreate();
var
i,j:integer;
begin
//=====从数据库获取联系人=====================
//=====从数据库获取部门信息
treeview1.ReadOnly:=false;
treeview1.Items.Clear;
bookquery.SQL.Clear;
bookquery.SQL.Add('select * from Department order by did');
bookquery.Open;
if bookquery.RecordCount>0 then
begin
setlength(PNode,bookquery.RecordCount);
bookquery.First;
for i:=0 to bookquery.RecordCount-1 do
begin
PNode[i]:=treeview1.Items.Add(nil,trim(bookquery.Fieldbyname('departmentname').AsString));
PNode[i].SelectedIndex:=0; //选中时显示的图片
PNode[i].ImageIndex:=0; //未选中时显示的图片
bookquery.Next;
end;
end;
//=====从数据库获取各部门联系人
for i:=0 to length(PNode)-1 do
begin
bookquery.SQL.Clear;
bookquery.SQL.Add('select * from yujing where department = '''+PNode[i].Text+''' order by id');
bookquery.Open;
if bookquery.RecordCount>0 then
begin
setlength(CNode,bookquery.RecordCount);
bookquery.First;
for j:=0 to bookquery.RecordCount-1 do
begin
CNode[j]:=treeview1.Items.AddChild(PNode[i],trim(bookquery.Fieldbyname('Pname').AsString)+'\'+bookquery.Fieldbyname('Mphone').AsString);
CNode[j].SelectedIndex:=1;
CNode[j].ImageIndex:=1;
bookquery.Next;
end;
end;
end;
bookquery.Close;
treeview1.FullExpand; //全部展开
treeview1.Items.Item[0].Selected:=true;
treeview1.ReadOnly:=true;
end;
//=====窗体调整==========================
procedure TForm1.FormResize(Sender: TObject);
begin
ComboBox1.Top:=Panel1.Top+7;
on_bton.Top:=Panel1.Top+6;
off_bton.Top:=Panel1.Top+6;
ProgressBar1.Top:=StatusBar1.Top+3;
ProgressBar1.Width:=StatusBar1.Width-440;
GroupBox3.Height:=Panel2.Height div 2;
end;
//=====打开串口==========================
procedure TForm1.On_BtonClick(Sender: TObject);
begin
if ModuleStatus[ComboBox1.ItemIndex] then
begin
StatusBar1.Panels[0].Text:='模块已打开';
Exit;
end;
case OpenComm(ComboBox1.ItemIndex+1) of
0:begin
StatusBar1.Panels[0].Text := '打开模块成功';
ModuleStatus[ComboBox1.ItemIndex]:=True;
end;
-5:begin
StatusBar1.Panels[0].Text := '模块注册失败';
ModuleStatus[ComboBox1.ItemIndex]:=false;
end;
-6:begin
StatusBar1.Panels[0].Text := '打开COM口失败';
ModuleStatus[ComboBox1.ItemIndex]:=false;
end;
-9:begin
StatusBar1.Panels[0].Text := '未检测到GSM模块';
ModuleStatus[ComboBox1.ItemIndex]:=false;
end;
-10:begin
StatusBar1.Panels[0].Text := '设置模块参数失败';
ModuleStatus[ComboBox1.ItemIndex]:=false;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -