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

📄 umain.~pas

📁 GPRS无线数据管理软件,用于远程数据采集和分析以及展现
💻 ~PAS
📖 第 1 页 / 共 3 页
字号:
              for i:=1 to 4 do  showstr:=showstr+rvdata.m_data_buf[i];
              form1.showstate(showstr);
          end;

   panel2.Caption:=inttostr(strtoint(panel2.Caption)+1);

end;

procedure TForm1.showstate2;
var i:integer;
    showshape:array[1..16] of  integer;
begin
   for i:=0 to form1.ComponentCount-1 do
     begin
         if (form1.Components[i] is Tshape) then
             showshape[(form1.Components[i] as Tshape).Tag]:=i;
     end;
   for i:=1 to 16 do
     begin
         if form1.lightonoff=i then
            begin
             (form1.Components[showshape[i]] as Tshape).Brush.Color:=clLime;
             continue;
            end;
        (form1.Components[showshape[i]] as Tshape).Brush.Color:=form1.Panel1.Color;
    end;
    lightonoff:=lightonoff+1;
    if lightonoff>16 then lightonoff:=1;   
end;

procedure TForm1.showstate(str:string);
var numberset:array[1..16] of char;
    showshape:array[1..16] of  integer;
    onoff:array[1..16] of integer;
    indexch:array[1..16] of integer;
    i,j:integer;
begin
   if length(str)<4 then
     begin
         exit;
     end;

   for i:=0 to form1.ComponentCount-1 do
     begin
         if (form1.Components[i] is Tshape) then
             showshape[(form1.Components[i] as Tshape).Tag]:=i;
     end;
   numberset[1]:='1';numberset[2]:='2';numberset[3]:='3';numberset[4]:='4';
   numberset[5]:='5';numberset[6]:='6';numberset[7]:='7';numberset[8]:='8';
   numberset[9]:='9';numberset[10]:='A';numberset[11]:='B';numberset[12]:='C';
   numberset[13]:='D';numberset[14]:='E';numberset[15]:='F';numberset[16]:='0';

   indexch[1]:=1;indexch[2]:=10;indexch[3]:=11;indexch[4]:=100;
   indexch[5]:=101;indexch[6]:=110;indexch[7]:=111;indexch[8]:=1000;
   indexch[9]:=1001;indexch[10]:=1010;indexch[11]:=1011;indexch[12]:=1100;
   indexch[13]:=1101;indexch[14]:=1110;indexch[15]:=1111;indexch[16]:=0;

   for i:=1 to 16 do onoff[i]:=2;

   for i:=1 to 4 do
      begin
          for j:=0 to 16 do
             if upcase(str[i])=numberset[j] then
               begin
                   onoff[1+(i-1)*4]:=indexch[j] div 1000;
                   onoff[2+(i-1)*4]:=(indexch[j] mod 1000) div 100;
                   onoff[3+(i-1)*4]:=(indexch[j] mod 100) div 10;
                   onoff[4+(i-1)*4]:=(indexch[j] mod 10) div 1;
               end;
      end;
   for i:=1 to 16 do
      if onoff[i]=1 then (form1.Components[showshape[i]] as Tshape).Brush.Color:=form1.oncolor
      else if onoff[i]=0  then (form1.Components[showshape[i]] as Tshape).Brush.Color:=form1.offcolor
           else  (form1.Components[showshape[i]] as Tshape).Brush.Color:=form1.errorcolor;
end;

function TForm1.inttoip(ip:cardinal):string;
   var s:string;
begin
   s:='';
   s:=s+inttostr(ip div (256*256*256));
   s:=s+'.';
   s:=s+inttostr((ip div (256*256)) mod 256);
   s:=s+'.';
   s:=s+inttostr((ip div 256) mod 256);
   s:=s+'.';
   s:=s+inttostr(ip mod 256);
   inttoip:=s;
end;

function TForm1.strtohex(str:string):string;
var i:integer;
    s:string;
    value:integer;
begin
    if length(str)<2 then begin strtohex:=''; exit; end;
    s:='';
    for i:=1 to (length(str) div 2) do
      begin
          value:=0;
          value:=stoi(str[i*2-1])*16+stoi(str[i*2]);
          s:=s+chr(value);
      end;
      strtohex:=s;
end;

function TForm1.stoi(ch:char):integer;
    var table:array[0..16] of char;
        i:integer;
begin
    table[0]:='0';table[1]:='1';table[2]:='2';table[3]:='3';
    table[4]:='4';table[5]:='5';table[6]:='6';table[7]:='7';
    table[8]:='8';table[9]:='9';table[10]:='A';table[11]:='B';
    table[12]:='C';table[13]:='D';table[14]:='E';table[15]:='F';
    table[16]:='X';
    for i:=0 to 16 do
      begin
          if upcase(ch)=table[i] then break;
      end;
    stoi:=i;
end;

function TForm1.legalchar(ch:char):boolean;
begin
    if ((ch>='0') and (ch<='9'))
       or  ((ch>='a') and (ch<='f'))
       or  ((ch>='A') and (ch<='Z'))
    then legalchar:=true
    else legalchar:=false;
end;

function TForm1.userintable(str:string):boolean;
begin
//
end;


function TForm1.strtohexstr(str:string;lenstr:integer):string;
var i,len:integer;
    str1:string;
begin
    str1:='';
    len:=lenstr;
    for i:=1 to len do
      begin
        str1:=str1+inttohex(integer(str[i]),2);
        str1:=str1+' ';
      end;
    strtohexstr:=str1;  
end;

procedure TForm1.registerserver(cmd:integer);
var sbuf:array[1..64] of char;
    i:integer;
begin
    if (Form1.SerialNo<1)
       or (Length(Form1.ExtendSerialNo)<>32)
       or (Length(Form1.serverIP)<7)
       or (Form1.serverport<1024) then exit;

    sbuf[1]:=char($aa);
    sbuf[2]:=char($29);
    case cmd of
       1:
          sbuf[3]:=char($01);  //login
       2:
          sbuf[3]:=char($02); //logout
       5:
          sbuf[3]:=char($05); //report
    end;      

    sbuf[4]:=Char(Form1.SerialNo mod 256);
    sbuf[5]:=Char((Form1.SerialNo mod (256*256)) div 256);
    sbuf[6]:=Char((Form1.SerialNo div (256*256)) mod 256);
    sbuf[7]:=Char(Form1.SerialNo div (256*256*256));
    for i:=1 to 32 do
      sbuf[7+i]:=Form1.ExtendSerialNo[i];

{    ShowMessage(IntToStr(Integer(sbuf[4]))
                         +':'+IntToStr(Integer(sbuf[5]))
                         +':'+IntToStr(Integer(sbuf[6]))
                         +':'+IntToStr(Integer(sbuf[7])));
 }  
    sbuf[40]:=char(Form1.sport mod 256);
    sbuf[41]:=char(Form1.sport div 256);
    Form1.NMUDP1.RemoteHost:=Form1.serverIP;
    Form1.NMUDP1.RemotePort:=Form1.serverport;
    Form1.NMUDP1.SendBuffer(sbuf,41);

end;

procedure TForm1.writeinifile(cmd:integer);
var buf:array[1..64]of char;
    len,i:integer;
    temp:string;
begin
   case cmd of
       1:
       begin
       {
          form1.SerialNo:=0;
          form1.ExtendSerialNo:='';
          form1.serverip:='';
          form1.serverport:=0;
          form1.registerstyle:=2;
          form1.StartType:=1;
        }
          len:=getprivateprofilestring('SYSTEM','SERIALNO','11',@buf[1],32,'registerserver.ini');
          temp:='';
          for i:=1 to len do
            temp:=temp+buf[i];
          try
              Form1.SerialNo:=StrToInt(temp);
          except
              Exit;
          end;

          len:=getprivateprofilestring('SYSTEM','EXTENDSERIALNO','11',@buf[1],64,'registerserver.ini');
          if (len<>32) then exit;
          form1.ExtendSerialNo:='';
          for i:=1 to len do
            form1.ExtendSerialNo:=form1.ExtendSerialNo+buf[i];

          len:=getprivateprofilestring('SYSTEM','SERVERIP','11',@buf[1],32,'registerserver.ini');
          if (len<7) then exit;
          for i:=1 to len do
            form1.serverip:=serverip+buf[i];

          len:=getprivateprofilestring('SYSTEM','SERVERPORT','11',@buf[1],32,'registerserver.ini');
          if (len<4) then exit;
          temp:='';
          for i:=1 to len do
            temp:=temp+buf[i];
          form1.serverport:=strtoint(temp);

          len:=getprivateprofilestring('SYSTEM','REGISTERSTYLE','',@buf[1],32,'registerserver.ini');
          if (len<1) then exit;
          form1.registerstyle:=strtoint(buf[1]);

          len:=getprivateprofilestring('SYSTEM','STARTTYPE','',@buf[1],32,'registerserver.ini');
          if (len<1) then exit;
          form1.StartType:=strtoint(buf[1]);          
       end;
       //write ini file
       2:
       begin
         writeprivateprofilestring('SYSTEM','SERIALNO',pchar(IntToStr(form1.serialNO)),'registerserver.ini');
         writeprivateprofilestring('SYSTEM','EXTENDSERIALNO',pchar(form1.ExtendSerialNO),'registerserver.ini');
         writeprivateprofilestring('SYSTEM','SERVERIP',pchar(form1.serverIP),'registerserver.ini');
         writeprivateprofilestring('SYSTEM','SERVERPORT',pchar(inttostr(form1.serverport)),'registerserver.ini');
         writeprivateprofilestring('SYSTEM','REGISTERSTYLE',pchar(inttostr(form1.registerstyle)),'registerserver.ini');
         writeprivateprofilestring('SYSTEM','STARTTYPE',pchar(inttostr(form1.StartType)),'registerserver.ini');
       end;
     else
       ;  
   end;    
end;

procedure TForm1.N5Click(Sender: TObject);
begin
   close;
end;

procedure TForm1.ToolButton1Click(Sender: TObject);
var
   //func:start_server;
   wnd:HWND;
   buf:arr;
   retval:integer;
begin
   wnd:=form1.Handle;
   hand:=LoadLibrary('gprs_dll.dll');   //打开动态链接库
   if (hand=0) then
      begin
         memo1.lines.Add('无法载入 gprs_dll.dll 文件');
         exit;
      end;

   @function_start_gprs_server:=GetProcAddress(hand,'start_gprs_server');   //取得启动服务函数的地址
   @function_stop_gprs_server:=GetProcAddress(hand,'stop_gprs_server');
   @function_do_read_proc:=GetProcAddress(hand,'do_read_proc');
   @function_do_send_user_data:=GetProcAddress(hand,'do_send_user_data');
   @function_do_close_one_user:=GetProcAddress(hand,'do_close_one_user');
   @function_do_close_all_user:=GetProcAddress(hand,'do_close_all_user');
   @function_get_user_at:=GetProcAddress(hand,'get_user_at');
   @function_get_max_user_amount:=GetProcAddress(hand,'get_max_user_amount');
   
   if (@function_start_gprs_server=nil)  then
      begin
         FreeLibrary(hand);
         memo1.lines.Add('取不到 get start_gprs_server 地址');
         exit;
      end;
    retval:=function_start_gprs_server(wnd,msg,sport,@buf[1]);   //启动服务
    if retval<0 then
      begin
         FreeLibrary(hand);
         memo1.Lines.add('GPRS/CDMA 数据服务中心启动失败');
         exit;
      end;
    memo1.Lines.Add(buf);
    toolbutton1.Enabled:=false;
    toolbutton2.Enabled:=true;
    n2.Enabled:=false;
    n3.Enabled:=true;
    timer1.Enabled:=true;
    form1.StatusBar1.Panels[1].Text:='服务开始';
    toolbutton3.Enabled:=true;
    panel2.Caption:='0';
    t1.Enabled:=false;
    form1.currentnum:=form1.logmaxcount;

    //register
    if form1.registerstyle=1 then
        form1.registerserver(1);
end;

procedure TForm1.ToolButton2Click(Sender: TObject);
var buf:arr;
    //func_stop_server:stop_server;
    //func_close_all_user:close_all_user;
    i:integer;
begin
    if MessageDlg('确认要停止服务吗?',mtconfirmation,[mbyes,mbno],0)=mrno then exit;
    for i:=1 to 256 do
       buf[i]:=#0;

    //取得关闭用户函数的地址
    //@func_close_all_user:=GetProcAddress(hand,'do_close_all_user');

    if (@function_do_close_all_user=nil)  then   //判断是否取到该函数地址
      begin
         memo1.lines.Add('无法取得 do_close_all_user 地址');
         exit;
      end;


    //取得停止服务的函数的地址
    //@func_stop_server:=GetProcAddress(hand,'stop_gprs_server');


    if (@function_stop_gprs_server=nil)  then    //判断是否取到该函数地址
      begin
         memo1.lines.Add('无法取得 stop_gprs_server 地址');
         exit;
      end;
    try
    function_do_close_all_user(@buf[1]);   //关闭全部用户
    memo1.Lines.Add(buf);
    function_stop_gprs_server(@buf[1]);      //停止服务
    memo1.Lines.Add(buf);
    if (comonoff=1) then CloseHandle(comhand);           //关闭串口
    FreeLibrary(hand);              //释放动态库
    except
    end;
    //showmessage('aaaaaaaaa');
    listview1.Items.Clear;
    toolbutton2.Enabled:=false;
    toolbutton1.Enabled:=true;
    n3.Enabled:=false;
    n2.Enabled:=true;
    timer1.Enabled:=false;
    form1.StatusBar1.Panels[1].Text:='服务停止';
    toolbutton3.Enabled:=false;
    t1.Enabled:=true;
    if form1.registerstyle=1 then
        form1.registerserver(2);    
end;

procedure TForm1.IP1Click(Sender: TObject);
var str:string;
begin
  str:=inputbox('输入框','请输入端口(1000~65535)      ',inttostr(form1.sport));
  try
  form1.sport:=strtoint(str);
  except
  memo1.lines.Add('端口错误');
  str:=inputbox('输入框','请输入端口',inttostr(form1.sport));
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin

   if (form1.Width-472>72) then
       panel2.Width:=form1.Width-472;

   form1.lognamepath:=NO_DIRECTORY;
   form1.logmaxcount:=1000;
   form1.currentnum:=1000;

   timeinterval:=3;
   lightonoff:=1;

   msg:=4567;
   oncolor:=cllime;
   offcolor:=clRed;
   errorcolor:=form1.Panel1.Color;

   //initialize COM
   form1.baudrate:=CBR_57600;
   form1.comnum:=1;
   form1.databit:=8;
   form1.stopbit:=ONESTOPBIT;
   form1.parity:=NOPARITY;

   form1.commstate[1]:=0;
   form1.commstate[2]:=8;
   form1.commstate[3]:=2;
   form1.commstate[4]:=3;
   form1.commstate[5]:=0;

⌨️ 快捷键说明

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