ここを調べて、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('全部半角です');
Unicode文字列の場合、ByteTypeは普通の文字(mbSingleByte)、上位サロゲート(mbLeadByte)、下位サロゲート(mbTrailByte)の区別を返します。
そもそもUnicode文字列には半角文字、全角文字の区別はないのですが、なにを判定したいのか、そのあたりがはっきりすれば
もう少し的確なアドバイスができると思います。
var
s: AnsiString;
を追加して、
> if(ByteType(memo2.lines[i],1)=mbLeadByte)then
の部分を
s := memo2.lines[i];
if(ByteType(s, 1) = mbLeadByte) then
としてみたら、どうなりますか?
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;