◆ [Delphi] 指定したコンポーネントに貼り付いたコンポーネントのみEnabledを変更する
どーもボキです。

メンテナンス性を重視するとか偉げなこと書いときながら、
たいしたサンプルもあげてなかったので、まずコレを紹介する。

編集系のプログラムを開発した場合、
場合によっては編集NGにしたい(表示のみで使いたい)場合もあるんじゃね?

そんなときに、コンポーネントひとつひとつのEnabled := False としてはらちが明かない。
大量にコンポーネントが貼り付けられたプログラムだとなおさらだ。そういうときは、以下のコードを使おう。
// prtName    : 親となる(貼り付け先)コンポーネント名
// cmpEnabled : Enabledに代入する値 (True/False)

procedure TFM_Main._SetEnabled(prtName: String; cmpEnabled: Boolean);
var
i : Integer;
_CMP,_PRT : TComponent;
begin
for
i := 0 to ComponentCount -1 do begin
_CMP := Components[i];
_PRT := _CMP.GetParentComponent;
repeat
if
_PRT.Name = prtName then begin
try

TControl(_CMP).Enabled := cmpEnabled;
except
// TControlを継承していないコンポーネント対応 (例:TChartSeries)
end;
break;
end;

_PRT := _PRT.GetParentComponent;
until _PRT = nil;
end;
end;
上記の方法の場合、Enabled := False にしたコンポーネントは、下図のようになる。
下図では、_SetEnabled('GroupBox1', False) と している。
a0021757_2322338.gif


もうひとつ方法がある。こっちはもっと手っ取り早い。

それは、親となるコンポーネント(貼り付け先のコンポーネント) を Enabled := False にし、Font.Color := clGray とする方法。

親コンポを Enabled := False にすることで、それに貼りついたコンポはクリックできなくなる。
クリックできないことを視覚的に示すために、Font.Color := clGray とする。
TButtonはフォント色が変更できないため、TBitBtn や TSpeedButton で 代用するとよい。
a0021757_23244693.gif



サンプルプログラム

開発環境 : Delphi6 Personal
[PR]
by yozda | 2009-03-03 20:24 | プログラミング | Trackback | Comments(0)
トラックバックURL : http://yozda.exblog.jp/tb/8023485
トラックバックする(会員専用) [ヘルプ]
<< [Delphi] TFrame... [N82] カメラ撮影時のシャ... >>