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

📄 unit1.pas

📁 短信二次开发控件SMSComm
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ImgList, CoolTrayIcon, ExtCtrls, ActnList,
  Menus, StdCtrls, SMSComm;

type
  TMainFrm = class(TForm)
    StatusBar1: TStatusBar;
    Timer1: TTimer;
    TrayIcon1: TCoolTrayIcon;
    ImageList1: TImageList;
    ImageList3: TImageList;
    PopupMenu1: TPopupMenu;
    ShowWindow1: TMenuItem;
    HideWindow1: TMenuItem;
    N1: TMenuItem;
    Exit1: TMenuItem;
    MainMenu1: TMainMenu;
    vvv1: TMenuItem;
    NSetPort: TMenuItem;
    NSetSCA: TMenuItem;
    N7: TMenuItem;
    NStartInspect: TMenuItem;
    NCloseInspect: TMenuItem;
    N2: TMenuItem;
    NHideFrm: TMenuItem;
    NExit: TMenuItem;
    N5: TMenuItem;
    ActionList1: TActionList;
    acHideMainFrm: TAction;
    acShowMainFrm: TAction;
    acExit: TAction;
    acSetSCA: TAction;
    acSetPort: TAction;
    acStartInspect: TAction;
    acCloseInspect: TAction;
    Button1: TButton;
    SMSComm1: TSMSComm;
    Label2: TLabel;
    ComboBox1: TComboBox;
    LabeledEdit1: TLabeledEdit;
    Memo1: TMemo;
    Label1: TLabel;
    Button2: TButton;
    Button3: TButton;
    procedure StatusBar1DrawPanel(StatusBar: TStatusBar;
      Panel: TStatusPanel; const Rect: TRect);
    procedure FormActivate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure acHideMainFrmExecute(Sender: TObject);
    procedure acShowMainFrmExecute(Sender: TObject);
    procedure acExitExecute(Sender: TObject);
    procedure acSetSCAExecute(Sender: TObject);
    procedure acSetPortExecute(Sender: TObject);
    procedure acStartInspectExecute(Sender: TObject);
    procedure acCloseInspectExecute(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure SMSComm1AfterSend(Sender: TObject; aSMSItem: TSMSItem;
      SendOK: Boolean);
    procedure SMSComm1BeforeSend(Sender: TObject; aSMSItem: TSMSItem);
    procedure SMSComm1Receive(Sender: TObject; aSMSItem: TSMSItem);
    procedure SMSComm1BeforeTimingDelSMS(Sender: TObject);
    procedure SMSComm1AfterTimingDelSMS(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1CloseUp(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure SMSComm1BeforeOpenModem(Sender: TObject);
    procedure SMSComm1AfterOpenModem(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure GSMIni;    
  end;

var
  MainFrm: TMainFrm;
  S: string;

implementation

uses GlobalPara1, SetPort;

{$R *.dfm}

procedure TMainFrm.StatusBar1DrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
begin
  with StatusBar1.Canvas do
  begin
    Brush.Color:=clBtnFace;
    case Panel.Index of
      0: begin
           Font.Color := clBlue;
           ImageList3.Draw(StatusBar1.Canvas,Rect.Left+5,Rect.Top+1,9);
           TextOut(Rect.left+24, Rect.top+3 , '最新事件' );
         end;
      1: begin
           Font.Color := clBlue;
           TextOut(Rect.left + 5, Rect.top + 3, gpMainFrmStatusbarText);
         end;
      2: begin
           Font.Color := clBlue;

           if gpCurrentStation = csInitialize then
             TextOut(Rect.left+5, Rect.top+3 , '当前状态: 初始化' )
           else if gpCurrentStation = csInspect then
             TextOut(Rect.left+5, Rect.top+3 , '当前状态: 监测' )
           else if gpCurrentStation = csOffLine then
             TextOut(Rect.left+5, Rect.top+3 , '当前状态: 离线' )
           else if gpCurrentStation = csCommand then
             TextOut(Rect.left+5, Rect.top+3 , '当前状态: 命令' )
           else
             TextOut(Rect.left+5, Rect.top+3 , '当前状态: 监测' );

         end;

    end;
  end;

end;

procedure TMainFrm.FormActivate(Sender: TObject);
begin
  Timer1.Enabled := True;
end;

procedure TMainFrm.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  gpCurrentStation := csInitialize;

  GSMIni;
end;

procedure TMainFrm.GSMIni;
begin
  if not SMSComm1.Active then begin
     gpMainFrmStatusbarText := '正在连接GSM模块,请等待...';
     StatusBar1.Refresh;
     if SMSComm1.Open then begin
        NStartInspect.Enabled := False;
        NCloseInspect.Enabled := True;
        gpMainFrmStatusbarText := '连接GSM模块成功!';
        gpCurrentStation:=csInspect;
        TrayIcon1.Hint := '监测';
        TrayIcon1.IconList := ImageList1;
        TrayIcon1.CycleIcons := True;
        TrayIcon1.Refresh;
     end
     else begin
        NStartInspect.Enabled := True;
        NCloseInspect.Enabled := False;
        gpMainFrmStatusbarText := '连接GSM模块失败!';
        gpCurrentStation:=csOffLine;
        TrayIcon1.Hint := '离线状态';
        TrayIcon1.IconList := nil;
        TrayIcon1.CycleIcons := False;
        TrayIcon1.Refresh;
     end;
     StatusBar1.Refresh;

  end;
end;
procedure TMainFrm.acHideMainFrmExecute(Sender: TObject);
begin
  TrayIcon1.HideMainForm;
end;

procedure TMainFrm.acShowMainFrmExecute(Sender: TObject);
begin
  TrayIcon1.ShowMainForm;
end;

procedure TMainFrm.acExitExecute(Sender: TObject);
begin
  if MessageDlg('是否退出报警监测程序?',mtConfirmation,[mbOK,mbCancel],0)=mrOk then
    Application.Terminate;
end;

procedure TMainFrm.acSetSCAExecute(Sender: TObject);
var
  SCA: string;
begin
  if (not InputQuery('信息中心号码设置', '号码', SCA)) or
     (SCA = '') then Exit;
  gpMainFrmStatusbarText := '正在设置短信中心号码...';
  StatusBar1.Refresh;

  if SMSComm1.GSM_AT_CSCA(SCA) then
     gpMainFrmStatusbarText := '设置短信中心号码成功!'
  else
     gpMainFrmStatusbarText := '设置短信中心号码失败!';

  StatusBar1.Refresh;

end;

procedure TMainFrm.acSetPortExecute(Sender: TObject);
begin
  SetPortFrm := TSetPortFrm.Create(Self);
  try
    SetPortFrm.ShowModal;
  finally
    SetPortFrm.Free;
    SetPortFrm := nil;
  end;
end;

procedure TMainFrm.acStartInspectExecute(Sender: TObject);
begin
  gpCurrentStation := csInitialize;
  GSMIni;
end;

procedure TMainFrm.acCloseInspectExecute(Sender: TObject);
begin
  SMSComm1.Close;
  gpMainFrmStatusbarText := '关闭监测!';
  gpCurrentStation:=csOffLine;  
  StatusBar1.Refresh;
  NStartInspect.Enabled := True;
  NCloseInspect.Enabled := False;
  TrayIcon1.CycleIcons := False;
end;

procedure TMainFrm.Button1Click(Sender: TObject);
begin
  SMSComm1.GSM_AT_CMGS(LabeledEdit1.Text, Memo1.Text);
end;

procedure TMainFrm.SMSComm1AfterSend(Sender: TObject; aSMSItem: TSMSItem;
  SendOK: Boolean);
begin
  if SendOK then
     gpMainFrmStatusbarText := '发送消息成功!'
  else
     gpMainFrmStatusbarText := '发送消息失败!';
  StatusBar1.Refresh;

end;

procedure TMainFrm.SMSComm1BeforeSend(Sender: TObject;
  aSMSItem: TSMSItem);
begin
  gpMainFrmStatusbarText := '正在发送消息...';
  StatusBar1.Refresh;
end;

procedure TMainFrm.SMSComm1Receive(Sender: TObject; aSMSItem: TSMSItem);
begin
  showmessage(aSMSItem.Msg);
end;


procedure TMainFrm.SMSComm1BeforeTimingDelSMS(Sender: TObject);
begin
  Memo1.Text := Memo1.Text + #13#10 +'开始定时删除短信...';
end;

procedure TMainFrm.SMSComm1AfterTimingDelSMS(Sender: TObject);
begin
  Memo1.Text := Memo1.Text + #13#10 +'定时删除短信完毕!';
end;

procedure TMainFrm.Button2Click(Sender: TObject);
var
  S: string;
begin
  if SMSComm1.GSM_AT_CMGL(4, S) then begin
    Memo1.Text := Memo1.Text + S;
    Memo1.Refresh;
  end;
end;

procedure TMainFrm.FormCreate(Sender: TObject);
begin
  SMSComm1.DestPhoneStyle := TPhoneStyle(ComboBox1.ItemIndex);
end;

procedure TMainFrm.ComboBox1CloseUp(Sender: TObject);
begin
  SMSComm1.DestPhoneStyle := TPhoneStyle(ComboBox1.ItemIndex);
end;

procedure TMainFrm.Button3Click(Sender: TObject);
var
  S: string;
begin
  S := '';
  if not InputQuery('短信中心号码设置', '如长沙号码设置为:'#10#13'+8613800731500  注意从+号开始', S) then Exit;
  if SMSComm1.GSM_AT_CSCA(S) then ShowMessage('设置成功')
  else ShowMessage('设置失败')
end;

procedure TMainFrm.SMSComm1BeforeOpenModem(Sender: TObject);
begin
  gpMainFrmStatusbarText := '正在与GSM模块联系...';
  StatusBar1.Refresh;
end;

procedure TMainFrm.SMSComm1AfterOpenModem(Sender: TObject);
begin
  gpMainFrmStatusbarText := '清除SIM卡中的消息完毕!';
  StatusBar1.Refresh;
end;

end.

⌨️ 快捷键说明

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