TGraphicControlの継承コンポーネントを作成するには

解決


pain  2003-03-10 22:14:46  No: 3119

TGraphicControlの継承コンポーネントを作成しているのですが、何も表示されません。どこが悪いのでしょうか。(長文)

フォームの上でマウスをクリックするとそこに四角を表示するプログラムです。

type
    TCustomCnp = class(TGraphicControl)
        private
        protected
           procedure Paint; override;
        public
            constructor Create(AOwner: TComponent); override;
        end;

implementation
constructor TCustomCnp.Create(AOwner: TComponent);
begin
  inherited  Create(AOwner);
end;

procedure TCustomCnp.Paint;
begin
      Canvas.Rectangle(10,10,100,100);
end;

動的にコンポーネントを生成
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
    newCnp: TControl;
begin
    newCnp := TCustomCnp.Create(Form1);
    newCnp.Parent := Form1;
    newCnp.Left := X;
    newCnp.Top := Y;
    newCnp.Visible := True;
end;


たかみちえ  URL  2003-03-10 23:21:16  No: 3120

動的に生成したコンポーネントは、最初サイズ0で生成されるようですよ。

  あと、問題とは直接関係ありませんけど、
>??????Canvas.Rectangle(10,10,100,100);
  この部分、数値をじかに入れるのではなく、
ちゃんとWidthなどから計算してやったほうがいいと思いますよ。
そのほうが汎用性がありますし。

  あとは、上のままでは、色を指定してないので、四角を書くペンの色が予想できないということです。


pain  2003-03-11 07:20:28  No: 3121

>動的に生成したコンポーネントは、最初サイズ0で生成されるようですよ。
なるほど。
    newCnp.Width := 300;
    newCnp.Height := 300;
を付け加えたらうまくいきました。
ありがとうございました。

>>??????Canvas.Rectangle(10,10,100,100);
>  この部分、数値をじかに入れるのではなく、
>ちゃんとWidthなどから計算してやったほうがいいと思いますよ。
>そのほうが汎用性がありますし。
あくまでも例と言うことで...


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

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






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