DelphiのRADでフォーム以外のクラスを継承できませんか?

解決


るるとん@K  2004-04-27 02:42:41  No: 8686

タイトルが変ですが、
DelphiのRADツールでTPanelやら何やらのTWinControlの継承クラスを継承したクラスを作成できますか?


にしの  2004-04-27 02:45:36  No: 8687

RADでは無理です。
TFrameか、TFormの継承クラスであればできますが。


るるとん@K  2004-04-27 02:50:31  No: 8688

そうですね
出来れば便利なのに...  と、思うのは私だけ?


jok  2004-04-27 03:29:25  No: 8689

[RADで自動的に] という意味ならできませんが、コードエディタに
派生クラスを宣言実装することはもちろんできますよ。


るるとん@K  2004-04-27 04:47:41  No: 8690

>[RADで自動的に] という意味ならできませんが、コードエディタに
>派生クラスを宣言実装することはもちろんできますよ。
TForm1=Class(TForm)とかを、変更するんですか?


jok  2004-04-27 06:33:37  No: 8691

こんな感じです。デフォルトで黄色いパネルをつくります。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;   // ExtCtrls を加える

type
TMyPanel = class(TPanel)
private
protected
public
  constructor Create(AOwner: TComponent); override;
end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
  public
    MyPanel:TMyPanel;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{ TMyPanel }

constructor TMyPanel.Create(AOwner: TComponent);
begin
  inherited;
  Color := clYellow;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MyPanel := TMyPanel.Create(self);
  MyPanel.Parent := self;
  MyPanel.Left := 10;
  MyPanel.Top := 10;
  MyPanel.Caption := 'This is MyPanel';
end;

end.


るるとん@K  2004-04-27 07:26:04  No: 8692

それなら分かっています
やっぱ無理ですね
Frameでやってみます


jok  2004-04-27 07:39:33  No: 8693

> それなら分かっています

じゃあ、何が分からなかったんですか?

> Frameでやってみます

TFrame でも TPanel の派生クラスはできませんよ。
なにをやってみるんですか? 結果をお願いしますね。


jok  2004-04-27 07:39:33  No: 8694

> それなら分かっています

じゃあ、何が分からなかったんですか?

> Frameでやってみます

TFrame でも TPanel の派生クラスはできませんよ。
なにをやってみるんですか? 結果をお願いしますね。


jok  2004-04-27 07:57:12  No: 8695

なんどもすみません。

やりたいことは、Panel1 にボタンやらエディットやらを置いて自動的に派生クラスをつくる、
というようなことだと思いあたりました。それならできません。


ふー  2004-04-27 08:34:56  No: 8696

>それなら分かっています
>やっぱ無理ですね
>Frameでやってみます

礼も言わない、
ソース提示してくれた人に対して
唾吐きかけるかのようですね。


jok  2004-04-27 09:04:40  No: 8697

RAD では、形式上ユニットファイルに TForm の派生クラスをつくりますが、置かれた
コンポーネントの位置や、オブジェクトインスペクタでの設定やイベントハンドラの
関連づけは *.dfm ファイルに書かれます。ですから、ユニットファイルのコード
だけでは、TForm の派生クラスとしては不完全です。RAD では、ストリーミングで
*.dfm ファイルを実行時に読み出すことで、TForm の派生クラスに対してだけ、
特別扱いしているんですね。他のコンポーネントについても同じことをしようとすると、
Delphi の IDE をもう一つつくるくらい大変でしょう。


るるとん@K  2004-04-27 22:19:29  No: 8698

そうですね
ありがとうございましたn(__)n


jok  2004-04-28 00:01:52  No: 8699

> Frameでやってみます

これは、何をどうやってみて、結果はどうでしたか?


るるとん@K  2004-04-28 00:11:54  No: 8700

複数のプロゼクトで同じPageCntorolのページを使おうと思いました
まぁ手段はいろいろあるでしょう
手動?で作るのがめんどくさかったので。。


take  2004-04-28 01:22:29  No: 8701

フレームの新規作成で作ったものをUnit2として保存
メインユニットのUnit1にページコントロールを置いてページをいくつか作って

下記のように記述するとページ毎にRAD編集できてソースがスッキリする
ということではないでしょうか?
TPageから継承して作るとLeftとか自力ですからね

この方法、前に使おうと思っていたのですが
どうも思い通り行かないことがあって結局自分で書いたことがあります。
理由は何だったっけなぁ思い出せない・・・

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
    FFlame : TFrame2;
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FFlame := TFrame2.Create(Self);
  FFlame.Parent := TabSheet2;
end;


るるとん@K  2004-04-28 01:42:53  No: 8702

takeさんありがとうございます
FrameののったTabSheetをクラスにしてみます


るるとん@K  2004-04-28 01:51:30  No: 8703

>FrameののったTabSheetをクラスにしてみます
Frameを指定するプロパティとかを用意するわけです


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加