怪現象のメモ

Builderでいろいろすったもんだしたので、すでに基地の問題かもしれないけど面倒だから調べてなかったりする現象をメモ。


○環境を移動するとコンパイルエラー?
TurboC++で作っていたProject一式を別のPCのC++Builder2006(Borland Developer Studio2006)で開いてコンパイルしたらプリコンパイルヘッダと思しきファイルのコンパイルでエラーがでた。(詳細は失念)
ファイルを再度コンパイルしてもダメ、プロジェクトを再構築してもダメで、途方にくれた後Builderをいったん落としてから再度開きなおすと何事もなかったかのようにコンパイルが通ったり。

どういうことなの・・・



○TLabelの挙動がマニュアルと違う?

Borlandヘルプ「TCustomLabel::AutoSize プロパティ」より

WordWrap が true の場合,ラベルの幅は固定値になります。このとき,AutoSize も true の場合には,テキストを変更するとラベルの高さだけが変更されます。AutoSize が true で WordWrap が false の場合,フォントによってラベルの高さが決まり,テキストを変更することでラベルの幅も変更されます。

ってマニュアルには書いてあるけど、これってつまり WordWrap==true && AutoSize==true ならラベルの横幅は変化なし、縦幅が変化ありってことだと思うけど、実際にやってみたらテキストを変更すると"もともとCaptionプロパティに入っていた文字列の横幅にあわせた横幅に変更してさらに縦幅を変更する"って動きになってびっくり。

つまり設計画面で

ここは置き換える

みたいなCaptionにしておいて、Widthプロパティを150とか長めに設定していても実行時に長い文字列をCaptionに設定すると

ワードラップされ
るけど、横幅は最
初の文字列にそろ
えられちゃう。そ
れって何か違うよ
うな気がする。

みたいにやけに縦長のラベルになってしまう。。。

マニュアルの説明を見たら普通Widthプロパティは固定(設計時の値)だと考えるだろって思うんだけど。動作が微妙すぎる。。。
とりあえず回避策としてはAutoSizeをfalseにすればOK。

【2009/07/05追記】
すっかり忘れていたけど、AutoSizeをfalseにする場合はあらかじめTLabelのサイズ(Height, Width)を大きくしておかないと長い文字列を設定した際に文字列がすべて表示しきれなかったり。