喫茶XRAYトップページ

[スレッド全体
]

[1427] ユニコードと私返信 削除
2007/10/30 (火) 11:26:05 Syake
マスターお久しぶりです。
今年の夏は暑かったですが、何時の頃からかめっきり涼しくも
寒くもなりました。
今年の冬は、前回と一転して寒くなるとか・・・・。

ところでDelphiは次期バージョンで完全にユニコード対応!?
などという事ですが、どうなるのかな?
まあ、漢字変換して確定後「?」になるなんて問い合わせは
無くなるでしょう。
でも、ちょっと大変なのがとある印刷関連。
レポート製品の都合上、等幅フォントとLength関数を使用して
いる箇所が有ります。
つまり
+-------------------------------------------+
| AAAAA  D  FFFF    JJ    BBBBBBBBB         |
| AAA    DD FFFFFF  J     KKKKK  LLLLLLLLL  |
| AAAA   DD          NNNNNNNNNNNN      |
| XXXXXXXXXXXXXX VVVVVVVVVVVVVVVVV GGGGG    |
+-------------------------------------------+
てな感じで、関連性のあるものは行単位で揃えて出力する。
(行数や印刷幅は各個決まっている、出力できないデータは
別紙となる。)
で、実際は行単位で変数を作成しそこに文字列を加えていき
印刷すると言うもの
そこで、そろえて印字する為に例えばAデータの最大文字数を
取得して、A各データに必要な数の空白で埋めてしまう。
こんな事を繰り返すと、Aデータ、Dデータ・・・それぞれ縦
に揃ったイメージで印刷できるし空白は別のデータで印刷で
きるって寸法だ。
まあ、こんな単純な仕様を考えるのは・・・誰だよ。
ユニコードになるとこれは完全に無理ですよね。

もっとも、ユニコードになると旧世代の遺物みたいなレポート
製品とはお別れをしなくてはならないのでしょうが。
今度は最大印刷幅を取得して・・・って、何でこんな煩わしい
事をしなくちゃいかんのだ(^_^;)




[1428] Re:ユニコードと私返信 削除
2007/11/2 (金) 11:31:45 TS
Delphiがユニコード対応になったらバージョンアップ
したいと思ってますがユニコードについて余り分かってません。
そこでSyakeさん教えて下さい。
> ユニコードになるとこれは完全に無理ですよね。
ユニコードは 等幅フォントとかLength関数がどういう扱いに
なって例示の扱いができなくなるのでしょうか。

[1429] Re2:ユニコードと私返信 削除
2007/11/2 (金) 13:34:38 honadaiku
マルチバイト文字列 (string型) では、等幅フォントなら、1バイト文字は半角
に、2バイト文字は全角になるので、印字幅の計算が簡単 (Length の値を揃える
と幅も揃うので表組みしやすい)。
しかし、ユニコード (WideString型) では、Length の値は文字数であり、印字
幅とは無関係なので計算が面倒 (頭から一文字づつ順番に幅を調べて全部足して
みないと印字位置・幅が決められない)。
というようなことではないでしょうか。

参考 (Delphi のヘルプから引用)
『1 バイトおよびマルチバイト文字列の場合,Length は文字列によって使用さ
れるバイト数を返します。Unicode (WideString) 文字列の場合は,Length はバ
イト数を 2 で割った値を返します。』

[1430] Re3:ユニコードと私返信 削除
2007/11/2 (金) 18:35:28 Syake
▼ honadaikuさん
> マルチバイト文字列 (string型) では、等幅フォントなら、1バイト文字は半角
> に、2バイト文字は全角になるので、印字幅の計算が簡単 (Length の値を揃える
> と幅も揃うので表組みしやすい)。
> しかし、ユニコード (WideString型) では、Length の値は文字数であり、印字
> 幅とは無関係なので計算が面倒 (頭から一文字づつ順番に幅を調べて全部足して
> みないと印字位置・幅が決められない)。
> というようなことではないでしょうか。


そう言うことですね。


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82