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を代入するという事が行われているのでしょうか?
単に記述者が理解不足で間違っているテクニックなのでしょうか?
それとも理由があって代入されているのかな?
代入してメモリリークなどの問題のないものなんですか?
詳しく理解できてないので疑問に思っています。
教えていただければと思います。
よろしくお願いします。
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;
こういうことだからかな。
TCanvas.Fontに代入すること、ってのが
内部的に所有しているFFontにAssignしていることに
なるんですか!!!
驚きました。
VCLソースを見逃してました。
ありがとうございます。
大変勉強になりました。
ツイート | ![]() |