procedure TForm1.Button9Click(Sender: TObject);
var s : String[3];
var d: integer;
begin
d:=strtoint(edit1.text) ;
 if (d<177)and(d>0) then
   s:=char(d)
 else
   begin
   s[1] := char(d shr 8);
   s[2] := char(d) ;
   end  ;
 Edit2.text :=s;
end;
上面语句为求任意字符的ASCII码,当输入65时edit2显示'A',输入55004或-10532时显示'周'
这样是没错的,但是如果改成下面这样.
procedure TForm1.Button9Click(Sender: TObject);
var s : String[3];
var d: integer;
begin
if (pos(',',edit1.text)<>0) then showmessage('is is wrong');
d:=strtoint(edit1.text) ;
 if (d<177)and(d>0) then
   s:=char(d)
 else
   begin
   s[1] := char(d shr 8);
   s[2] := char(d) ;
   end  ;
 Edit2.text :=s;
end;
就是上面增加了判断是否含有','号这一句.我想知道的问题1就是执行完showmessage('is is wrong');
后,下面的语句还是会被执行。应该怎么办才能提示showmessage 后不再执行后面的语句。Delphi中好像没有return false之类的语句.于是我又改成
procedure TForm1.Button9Click(Sender: TObject);
var s : String[3];
var d: integer;
begin
if (pos(',',edit1.text)<>0) then showmessage('is is wrong')
else
 begin
d:=strtoint(edit1.text) ;
 if (d<177)and(d>0) then
   s:=char(d)
 else
   begin
   s[1] := char(d shr 8);
   s[2] := char(d) ;
   end  ;
 Edit2.text :=s;
   end;
end;
输入65是能正确显示'A' ,可是输入55004或-10532确没有显示(本来应该显示'周')
即begin
   s[1] := char(d shr 8);
   s[2] := char(d) ;
   end  ;
这一段好像没被执行。请问的问题2是出错在哪里,应该怎样修改。
我初学delphi不久,对语法不太熟悉,请各位帮助解决一下上面的两个疑问。谢谢!!

解决方案 »

  1.   

    第一个问题用exit就可以跳出来了
    第二个正在考虑中
      

  2.   

    奇怪,我在edit2.text:=s后面加了一句 showmessage(s[1]+s[2]); 就正常显示了
    继续研究中。
      

  3.   

    经验证。是因为使用后面的方法时s[0]的值为0。而使用第一种方法的时候s[0]会自动赋值为$90。
    我记得这个地方应该是用来存放s的长度。会变成0的原因不明。要想正常使用,只需要给s[0]赋一个比2大的值就可以了。根本解决方法继续研究
    有没有高手可以直接指点下
      

  4.   

    s := char(d shr 8) + char(d);
      

  5.   

    先谢谢cyp207(cyp207) 的第一个问题的解答.
      

  6.   

    这是因为s这个变量再你对它后没有使用过,并且s是个局部变量,这个时候delphi编译器就会认为你问题2的这两句代码是多余的,当你加了show这一句的时候这两句就变成有用的代码了,就能正常显示了。
      

  7.   

    begin
       s[1] := char(d shr 8);
       s[2] := char(d) ;
    end  ;
    这里改成 s:=char(d shr 8)
    可以吗?
      

  8.   

    var
      S: string; //通过SetLength()设置长度
      D: Integer;
    begin
      if Pos(',', Edit1.text) > 0 then
      begin
        ShowMessage('is is wrong');
        Exit; //Exit; 相当于C中 return;
      end;
      D := StrToIntDef(Edit1.Text, 0); //StrToIntDef()安全些
      if (D < 177) and (D > 0) then
        S := Char(D)
      else
      begin
        SetLength(S, 2);
        S[1] := Char(D shr 8);
        S[2] := Char(D and $FF);
      end;
      Edit2.Text := S;
    end;