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

📄 main.~pas

📁 用delphi开发的短信息预警系统
💻 ~PAS
📖 第 1 页 / 共 3 页
字号:
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 + -