自作コンポーネントにFontプロパティを追加しましたが、
プログラムを実行するときにオブジェクトインスペクタで設定した
設定が反映されません。どうすればよいのでしょうか。
コンポーネントのconstructorで
FFont := TFont.Create;
とするので反映されないのはあたりまえのような気もするのですが...
> コンポーネントのconstructorで
> FFont := TFont.Create;
> とするので反映されないのはあたりまえのような気もするのですが
たぶん、「作成時にオブジェクトインスペクタで指定した値を入れていないから反映されないのは当たり前」と思っていらっしゃるのでしょうが、違います。
コンポーネントは、Createされた後にオブジェクトインスペクタでの値を設定します。
Fontプロパティの設定はどうやっていますか?
ちょっと言葉足らずですね。
申し訳ない。
> Fontプロパティの設定はどうやっていますか?
今回の場合、propertyの定義中writeに指定するのはプロシージャです。
コンポーネントに
procedure SetFont(Value: TFont);
というようなものを用意し、
procedure TMyComponent.SetFont(Value: TFont);
begin
FFont.Assign(Value);
// Refresh;{ 表示し直すなら必要 }
end;
とすればOKだと思うのですが、そうしていますか?
ちなみに、:=で代入しても駄目です。
>procedure TMyComponent.SetFont(Value: TFont);
>begin
> FFont.Assign(Value);
> Canvas.Font.Assign(FFont);
> Refresh;
>end;
としているのですが、コンポーネントを設定している時は更新されるのですが、
実行時には設定値が反映されません。
コンポーネントがどういうものかわからないので、推測です。
反映されていないという確認はどうしました?
Fontプロパティの値を見て確認していますか?
描画のみで確認しているのであれば、デバッガのインスペクタなどで確認してみてください。
描画で使うとき、Canvas.Font.Assign(FFont)してから使っていますよね?
>描画で使うとき、Canvas.Font.Assign(FFont)してから使っていますよね?
この行をいつの間にかコメントアウトしていました。恥ずかしいです。
ご丁寧にありがとうございました。
ツイート | ![]() |