Fontの代入について

解決


Fusa  URL  2008-01-20 19:59:43  No: 29404

GetDCやCanvasなどについて調べているときに
疑問に思う事に遭遇しました。

いくつかのネットでみかけるソースの中に
フォントの属性をコピーしたい場合に
Font1.Assign(Font2);
このようにするのではなく

Font1 := Font2;
というようにしているものがあります。

サンプル: "TMemoのキャレット位置を表示"
http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/samples/00481.html
> Form1.Font := Memo1.Font;

N.E.SITE - Delphi 工房 - Tips - コンボボックスのリストの幅の調整
http://www.din.or.jp/~egawa-n/delphi/tips/combo_list_width.html
> TComboBox(Sender).Canvas.Font := TComboBox(Sender).Font;

Delphi Edit1.Widthを自動調整 -OKWave
http://okwave.jp/qa3245748.html
> Form1.Canvas.Font:=Edit1.Font;

セルの幅を文字列に合わせよう
http://hp.vector.co.jp/authors/VA015850/delphi/tips/grid02.html
> TStringGridEx.Canvas.Font := TStringGridEx.Font

私の理解としては
インスタンスをコピーするには?
https://www.petitmonte.com/bbs/answers?question_id=4759
ここの最後の所に書いた通りです

なぜ、Fontを代入するという事が行われているのでしょうか?
単に記述者が理解不足で間違っているテクニックなのでしょうか?
それとも理由があって代入されているのかな?

代入してメモリリークなどの問題のないものなんですか?

詳しく理解できてないので疑問に思っています。
教えていただければと思います。
よろしくお願いします。


風来坊  2008-01-20 22:45:20  No: 29405

TCanvas = class(TPersistent)
private
  FFont: TFont;
  procedure SetFont(Value: TFont);
published
  property Font: TFont read FFont write SetFont;
end;

procedure TCanvas.SetFont(Value: TFont);
begin
  FFont.Assign(Value);
end;

こういうことだからかな。


Fusa  2008-01-21 09:32:08  No: 29406

TCanvas.Fontに代入すること、ってのが
内部的に所有しているFFontにAssignしていることに
なるんですか!!!

驚きました。

VCLソースを見逃してました。
ありがとうございます。
大変勉強になりました。


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

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






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