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;
動的に生成したコンポーネントは、最初サイズ0で生成されるようですよ。
あと、問題とは直接関係ありませんけど、
>??????Canvas.Rectangle(10,10,100,100);
この部分、数値をじかに入れるのではなく、
ちゃんとWidthなどから計算してやったほうがいいと思いますよ。
そのほうが汎用性がありますし。
あとは、上のままでは、色を指定してないので、四角を書くペンの色が予想できないということです。
>動的に生成したコンポーネントは、最初サイズ0で生成されるようですよ。
なるほど。
newCnp.Width := 300;
newCnp.Height := 300;
を付け加えたらうまくいきました。
ありがとうございました。
>>??????Canvas.Rectangle(10,10,100,100);
> この部分、数値をじかに入れるのではなく、
>ちゃんとWidthなどから計算してやったほうがいいと思いますよ。
>そのほうが汎用性がありますし。
あくまでも例と言うことで...
ツイート | ![]() |