Delphi/C++ Builder用 ラベルコンポーネント2題
中島 信行 |
枠付ラベルコンポーネント
ラベルはいろいろな用途に使える関係で,表現力が豊かなものを使いたくなる場合があります.フォントを変えるだけでも十分な場合が多いのですが,今回はより表現力豊かなラベルコンポーネントを紹介します.
枠付ラベルコンポーネント(TFrameLabel)
ラベルの表現力を豊かにしようと思えば,
キャプションに影を付ける
キャプションの周囲に枠を表示する
といったことを思いつきます.そこで,この二つの機能を追加したラベルコンポーネントを紹介します.
枠付ラベルコンポーネントをリスト1〜リスト3(リスト3は未掲載)に示します.リスト1(Object
Pascal版)はDelphiおよびC++ Builder用で,リスト2〜リスト3(C++版)はC++
Builder用です.C++ Builderではどちらか一方を登録してください.ただし,後述するサンプルプログラムではC++版を登録して作成しています.
枠付ラベルコンポーネント(TFrameLabel)のプロパティ
◇ Pen: TPen;
枠を描画するペンを指定するプロパティです.Pen.Widthを変えると枠の幅が変わりますが,標準のコンポーネントを使用しているため,Pen.Widthが1でない時にはpsDash,psDotが使えません.詳細はTPenのヘルプを参照してください.
また,Colorプロパティを変えると後述するShapeプロパティがfstLowered,fstRaised,fstLoweredRect,fstRaisedRectのいずれかの場合,Pen.ColorプロパティをColorプロパティと同じにします.これらの時はPen.Colorプロパティから外枠の光と影の色を計算しています.
Colorプロパティ変更時に設定されるPen.Colorの色が気に入らない場合はColorプロパティを指定したあとで,Pen.Colorプロパティを変更してください.
◇ ShadowColor: TColor defaultclBtn Shadow;
キャプション文字列の影の色を指定するプロパティです.Fontプロパティを変えるとShadowColorプロパティも変化します.影は濃い色になるのが普通ですが,黒よりも濃い色はないため,Font.Colorプロパティが黒の時はShadowColorプロパティをclBtnShadowにしています.また,白の時はShadowColorプロパティをclDkGrayにしています.
フォント変更時に設定される色が気に入らない場合はFontプロパティを指定したあとで,ShadowColorプロパティを変更してください.
◇ ShadowOffset: Integer default 0;
キャプション文字列の影のオフセット位置を指定するプロパティです.0の時は影を付けません.正の時は左上から光が当たったような影になり,負の時は右下から光が当たったような影になります.
◇ Shape: TFrameShapeType default fstNone;
枠の形状を指定するプロパティです.ShapeプロパティがfstLowered,
fstRaised, fstLoweredRect, fstRaisedRectのいずれかで,Pen.Color = clBlackの場合はPen.ColorプロパティをColorプロパティと同じにします.また,ShapeプロパティがfstRectangle,
fstRoundRect, fstEllipseのいずれかで,Pen.Color= Colorの場合はPen.ColorプロパティをclBlackにします.
Shapeプロパティ変更時に設定されるPen.Colorの色が気に入らない場合はShapeプロパティを指定したあとで,Pen.Colorプロパティを変更してください.
☆ fstNone
枠を表示しません.この時,Penプロパティは使用されません.
☆ fstLowered
TEditコンポーネントのような窪んだ形状になります.
☆ fstRaised
ボタンのような盛り上がった形状になります.
☆ fstLoweredRect
外枠がへこんだ形状になります.
☆ fstRaisedRect
外枠が盛り上がった形状になります.
☆ fstRectangle
外枠が長方形になります.
☆ fstRoundRect
外枠が角の丸い長方形になります.
☆ fstEllipse
外枠が楕円になります.
なお,Transparent=FalseではShape=fstRoundRect,fstEllipseは未サポートです.
◇ Spacing: Integer default 0;
キャプション文字列の周囲の余白を指定するプロパティです.
上記以外のプロパティはTLabelコンポーネントのプロパティですが,Alignmentプロパティの初期値をtaCenterに,Layoutプロパティの初期値をtlCenterに変更しています.
Captionプロパティを空にすると外枠だけの表示になります.この時,AutoSizeプロパティがTrueであれば,Spacingプロパティで外枠(正方形または円)の大きさを変えることができます.
枠付ラベルコンポーネント(TFrameLabel)のイベント
枠付ラベルコンポーネントで追加したイベントはありません.TLabelコンポーネントのイベントがそのまま使えます.
枠付ラベルコンポーネント(TFrameLabel)のメソッド
◇ constructor Create(AOwner: TComponent);
コンストラクタで,TAttachLabelのインスタンスを作成して初期化します.
◇ destructor Destroy;
デストラクタです.
なお,Clickメソッドをオーバーライドしており,ラベルをクリックすると,FocusControlプロパティで指定された入力コントロールにフォーカスを移動するようにしています.
また,C++ Builder 3/Delphi 4ではDoDrawTextメソッドが動的(dynamic)メソッドになったため,AdjustBounds,Loaded,SetAutoSizeメソッドなどが条件コンパイルされるように記述しています.TLabelにいろいろな機能を付加する場合にはC++
Builder 3/Delphi 4のほうが便利になっています.
引き出し線ラベルコンポーネント
FAでは機械の概略図をフォームに表示することが多いですが,各部の説明を付けるための引き出し線付きのラベルコンポーネントを紹介します.
引き出し線ラベルコンポーネント(TLineText)
機械の概略図はお絵描きソフトで描きますから,引き出し線付きの説明もそこに描いておけば良さそうに思えます.しかし,現実的にはプログラム作成中に変更される場合もあり,その度にお絵描きソフトで描き直すのは面倒です.引き出し線を付加できるラベルコンポーネントを作成しておけば,説明だけは簡単に変更できます.また,国内だけではなく海外に輸出する場合にも文字が入っていなければ機械の概略図は共有できることになります.
引き出し線ラベルコンポーネントをリスト4〜リスト6に示します(リスト6は未掲載).リスト4(Object
Pascal版)はDelphiおよびC++ Builder用で,リスト5〜リスト6(C++版)はC++
Builder用です.C++ Builderではどちらか一方を登録してください.ただし,後述するサンプルプログラムではC++版を登録して作成しています.
引き出し線ラベルコンポーネント(TLineText)のプロパティ
◇ ArrowAngle: Integer default 30;
引き出し線の先端の矢印の角度を指定するプロパティです.0から359度の範囲で指定してください.
◇ ArrowLen: Integer default 7;
引き出し線の先端の矢印の長さを指定するプロパティです.0の場合,矢印は描画されません.
◇ LineAngle: Integer default 225;
引き出し線の角度を指定するプロパティです.0から359度の範囲で指定してください.
0 右 180 左
90 上 270 下
◇ LineLen: Integer default 0;
引き出し線の長さを指定するプロパティです.0の場合,引き出し線とアンダーラインは描画されません.
◇ LinePen: TPen;
引き出し線用のペンを指定するプロパティです.アンダーラインと矢印の色もLinePen.Colorになります.また,アンダーラインと矢印は必ず実線になります(LinePen.StyleはLinePen.Width=1でないと使えないものがある.TPenのヘルプ参照).
◇ ShadowColor: TColor default clBtnShadow;
キャプション文字列の影の色を指定するプロパティです.Fontプロパティを変えるとShadowColorプロパティも変化します.影は濃い色になるのが普通ですが,黒よりも濃い色はないため,Font.Colorプロパティが黒の時はShadowColorプロパティをclBtnShadowにしています.また,白の時はShadowColorプロパティをclDkGrayにしています.
フォント変更時に設定される色が気に入らない場合はFontプロパティを指定したあとで,ShadowColorプロパティを変更してください.
以下略
copyright 1999 中島 信行