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

📄 ufrmmain.pas

📁 delphiSMS接受发送
💻 PAS
字号:
unit UFrmMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TfrmMain = class(TForm)
    Label1: TLabel;
    edt_center: TEdit;
    Label2: TLabel;
    edt_phone: TEdit;
    edt_msg: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    edt_result: TEdit;
    btn_make: TButton;
    Label5: TLabel;
    Memo1: TMemo;
    procedure btn_makeClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function str_Gb2UniCode( text: string ): String;
    function ConvertL2R( sMsg: String ): String;
    function TextToPdu( sCenter, sPhone, sMsg: String ): String;    
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}


{
-----------------------------------------------------------
 GB 代码转 UniCode
-----------------------------------------------------------
//功能:中文字符串变化到Unicode字符串
//输入: txt-中文字符串
//输出: 转化成Unicode的字符串
}
function TfrmMain.str_Gb2UniCode( text: string ): String;
var
  i,j,len:Integer;
  cur:Integer;
  t:String;
  ws:WideString;
begin
  Result:='';
  ws := text;
  len := Length(ws);
  i := 1;
  j := 0;
  while i <= len do
  begin
      cur := ord(ws[i]);
      FmtStr(t,'%4.4X',[cur]);  //BCD转换
    Result := Result+t;
    inc(i);
    //移位计数达到7位的特别处理
    j := (j+1) mod 7;
  end;
end;


//将一个字符串在位置上进行奇数位与偶数位的交换,字符串长度为奇数位时自动补F
//如果12345转换后为 2143F5
function TfrmMain.ConvertL2R( sMsg: String ): String;
var i: Integer;
    cTmp: Char;
    sRe: String;
begin
    sRe := Trim( sMsg );
    i := Length( sRe );
    if i = 0 then begin
        Result := '';
        Exit;
    end;

    if i mod 2 = 1 then sRe := sRe + 'F';

    i := 1;
    while i < Length( sRe ) do begin
        cTmp := sRe[ i ];
        sRe[ i ] := sRe[ i+1 ];
        sRe[ i+1 ] := cTmp;
        i := i + 2;
    end;
    
    Result := sRe;
end;

//txt转换为pdu格式
//不带加号短信息中心号码、手机号码、短信内容
//如 sms := TextToPdu( '8613800755500', '13682570067', '你好' );
//返回可直接发送的字符串代码
function TfrmMain.TextToPdu( sCenter, sPhone, sMsg: String ): String;
var sAddr, sBody: String;
    LCenter, LMsg, LBody: String;
begin
    sCenter := '91' + ConvertL2R( sCenter );
    FmtStr( LCenter, '%2.2X', [ Length( sCenter ) div 2 ] );
    sAddr := LCenter + sCenter;

    sPhone := ConvertL2R( sPhone );
    sMsg := str_Gb2UniCode( sMsg );
    FmtStr( LMsg, '%2.2X', [ Length( sMsg ) div 2 ] );

    sBody := '11000D9168' + sPhone + '000800' + LMsg + sMsg;
    FmtStr( LBody, '%2.2D', [ Length( sBody ) div 2 ] );

    Result := 'AT' + #13#10 + 'AT+CMGF=0' + #13#10 + 'AT+CMGS='+ LBody + #13 + sAddr + sBody + #26 + #13 + #10;
    
end;

procedure TfrmMain.btn_makeClick(Sender: TObject);
begin
    edt_result.Text := TextToPdu( edt_center.Text, edt_phone.Text, edt_msg.Text );
    edt_result.SetFocus;
    edt_result.SelectAll;
end;

end.

⌨️ 快捷键说明

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