半角文字と全角文字を区別したいのですが??

解決


AS  2024-10-24 20:14:41  No: 151685  IP: [192.*.*.*]

ここを調べて、bytetypeを使って、プログラムしましたが、
行の先頭に日本語が入っていても、全部半角ですとなります。
正直、ボケが入っているので、単純な間違いかも知れませんが、
よろしくお願いします。

DelphiXE5?を使っています。
 

 i:=-1;
  Repeat
   inc(I);
   if(ByteType(memo2.lines[i],1)=mbLeadByte)then
   begin
      showmessage('Memo2に全角文字があります');
      EXIT;
   end
  until memo2.lines.count-1<I;
  showmessage('全部半角です');

編集    削除
HFUKUSHI  2024-10-24 21:03:50  No: 151686  IP: [192.*.*.*]

Unicode文字列の場合、ByteTypeは普通の文字(mbSingleByte)、上位サロゲート(mbLeadByte)、下位サロゲート(mbTrailByte)の区別を返します。
そもそもUnicode文字列には半角文字、全角文字の区別はないのですが、なにを判定したいのか、そのあたりがはっきりすれば
もう少し的確なアドバイスができると思います。

編集    削除
igy  2024-10-24 21:43:33  No: 151688  IP: [192.*.*.*]

var
    s: AnsiString;
を追加して、

> if(ByteType(memo2.lines[i],1)=mbLeadByte)then 
の部分を
s := memo2.lines[i];
if(ByteType(s, 1) = mbLeadByte) then 

としてみたら、どうなりますか?

編集    削除
AS  2024-10-25 03:51:12  No: 151689  IP: [192.*.*.*]

HFUKUSHI、igyさん、ありがとうございました。
うまく作動しました。
stringではダメだったんですね。

var
  s:ansistring;
begin
  i:=-1;
  Repeat
   inc(I);       s:=memo2.lines[i];
   if(ByteType(S,1)=mbLeadByte)then
   begin
      showmessage('Memo2に全角文字があります。削除してもう一度実行してください');
      EXIT;
   end
  until memo2.lines.count-1<I;
  showmessage('全部半角です');
end;

編集    削除