📄 ufrmmain.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 + -