お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"親子コンポーネント"




{
TPanelを継承してその上にTComboBoxがのっかった親子コンポーネント
のサンプル。
設計時にオブジェクトインスペクタから子コンポーネントが持つ
プロパティやイベントをいじれるようにする。
  property ComboItems: TStrings
  property OnComboChange: TNotifyEvent
実行時プロパティで子コンポーネントにフルアクセスする。
  property Combo: TComboBox
}
unit ComboPanel;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TComboPanel = class(TPanel)
  private
    { Private 宣言  }
    FCombo: TComboBox;
    FOnComboChange: TNotifyEvent;
    procedure SetComboItem(Value: TStrings);
    function GetComboItems: TStrings;
  protected
    { Protected 宣言 }
    procedure Loaded; override;
    procedure ComboChange(Sender: TObject); dynamic;
  public
    { Public 宣言 }
    constructor Create(AOwner: TComponent); override;
    property Combo: TComboBox read FCombo write FCombo;
  published
    { Published 宣言 }
    property ComboItems: TStrings read GetComboItems
      write SetComboItem;
    property OnComboChange: TNotifyEvent read FOnComboChange
      write FOnComboChange;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Test', [TComboPanel]);
end;

{ TComboPanel }

// コンストラクタ・・コンボボックスの作成と初期設定
constructor TComboPanel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FCombo:= TComboBox.Create(Self); // オーナーを指定して作成する
  FCombo.Parent:= Self;            // 親を指定する
  FCombo.BoundsRect:= Classes.Bounds(8, 4, 150, 20);
  FCombo.OnChange:= ComboChange;   // イベントハンドラー定義
end;

// 設計時にコンボボックスの項目が作成された場合は実行時に反映する
procedure TComboPanel.Loaded;
begin
  inherited Loaded;
  SetComboItem(FCombo.Items);
end;

// プロパティ読み出しアクセスメソッド
function TComboPanel.GetComboItems: TStrings;
begin
  Result:= FCombo.Items;
end;

// プロパティ書き込みアクセスメソッド
procedure TComboPanel.SetComboItem(Value: TSTrings);
begin
  if (Value = nil) or Value.Equals(FCombo.Items) then Exit;
  FCombo.Items.Assign(Value);
end;

// イベント呼び出しメソッド
procedure TComboPanel.ComboChange(Sender: TObject);
begin
  if assigned(OnComboChange) then OnComboChange(Self);
end;

end.

                  http://member.nifty.ne.jp/h-triton/
          ○ 快速・大容量テキストエディタ「えるの〜と」進化中 ○
          Avalon's Friendly Crew #80008  H-Triton (^^) since 1996

Original document by H-Triton        氏 ID:(QZV11422)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum