memo1的一行数据格式是
   位置,30,40,55,25
   位置,35,46,50,25如何把这一五个数值,分别付给label1.caprion
                           label2.caprion
                           label3.caprion
                           label4.caprion
                           label5.caprion

解决方案 »

  1.   

    这个一行的值,相当我们的IP地址一样IP 192.168.1.1然后我想把它取出来再重新修改,
    嘿嘿.写进去简单,不懂得取出来了.
      

  2.   

    位置,30,40,55,25这个信息的前半部分“位置,30,40”已截取了,后面的部分楼主自己研究吧,
    这个也可以写在“函数体”
    实现代码如下:
    procedure TForm1.Memo1Click(Sender: TObject);
    var
       a:integer;
       a0,a1,a2,a3:string;
    begin   a:=SendMessage(Memo1.Handle,EM_LineFromChar,Memo1.SelStart,0); //获取当前行号  if Trim(memo1.Lines.Strings[a])<>'' then
      begin
        if Pos(',',memo1.Lines.Strings[a])>0 then
        begin
          a0:=Copy(memo1.Lines.Strings[a],1,Pos(',',memo1.Lines.Strings[a])-1);
          showmessage('当前行信息内容:'+memo1.Lines.Strings[a]+#10#13+  //记录显示
          '第一个关键字是:'+a0);    end;
      end;
      //将第一个字符开始截取到第一个分号后的所以字符串
      //示例  位置,30,40,55,25 截取后的信息是: 30,40,55,25
      a1:=RightStr(memo1.Lines.Strings[a],(length(memo1.Lines.Strings[a]))-length(a0)-1); //引用系统单元StrUtils
      showmessage('a1     '+a1);     //获取字符串   30,40,55,25  //============================================================================
      if Trim(a1)<>'' then
      begin
        if Pos(',',a1)>0 then
        begin
          a2:=Copy(a1,1,Pos(',',a1)-1);
          showmessage('当前行信息内容:'+a2+#10#13+  //记录显示
          '第二个关键字是:'+a2);    end;
      end;
      //将第一个字符开始截取到第一个分号后的所以字符串
      //示例  位置,30,40,55,25 截取后的信息是: 30,40,55,25
      a3:=RightStr(a1,(length(a1))-length(a2)-1); //引用系统单元StrUtils
      showmessage('a3     '+a3);     //获取字符串   30,40,55,25end;
      

  3.   

    最原始的办法就是先用循环获取每个逗号的位置,再用copy函数把数值读取出来即可(每个数值的位数就是两个逗号之间的差值),有没有其它捷径就不知道了~
      

  4.   

    自定义函数如下:
    function GetDefaultString(Bankinformation:String;bsfdh:Char;nPos:integer):string;
    var
        sListinfo:TStringList;
    begin
        Result:='';
        sListinfo:=TStringList.Create;
        sListinfo.Text:=StringReplace(Bankinformation,bsfdh,#13#10,[rfReplaceAll]);
        if (nPos>0) and (sListinfo.Count>=nPos) then Result:=sListinfo[nPos-1];
    end;引用方式如下:
    procedure TForm1.Button3Click(Sender: TObject);
    var
       a:integer;
    begin
       a:=SendMessage(Memo1.Handle,EM_LineFromChar,Memo1.SelStart,0); //获取当前行号   label1.Caption:=(GetDefaultString(memo1.Lines.Strings[a],',',1));//第3个*后的字符.
       label2.Caption:=(GetDefaultString(memo1.Lines.Strings[a],',',2));//第3个*后的字符.
       label3.Caption:=(GetDefaultString(memo1.Lines.Strings[a],',',3));//第3个*后的字符.
       label4.Caption:=(GetDefaultString(memo1.Lines.Strings[a],',',4));//第3个*后的字符.
       label5.Caption:=(GetDefaultString(memo1.Lines.Strings[a],',',5));//第3个*后的字符.end;//重点声明一下:
    必须用“鼠标”选中MEMO1中的某一行后,再点击“按扭”获取信息的测试OK,继续“潜水”.............
    等待下一次涨海水.................

      

  5.   

      with TStringList.Create do
        try
          CommaText := '位置,30,40,55,25';
          Label1.Caption := Strings[0];
          Label2.Caption := Strings[1];
          Label3.Caption := Strings[2];
          Label4.Caption := Strings[3];
          Label5.Caption := Strings[4];
        finally
          Free
        end;
      

  6.   

    sgzhou12345
    基本上这个写得很了,但是,这个要鼠标指定位置我要操作了,每隔几秒自动读取(相当于后台操作)一行数据,然后付值,然后再读取下一行数据
      

  7.   

    linzhen6790
    楼主其实你可以在读取信息到控件MEMO1后,
    再循环读取这个MEMO1控件中的信息即可