お知らせ

電子会議

ライブラリ

FDelphi サイト全文検索

Delphi FAQ一覧

サンプル蔵



FDelphi FAQ
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編纂委員会