|
15番会議室「FAQ編纂委員会」に寄せられた「よくある質問の答え」
[Q]
ComponentState というのは何ですか? csDesigning はよいとして、特に、
csLoading がわかりづらいのですが。
[A]
csLoading は、「ファイラオブジェクトからロード中である」ということで、
以下に[例]のコーディングにより、ShowMessageに捕まった時点での、
ComponentState を示します。
(1) コンポーネントパレットからフォームに落とす。いわゆるポトリペタ
<Create>(csDesigning)
(2) フォームからコンポを削除
<Destroy>(csDestroying)
(3) プロジェクトマネージャでコンポごとフォームファイルを削除
<Destroy>(csDestroying/csDesigning)
(4) プロジェクトマネージャでコンポごとフォームファイルを追加
あるいは、フォーム上で、コピー&ペースト
<Create>(csDesigning) -> <Loaded>(csLoading/csDesigning)
(5) 実行ファイル起動
<Create>('') -> <Loaded>(csLoading)
(6) FormCreate中で動的生成
<Create>('')
[例]
{以下はテスト用コンポ TComp モジュールです}
type
TArState=array[0..7] of string[12];
TComp = class(TCustomPanel)
private
{ Private 宣言 }
protected
{ Protected 宣言 }
public
{ Public 宣言 }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Loaded; override;
published
{ Published 宣言 }
end;
procedure Register;
const
ArState: TArState=
('csLoading','csReading','csWriting','csDestroying',
'csDesigning','csAncestor','csUpdating','csFixups');
var
ArRState: TArState;
implementation
procedure Register;
begin
RegisterComponents('MySamples', [TComp]);
end;
function GetComponentState(c: TComponent): string;
var
i: integer;
sState: string;
begin
for i:=0 to 7 do ArRState[i]:='';
sState:='';
with c do begin
if csLoading in ComponentState then ArRState[0]:=ArState[0];
if csReading in ComponentState then ArRState[1]:=ArState[1];
if csWriting in ComponentState then ArRState[2]:=ArState[2];
if csDestroying in ComponentState then ArRState[3]:=ArState[3];
if csDesigning in ComponentState then ArRState[4]:=ArState[4];
if csAncestor in ComponentState then ArRState[5]:=ArState[5];
if csUpdating in ComponentState then ArRState[6]:=ArState[6];
if csFixups in ComponentState then ArRState[7]:=ArState[7];
end;
for i:=0 to 7 do
if ArRState[i]<>'' then
sState:=sState+ArRState[i]+'/';
Delete(sState,Length(sState),1);
Result:='ComponentState='+sState;
end;
constructor TComp.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
Height:=25;
Width:=75;
BevelInner:=bvNone;
BevelOuter:=bvRaised;
BevelWidth:=1; {2}
BorderStyle:=bsNone; {bsSingle}
ShowMessage('<Create>'+GetComponentState(Self));
end;
destructor TComp.Destroy;
begin
ShowMessage('<Destroy>'+GetComponentState(Self));
inherited Destroy;
end;
procedure TComp.Loaded;
begin
ShowMessage('<Loaded>'+GetComponentState(Self));
inherited Loaded;
end;
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum FDELPHIに寄せられる質問の中から、よくある質問への回答を FDELPHIのメンバーがまとめたものです。 したがって、これらの回答はボーランド株式会社がサポートする公式のものではなく、掲示されている内容についての問い合わせは受けられない場合があります。
Copyright 1996-1998 Delphi Users' ForumFAQ編纂委員会
|