タイトルが変ですが、
DelphiのRADツールでTPanelやら何やらのTWinControlの継承クラスを継承したクラスを作成できますか?
RADでは無理です。
TFrameか、TFormの継承クラスであればできますが。
そうですね
出来れば便利なのに... と、思うのは私だけ?
[RADで自動的に] という意味ならできませんが、コードエディタに
派生クラスを宣言実装することはもちろんできますよ。
>[RADで自動的に] という意味ならできませんが、コードエディタに
>派生クラスを宣言実装することはもちろんできますよ。
TForm1=Class(TForm)とかを、変更するんですか?
こんな感じです。デフォルトで黄色いパネルをつくります。
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.
それなら分かっています
やっぱ無理ですね
Frameでやってみます
> それなら分かっています
じゃあ、何が分からなかったんですか?
> Frameでやってみます
TFrame でも TPanel の派生クラスはできませんよ。
なにをやってみるんですか? 結果をお願いしますね。
> それなら分かっています
じゃあ、何が分からなかったんですか?
> Frameでやってみます
TFrame でも TPanel の派生クラスはできませんよ。
なにをやってみるんですか? 結果をお願いしますね。
なんどもすみません。
やりたいことは、Panel1 にボタンやらエディットやらを置いて自動的に派生クラスをつくる、
というようなことだと思いあたりました。それならできません。
>それなら分かっています
>やっぱ無理ですね
>Frameでやってみます
礼も言わない、
ソース提示してくれた人に対して
唾吐きかけるかのようですね。
RAD では、形式上ユニットファイルに TForm の派生クラスをつくりますが、置かれた
コンポーネントの位置や、オブジェクトインスペクタでの設定やイベントハンドラの
関連づけは *.dfm ファイルに書かれます。ですから、ユニットファイルのコード
だけでは、TForm の派生クラスとしては不完全です。RAD では、ストリーミングで
*.dfm ファイルを実行時に読み出すことで、TForm の派生クラスに対してだけ、
特別扱いしているんですね。他のコンポーネントについても同じことをしようとすると、
Delphi の IDE をもう一つつくるくらい大変でしょう。
そうですね
ありがとうございましたn(__)n
> Frameでやってみます
これは、何をどうやってみて、結果はどうでしたか?
複数のプロゼクトで同じPageCntorolのページを使おうと思いました
まぁ手段はいろいろあるでしょう
手動?で作るのがめんどくさかったので。。
フレームの新規作成で作ったものを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;
takeさんありがとうございます
FrameののったTabSheetをクラスにしてみます
>FrameののったTabSheetをクラスにしてみます
Frameを指定するプロパティとかを用意するわけです
ツイート | ![]() |