[delphi-users:2783] ByteTypeがおかしい。

1,045 views
Skip to first unread message

kotto

unread,
Oct 8, 2012, 1:02:18 AM10/8/12
to delphi...@freeml.com
いつもお世話になってます。稲富です。

半角か全角かをByteTypeでチェックしているのですが、半角しか返しません。
ぐぐったら、Delphi5のソースをDelphi XE2に持ってくると、Unicode化で書き換
えなければならないということは分かったのですが、どのように書き換えれば良
いのか分かりません。

どうぞ、ご教授よろしくお願いします。

Delphi XE2 + Windows7


// 全部半角かチェック
function TMain_Form.OnlySingleByte(const S: String): Boolean;
var
i: Integer;
begin
for i:=1 to Length(S) do
if ByteType(S, i) <> mbSingleByte then
begin
Result := False;
showmessage('全角');
Exit;
end;
Result := True;
showmessage('半角');
end;


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
最強の基地を築け!【ロボ・ウォーズ】
http://ad.freeml.com/cgi-bin/sa.cgi?id=iWLjU
------------------------------------------------------[freeml byGMO]--

kotto

unread,
Oct 8, 2012, 1:12:04 AM10/8/12
to delphi...@freeml.com
自己レスです。

StringをAnsiStringに変えたら動作しました(^^)

他にもUnicode化で注意しないといけない点がありましたら、教えてくれるとう
れしいです。


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
☆あなたはファッション大好きおしゃれ泥棒☆
http://ad.freeml.com/cgi-bin/sa.cgi?id=iWLrs
------------------------------------------------------[freeml byGMO]--

高木太郎

unread,
Oct 8, 2012, 1:27:47 AM10/8/12
to delphi...@freeml.com
こんにちは、イマジオムの高木です。

kotto さん:
> 他にもUnicode化で注意しないといけない点がありましたら、
> 教えてくれるとうれしいです。

 UNICODE 化は大きな話題になりましたので、このメーリング
リストにもたくさんの投稿がありますが、まずは私の取り組んだ
方法([delphi-users:2201] に記載)を紹介します。 ご参考に
なればいいのですが。

(以下、[delphi-users:2201] から引用)
――――――――――――――――――――――――――――――――――――
1.UNICODE 化

 UNICODE 化により、Char と string の意味が変わったのはご存知の
とおりです。 ソースコードを書き直す必要があるとのことで、着手前は
戦々恐々でしたが、実際には意外と直さずにすみました。 だいたい
1,000行あたり1ヶ所くらいの修正ですんだと思います。 コツと
しては───

  ア.なるべく低層のユニットから取り組んでいきます。 ユニット
    ごとにテストプロジェクトを作るのがお勧めです。

  イ.最初にユニットに含まれる Char・PChar・Length・SetLength・
    FillChar・ByteType ……といったキーワードを、機械的に
    ' の付いた文字列に置き換えます(つまり Char' PChar' などに
    します)。 これでコンパイルをかけると、その箇所でエラーが
    出ますので、確実かつ網羅的に危険部位を見つけることが
    できます。

  ウ.イの部分では、ANSIChar または ANSIString 型が使われている
    はずですので、その変数を見つけ、VCL標準でない手続き
    または関数(たとえば独自DLLのインポート関数など)に
    渡している部分を探します。 特にポインタを引数として渡す
    部分、文字列の長さを扱っている部分が要注意です。

  エ.どうしても必要な場合に限り、ANSIChar・ANSIString 型の変数を
    宣言して使います。 宣言を明示的にすることで、後から問題が
    起きた時に、疑う場所を絞り込むことができます。 つまり
    「ANSI」で検索をかければいいのです。

意外と簡単ですので、ぜひチャレンジしてみてください。
――――――――――――――――――――――――――――――――――――
〒316-0024 茨城県 日立市 水木町 1-11-10 高木太郎
電話・ファクシミリ:0294-52-6787
電子メール:aaa1...@pop06.odn.ne.jp


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
かわいいベジモンがたくさん!自分だけの農場を作ろう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=iWL0F
------------------------------------------------------[freeml byGMO]--

Fukushi

unread,
Oct 8, 2012, 1:31:40 AM10/8/12
to delphi...@freeml.com
稲富さん、こんにちは。福士と申します。

> 他にもUnicode化で注意しないといけない点がありましたら、教えてくれるとう
> れしいです。

そもそも全角、半角という考え方は忘れたほうがよいかもしれません。
あとは

RAD Studioマイグレーションセンター | 製品
http://www.embarcadero.com/jp/rad-in-action/migration-upgrade-center

にある資料が参考になると思います。

---
東洋テクニカルシステム株式会社 システム開発部 福士 光
Hikaru Fukushi (Toyo Technical System Inc.)
mailto:fuk...@tts-inc.co.jp


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
たくさんの女の子モンスターを仲間にしよう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=iWL3u
------------------------------------------------------[freeml byGMO]--

kotto

unread,
Oct 8, 2012, 2:05:39 AM10/8/12
to delphi...@freeml.com
高木様、福士様有り難うございます。

free MLのDelphiのところから過去ログが検索できるのですねv 早速Unicodeで
検索してみましたv

半角や全角の概念も変わってしまったのですね。
半角が2バイトの場合もあるみたいで。半角=1バイト、全角=2バイトの時代は
終わっているみたいですね。

有り難うございました。


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
使い方はいろいろ♪一部のメンバーだけにMLメールを送ろう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=iWLRK
------------------------------------------------------[freeml byGMO]--

高木太郎

unread,
Oct 8, 2012, 2:12:57 AM10/8/12
to delphi...@freeml.com
こんにちは、イマジオムの高木です。

kotto さん:
> 半角=1バイト、全角=2バイトの時代は終わっているみたいですね。

 終わっているわけではなく、両立する時代になったと考えた方が
いいと思います。 ですので Unicode と ANSI の変換によって何が
起きるのかを押さえておくことが重要です。
――――――――――――――――――――――――――――――――――――
株式会社イマジオム 代表取締役 高木太郎
〒316-0024 茨城県 日立市 水木町 1-11-10
電話:0294-28-0147
ファクシミリ:0294-28-0148
電子メール:tarou_...@imageom.co.jp
ホームページ:http://www.imageom.co.jp/


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
メンバーで使える掲示板を活用しよう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=iWLWP
------------------------------------------------------[freeml byGMO]--

kotto

unread,
Oct 8, 2012, 2:57:56 AM10/8/12
to delphi...@freeml.com
こんにちは、稲富です。

>終わっているわけではなく、両立する時代になったと考えた方が
>いいと思います。 ですので Unicode と ANSI の変換によって何が
>起きるのかを押さえておくことが重要です。


高木様お返事有り難うございます。
なるほど、両立する時代なのですか! 今はまだよく分かってないこともありま
すが、これからいろいろ見てみようと思います。
有り難うございます。


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
練習や試合の予定調整は「とっとと決め太郎」におまかせ!
http://ad.freeml.com/cgi-bin/sa.cgi?id=iWM2z
------------------------------------------------------[freeml byGMO]--

Reply all
Reply to author
Forward
0 new messages