プログラミング

Delphi/C++ Builder用
LED付ラベル

中島 信行


 FA用途では押ボタンやランプとともにLEDもよく使われます.今回はラベルにLEDを付加したコンポーネントを紹介します.
 未掲載リストは,http://www.cqpub.co.jp/からダウンロードできます.

LED付ラベルコンポーネント(TLedLabel)

 デバッグ時には通信が止まっていないかとか,特定の処理が実行されているかといったことを確認するために該当部分の処理でLEDを点滅させるといったことを行うことがあります.LEDはボタンやランプよりも小さいため,ちょっとした空きエリアに配置することができるため,そういった用途にも向いています.
 また,LEDといってもラベルとしての機能を丸ごと継承させていますから,ランプ代わりに使うこともできます.ラベルをランプ代わりに使うとラベル全体の色が変わるため,目立ちすぎて数多く配置するとケバケバしく感じることがありますが,LED付ラベルでは小さいLEDの色が変わるだけですから,ケバケバしさを抑えることができます.
 LED付ラベルコンポーネントをリスト1〜リスト3に示します.リスト1(Object Pascal版)はDelphiおよびC++ Builder用で,リスト2〜リスト3(C++版)はC++ Builder用です(リスト3は未掲載).C++ Builderではどちらか一方を登録してください.ただし,後述するサンプルプログラムではC++版を登録して作成しています.

LED付ラベルコンポーネント(TLedLabel)のプロパティ

 LED付ラベルはTCustomLedLabelコンポーネントで作成していますが,TCustomLedLabelコンポーネントではLEDに関するプロパティをprotectedにしています.TLedLabelコンポーネントはTCustomLedLabelコンポーネントのLEDに関するプロパティを公開しただけのコンポーネントです(TCustomLedLabelコンポーネントはTLabelコンポーネントから派生させている).

◇ LedColor:   TColor    default clRed;

 LEDの色を指定するプロパティです.

◇ LedPen:    TPen;

 LEDの外周の枠を描画するペンを指定するプロパティです.

◇ LedShape:   TLedShapeType default lstFlat;

 LEDの外枠の形状を指定するプロパティです.
☆ lstFlat
 平面的な枠になります.外枠をなくしたい場合はLedPen.ColorをLedColorと同じ色にするか,または,LedPen.StyleをpsClearにしてください.
☆ lstLowered
 TEditコンポーネントのような窪んだ形状になります.
☆ lstRaised
 ボタンのような盛り上がった形状になります.
☆ lstEdgeLowered
 外枠がへこんだ形状になります.
☆ lstEdgeRaised
 外枠が盛り上がった形状になります.

◇ LedSize:   Integer    default 10;

 LEDの直径を指定するプロパティです.本プロパティを0にするとLEDを表示しません.また,Captionプロパティを空にするとLEDだけの表示にすることができます.

◇ ShadowColor: TColor    default
clBtnShadow;

 テキストの影の色を指定するプロパティです.Fontプロパティを変えるとShadowColorプロパティも変化します.影は濃い色になるのが普通ですが,黒よりも濃い色はないため,Font.Colorプロパティが黒の時はShadowColorプロパティをclBtnShadowにしています.また,白の時はShadowColorプロパティをclDkGrayにしています.
 フォント変更時に設定される色が気に入らない場合はFontプロパティを指定したあとで,ShadowColorプロパティを変更してください.

◇ ShadowOffset: Integer    default 0;

 テキストの影のオフセット位置を指定するプロパティです.
  0 : 影なし
  正 : 左上から光が当たったような影
  負 : 右下から光が当たったような影
となります.

◇ Spacing:   Integer    default 1;

 テキストとLEDの間の隙間を指定するプロパティです.AlignmentプロパティがtaLeftJustifyまたはtaCenterの時にはテキストが左,LEDが右になりますが,taRightJustifyの時にはテキストが右,LEDが左になります.
 AlignmentプロパティがtaLeftJustifyまたはtaCenterでAutoSizeプロパティがTrueの場合,Captionプロパティを切り替えるとLEDの位置も変わりますから,注意してください(AlignmentプロパティがtaRightJustifyの場合はLEDの位置は左端に固定される).Captionプロパティを切り替える場合は,設計時にAutoSizeプロパティをTrueにしてサイズを決めた後にAutoSizeプロパティをFalseにして実行させるようにしたほうがよいと思います.

LED付ラベルコンポーネント(TLedLabel)のイベント

 LED付ラベルコンポーネントで追加したイベントはありません.TLabelコンポーネントのイベントがそのまま使えます.

LED付ラベルコンポーネント(TLedLabel)のメソッド

◇ constructor Create(AOwner: TComponent);

 コンストラクタでTLedLabelのインスタンスを作成して初期化します.

◇ destructor Destroy;

 デストラクタです.
 なお,Clickメソッドをオーバーライドしており,ラベルをクリックすると,FocusControlプロパティで指定された入力コントロールにフォーカスを移動するようにしています.
 また,C++ Builder 3およびDelphi 4ではDoDraw Textメソッドが動的(dynamic)メソッドになったため,AdjustBounds,Loaded,SetAutoSizeメソッドなどが条件コンパイルされるように記述しています.TLabelにいろいろな機能を付加する場合には,C++ Builder 3/Delphi 4のほうが便利になっています.

ON/OFF LEDコンポーネント(TLedLamp)

 ON/OFF LEDコンポーネントはFA用途でのランプ代わりにON/OFFで制御できるようにしたものです.

ON/OFF LEDコンポーネント(TLedLamp)のプロパティ

 TCustomLedLabelコンポーネントから派生させていますから,追加したプロパティを説明します.

◇ Light: Boolean default False;

 本プロパティをTrueに設定すれば点灯(OnColor)し,Falseにすれば消灯(OffColor)します.アプリケーションは本プロパティでON/OFF状態の参照と変更を行ってください.

◇ OnColor: TColor default clAqua;

 点灯(Light=True)時の色を指定します.

◇ OffColor: TColor default clBtnFace;

 消灯(Light=False)時の色を指定します.

◇ OnText:  string;

 点灯(Light=True)時のテキストを指定します.

◇ OffText: string;

 消灯(Light=False)時のテキストを指定します.OnText,OffTextプロパティがともに未指定であればCaptionはそのままで変化しません.
 LEDの場合はON/OFFでキャプションを切り替えることは少ないと思いますが,ボタンやランプでテキストを指定できるようにしている関係で合わせました.
 上記5つとLedColorプロパティ以外のプロパティはTLedLabelコンポーネントと同等です.なお,publicプロパティにLightプロパティと同機能のIsLampedプロパティがあります.これは以前紹介したTLampコンポーネントに合わせたプロパティです.LEDはLight Emitting Diodeの頭文字を取ったものですから,Lampというのはちょっとおかしい気がして,公開プロパティはLightにしました(それにしてはコンポーネント名にLampがついていますが).

ON/OFF LEDコンポーネント(TLedLamp)のイベント

 ON/OFF LEDコンポーネントで追加したイベントはありません.TLabelコンポーネントのイベントがそのまま使えます.

ON/OFF LEDコンポーネント(TLedLamp)のメソッド

◇ constructor Create(AOwner: TComponent);

 コンストラクタでTLedLampのインスタンスを作成して初期化します.

◇ destructor Destroy;

 デストラクタです.

3ステートLEDコンポーネント(TTriStateLed)

 FAではON/OFF以外に警告状態を示す点滅やONになる前の準備状態を示す点滅など3状態が欲しい場合があります.3ステートLEDコンポーネントはON/OFF/点滅の3状態を持つLEDです.

以下略


copyright 1999 中島信行