自作コンポーネントにFontプロパティを追加

解決


pain  2002-12-09 15:39:06  No: 2288  IP: 192.*.*.*

自作コンポーネントにFontプロパティを追加しましたが、
プログラムを実行するときにオブジェクトインスペクタで設定した
設定が反映されません。どうすればよいのでしょうか。
コンポーネントのconstructorで
  FFont := TFont.Create;
とするので反映されないのはあたりまえのような気もするのですが...

編集 削除
にしの  2002-12-09 16:31:59  No: 2289  IP: 192.*.*.*

> コンポーネントのconstructorで
>   FFont := TFont.Create;
> とするので反映されないのはあたりまえのような気もするのですが
たぶん、「作成時にオブジェクトインスペクタで指定した値を入れていないから反映されないのは当たり前」と思っていらっしゃるのでしょうが、違います。
コンポーネントは、Createされた後にオブジェクトインスペクタでの値を設定します。
Fontプロパティの設定はどうやっていますか?

編集 削除
にしの  2002-12-09 16:36:34  No: 2290  IP: 192.*.*.*

ちょっと言葉足らずですね。
申し訳ない。
> Fontプロパティの設定はどうやっていますか?

今回の場合、propertyの定義中writeに指定するのはプロシージャです。
コンポーネントに
procedure SetFont(Value: TFont);
というようなものを用意し、
procedure TMyComponent.SetFont(Value: TFont);
begin
  FFont.Assign(Value);
  // Refresh;{ 表示し直すなら必要 }
end;
とすればOKだと思うのですが、そうしていますか?

ちなみに、:=で代入しても駄目です。

編集 削除
pain  2002-12-13 14:58:47  No: 2291  IP: 192.*.*.*

>procedure TMyComponent.SetFont(Value: TFont);
>begin
>  FFont.Assign(Value);
>  Canvas.Font.Assign(FFont);
>  Refresh;
>end;
としているのですが、コンポーネントを設定している時は更新されるのですが、
実行時には設定値が反映されません。

編集 削除
にしの  2002-12-13 16:39:46  No: 2292  IP: 192.*.*.*

コンポーネントがどういうものかわからないので、推測です。

反映されていないという確認はどうしました?
Fontプロパティの値を見て確認していますか?

描画のみで確認しているのであれば、デバッガのインスペクタなどで確認してみてください。
描画で使うとき、Canvas.Font.Assign(FFont)してから使っていますよね?

編集 削除
pain  2002-12-13 19:34:44  No: 2293  IP: 192.*.*.*

>描画で使うとき、Canvas.Font.Assign(FFont)してから使っていますよね?
この行をいつの間にかコメントアウトしていました。恥ずかしいです。
ご丁寧にありがとうございました。

編集 削除