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

📄 xisms.pas

📁 手机短信发送源码
💻 PAS
📖 第 1 页 / 共 3 页
字号:
    ButtonModify.Enabled:=false;
    AddBuyDate.Text :=DateToStr(now);
    Mainform.EnterPriseNameAddDB.Text:= EnterPriseName;
    MainForm.EnterPriseTelAddDB.Text:= EnterPriseTel;
    Pagecontrol1.ActivePageIndex:=0;
end;

procedure TMainForm.ComboBoxPortChange(Sender: TObject);
var
  myReg:TRegistry;
begin
   comboboxBaud.Enabled:=comboboxPort.text<>'红外';
   ComUsed:=comboboxPort.itemindex;
  myReg:=TRegistry.create;
  myReg.RootKey:=HKEY_LOCAL_MACHINE;
  try
    if (myReg.OpenKey('\Software\Phinex',true)) then
    begin
      myReg.WriteInteger('ComUsed',ComUsed);
      myReg.CloseKey;
    end;
  finally
    myReg.Free;
  end;
end;

procedure TMainForm.ButtonLinkClick(Sender: TObject);
var
   i:integer;
begin
   screen.Cursor:=crHourGlass;
   if comboboxPort.items.indexof(comboboxPort.text)<>-1 then
   begin
      if comboboxPort.text='红外' then i:=0
      else i:=strtoint(copy(comboboxPort.text,4,2));
   end
   else i:=-1;     //StatusBar1
   if not init(i,StatusBar1,strtointdef(ComboBoxBaud.text,19200)) then
   begin
      showmessage('连接错误!');
      exit;
   end;
 //  TimerIrda.Enabled:=port=0;
   Editmanufacturer.text:=SendCommand('AT+CGMI',1000);
   screen.Cursor:=crDefault;
   SendCommand('AT+CNMI=1,1,0,2,1',1500); 
 //  if(port>0)and(PhoneType=PMotorola)then //motorola串口连接不支持通讯簿
  //    TabSheet2.Enabled:=false;
end;

procedure TMainForm.ButtonRefreshClick(Sender: TObject);
var
   s,Pre,Next:string;
   i:integer;
begin
   screen.Cursor:=crHourGlass;
   Editmanufacturer.text:=SendCommand('AT+CGMI',1500); //at+gmi也行
   EditPhoneMark.text:=SendCommand('AT+CGMM',1500); //at+gmm也行
   EditSoftVersion.text:=SendCommand('AT+CGMR',1500); //at+gmr也行
   EditIMEI.text:=SendCommand('AT+CGSN',1500); //at+gsn也行
   s:=SendCommand('AT+CBC',1500);
   splite(s,':',Pre,next);
   splite(next,',',Pre,next);
   case strtointdef(trim(pre),0) of
   0: s:='';
   1: s:='充电,';
   2: s:='没有电池,';
   3: s:='电量低,';
   end;
   Editcapacity.text:=s+next+'%';
   s:=SendCommand('AT+CSQ',1500);
   splite(s,',',Pre,next);
   splite(Pre,':',Pre,Next);
   EditSignelintension.text:=format('%d格',[(strtointdef(trim(Next),0)+7) div 8]);
   SendCommand('AT+CPBS="SM"',1500); //sim电话簿
   //LD(motorola) 最后拨出电话簿   DC(nokia)
   //FD sim固定拨号电话簿,受限制的号码
   //MT sim和手机电话簿
   //ON sim自己的号码
   //EN sim紧急号码
   //MC 未接号码
   //RC 已接号码
   //SN 服务呼叫号码
   //TA ??
   s:=SendCommand('AT+CPBS?',1500);
   splite(s,',',Pre,Next);
   editSim.text:=Next;
   SendCommand('AT+CPBS="ME"',1500); //手机电话簿
   s:=SendCommand('AT+CPBS?',1500);
   splite(s,',',Pre,Next);
   EditPhoneNumber.text:=Next;
   s:=SendCommand('AT+CSCA?',1500);
   if (pos('""',s)<>0)and(PhoneType=PNokia)and(port=0) then
   begin
      EditSmsCentrol.text:='双击这里';
   end
   else begin
      splite(s,'"',Pre,Next);
      splite(Next,'"',Pre,Next);
      EditSmsCentrol.text:=Pre;
   end;
   s:=SendCommand('AT+CPMS?',1500); //+CPMS: "ME",3,25,"SM",0,15,"SM",0,15
   splite(s,',',Pre,next);
   splite(next,'"',Pre,next);
   i:=length(Pre);
   if (i<>0)and(Pre[i]=',') then
      delete(Pre,i,1);
   EditSmscapacity.text:=Pre;
   s:=SendCommand('AT+COPS?',1500);
   splite(s,',',Pre,Next);
   splite(Next,',',Pre,Next);
   EditNetwork.text:=Next;
   if pos('46001',Next)<>0 then
      EditNetwork.text:=EditNetwork.text+'联通';
   if pos('46000',Next)<>0 then
      EditNetwork.text:=EditNetwork.text+'电信';
   screen.Cursor:=crDefault;
end;

procedure TMainForm.EditSmsCentrolDblClick(Sender: TObject);
var
   s,s2:string;
   i:integer;
begin
  if EditSmsCentrol.text='双击这里' then
  try
    screen.Cursor:=crHourGlass;
    s:=#$14#$00#$0C#$02#$00#$06#$00#$01#$00#$33#$64#$01;
    s:=SendCommand(s,1500);
    if length(s)>=30 then
    begin
       s2:=copy(s,30,ord(s[28])-1);
       s2:=HexToStr(s2,true);
       i:=length(s2);
       if (i<>0)and(s2[i]='F') then
          delete(s2,length(s2),1);
       if ord(s[29]) and $70 = $10 then
          s2:='+'+s2;
       EditSmsCentrol.text:=s2;
    end;
    if (EditSmsCentrol.text<>'双击这里')and(EditSmsCentrol.text<>'') then
    begin
       if EditSmsCentrol.text[1]='+' then s:='149'
       else s:='129';
       SendCommand('AT+CSCA="' + EditSmsCentrol.text + '",' + s,1500);
    end;
  except
  end;
  screen.Cursor:=crDefault;
end;

procedure TMainForm.ButtondisconnectClick(Sender: TObject);
begin
    final;
end;

procedure TMainForm.ButtonSendClick(Sender: TObject);
var
   Phone,Msg,TS:string;
   i:integer;
   Send:boolean;

begin
   case FormSendMsg.showmodal of
   mrYes: //发送
      begin
         send:=true;
         TS:='发送';
      end;
   else
      begin
         screen.Cursor:=crdefault;
         exit;
      end;
   end;
   Phone:=trim(FormSendMsg.edit1.text);
   Msg:=FormSendMsg.Memo1.lines.text;
   i:=pos(#$A,Msg);
   while i<>0 do //删除$0a,也可以不删
   begin
      delete(Msg,i,1);
      i:=pos(#$A,Msg);
   end;
   if not SendSMS(Phone, Msg, Send, FormSendMsg.CheckAutoDisplay.Checked,
      FormSendMsg.CheckReturnReceipt.checked) then
      showmessage(TS+'失败!')
   else showmessage(TS+'成功!');
   screen.Cursor:=crDefault;
end;
procedure TMainForm.Refreshsms();

var
   s,s1:string;
   Num,Status,FromPhoneNum,Msg,Date:string;
   i:integer;
begin
   if port=-1 then exit;
   //if RadioGroup1.ItemIndex=-1 then exit;
   screen.Cursor:=crHourGlass;
   SendCommand('AT+CMGF=0',1500); //Select SMS message format 0 is PDU mode
  // if RadioGroup1.itemindex=4 then
  //    s:=SendCommand('AT+CMGL='+inttostr(0),7000)//List SMS messages from preferred store
  // else
    s:=SendCommand('AT+CMGL='+inttostr(0),5000);
   //ListViewMsg.Items.Clear;
   while s<>'' do
   begin
      i:=pos(#$D#$A,s);
      s1:=copy(s,1,i-1);
      delete(s,1,i+1);

      i:=pos(':',s1);
      if i=0 then continue;
      delete(s1,1,i);
      i:=pos(',',s1);
      if i=0 then continue;
      i:=strtointdef(trim(copy(s1,1,i-1)),-1);
      if i=-1 then continue;
      Num:=inttostr(i);

      i:=pos(#$D#$A,s);
      if i=0 then s1:=s
      else s1:=copy(s,1,i-1);
      if Analyze(s1,Status,FromPhoneNum,Msg,Date) then
      begin
    {     with ListViewMsg.Items.Add do
         begin
           Caption:=Num;
           SubItems.Add(Status);
           SubItems.Add(FromPhoneNum);
           SubItems.Add(Msg);
           SubItems.Add(Date);
         end;                  }
         //根据解析来的数据,更新数据库。

      end;
      if i=0 then break
      else delete(s,1,i+1)
   end;
   screen.Cursor:=crDefault;
  // ListViewMsgSelectItem(Sender,nil,false);
end;
procedure TMainForm.RefreshsmsSecond(ReceiveMsg:string);
var
   s,s1,returnsms:string;
   Num,Status,FromPhoneNum,Msg,Date,ProductID:string;
   i:integer;
   //ProcessThread:ReplayQuery;
   QueryThread:QueryDatabase;
    ADOQuery2:TADOQuery;
begin
  { if port=-1 then exit;
   //if RadioGroup1.ItemIndex=-1 then exit;
   screen.Cursor:=crHourGlass;
   SendCommand('AT+CMGF=0',1500); //Select SMS message format 0 is PDU mode
  // if RadioGroup1.itemindex=4 then
  //    s:=SendCommand('AT+CMGL='+inttostr(0),7000)//List SMS messages from preferred store
  // else
    s:=SendCommand('AT+CMGL='+inttostr(0),5000);
   //ListViewMsg.Items.Clear;  }
   screen.Cursor:=crHourGlass;
   s:=ReceiveMsg;

   while s<>'' do
   begin
     i:=pos(#$D#$A,s);
      s1:=copy(s,1,i-1);
      delete(s,1,i+1);

      i:=pos(':',s1);
      if i=0 then continue;
      delete(s1,1,i);
      i:=pos(',',s1);
      if i=0 then continue;
      i:=strtointdef(trim(copy(s1,1,i-1)),-1);
      if i=-1 then continue;
      Num:=inttostr(i);

      i:=pos(#$D#$A,s);
      if i=0 then s1:=s
      else s1:=copy(s,1,i-1);
      if Analyze(s1,Status,FromPhoneNum,Msg,Date) then
      begin
         //ShowMessage(Msg);
        //这儿首先要根据短信的格式解析出产品号码;
       { ProductID:= Msg;//暂时假设短信内容就是产品号码
        ProcessThread.create;
        ProcessThread.FreeOnTerminate:=true;
        ProcessThread.Setparams(FromPhoneNum,ProductID,Date,ADOQuery1);
        ProcessThread.Resume;}
       // ReplayQuery(FromPhoneNum,ProductID,Date);
        //这儿应该使用多线程
          ProductID:= Msg;
         ADOQuery2:=TADOQuery.Create(Application);
         ADOQuery2.Connection:=ADOConnection1;
        QueryThread:= QueryDatabase.Create;
       QueryThread.Setparams(FromPhoneNum,ProductID,Date,Adoquery2);
       QueryThread.Resume;
      end;
      if i=0 then break
      else delete(s,1,i+1)
   end;
   screen.Cursor:=crDefault;
  // ListViewMsgSelectItem(Sender,nil,false);
end;
procedure TMainForm.RadioClientNameClick(Sender: TObject);
begin
  if RadioClientName.Checked then
  begin
    RadioProductName.Checked:=false;
    RadioProductID.Checked:=false;
    EditClientName.Enabled:=true;
    EditProductName.Enabled:=false;
    EditProductID.Enabled:=false;
    EnterpriseRadioButton.Checked:=false;
    EnterpriseQueryEdit1.Enabled:=false;
  end;
end;

procedure TMainForm.RadioProductNameClick(Sender: TObject);
begin
  if RadioProductName.Checked then
  begin
    RadioProductID.Checked:=false;
    RadioClientName.Checked:=false;
    EditClientName.Enabled:=false;
    EditProductName.Enabled:=true;
    EditProductID.Enabled:=false;
    EnterpriseRadioButton.Checked:=false;
 
    EnterpriseQueryEdit1.Enabled:=false;
  end;
end;

procedure TMainForm.RadioProductIDClick(Sender: TObject);
begin
  if RadioProductID.Checked then
  begin
    RadioProductName.Checked:=false;
    RadioClientName.Checked:=false;
    EditClientName.Enabled:=false;
    EditProductName.Enabled:=false;
    EditProductID.Enabled:=true;
    EnterpriseRadioButton.Checked:=false;
     EnterpriseQueryEdit1.Enabled:=false;
  end;
end;

procedure TMainForm.ButtonQueryClick(Sender: TObject);
begin
  if ADOQuery1.Active then
  ADOQuery1.Active:=false;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Select * from ClientInfo');
  if EnterpriseRadiobutton.Checked then
  begin
      ADOQuery1.SQL.Add('Where EnterpriseName=:MyEnterpriseName');
      ADOQuery1.Parameters.ParamByName('MyEnterpriseName').Value:=EnterpriseQueryEdit1.Text;
  end
  else if RadioClientName.Checked then
  begin
      ADOQuery1.SQL.Add('Where ClientName=:MyClientName');
      ADOQuery1.Parameters.ParamByName('MyClientName').Value:=EditClientName.Text;
  end
  else if  RadioProductName.Checked then
  begin
      ADOQuery1.SQL.Add('Where ClientProductor=:MyClientProductor');
      ADOQuery1.Parameters.ParamByName('MyClientProductor').Value:=EditProductName.Text;
  end
  else if RadioProductID.Checked then
  begin
      ADOQuery1.SQL.Add('Where ClientProductorID=:MyClientProductorID');
      ADOQuery1.Parameters.ParamByName('MyClientProductorID').Value:=EditProductID.Text;
  end;
  //ADOQuery1.ExecSQL;
    ADOQUery1.Open;
    if (ADOQuery1.RecordCount=0) then
    begin
      ShowMessage('您所查找的纪录不存在!');
    end
end;

procedure TMainForm.ButtonCancelClick(Sender: TObject);
begin
AddClientName.Text :='';
AddProductName.Text:='';
AddProductID.Text:='';
AddBuyDate.Text :='';
end;

procedure TMainForm.ButtonAddClick(Sender: TObject);
begin
 if AddProductID.Text='' then
 begin
 ShowMessage('商品号码不能为空,请重填!');
 end
 else
 begin
 if(Checkdatabase(AddProductID.Text))then
 begin
  ShowMessage('商品号码已经存在,请重填!');
 end
 else
 begin
  if ADOQuery1.Active then
    ADOQuery1.Active:=false;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('insert into ClientInfo(ClientName,ClientProductor,ClientProductorID,ClientBuyDate,EnterpriseName,EnterpriseTel)');
  ADOQuery1.SQL.Add('Values(:MyClientName,:MyClientProductor,:MyClientProductorID,:MyClientBuyDate,:MyEnterpriseName,:MyEnterpriseTel)');
  ADOQuery1.Parameters.ParamByName('MyClientName').Value:=AddClientName.Text;
  ADOQuery1.Parameters.ParamByName('MyClientProductor').Value:=AddProductName.Text;
  ADOQuery1.Parameters.ParamByName('MyClientProductorID').Value:=AddProductID.Text;
  ADOQuery1.Parameters.ParamByName('MyClientBuyDate').Value:=AddBuyDate.Text;
  ADOQuery1.Parameters.ParamByName('MyEnterpriseName').Value:=MainForm.EnterpriseNameAddDB.Text;
  ADOQuery1.Parameters.ParamByName('MyEnterpriseTel').Value:=MainForm.EnterPriseTelAddDB.Text;
  ADOQuery1.ExecSQL;
  MessageDlg('您的新数据添加成功!商品号码是  '+AddProductID.Text,mtInformation,[mbok],0);

  if ADOQuery1.Active then
      ADOQuery1.Active:=false;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Select * from ClientInfo');
  ADOQuery1.SQL.Add('Where ClientName=:MyClientName');
  ADOQuery1.Parameters.ParamByName('MyClientName').Value:=AddClientName.Text;
  ADOQUery1.Open;

 end;

⌨️ 快捷键说明

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