A
Archerfl
Unregistered / Unconfirmed
GUEST, unregistred user!
我的代码如下:
procedure TForm1.Button3Click(Sender: TObject);
var
FontRecall : TFontRecall;
begin
FontRecall := TFontRecall.Create( Canvas.Font );
try
Canvas.Font.Size := 16;
Canvas.TextOut(5,5,'Hello World');
Canvas.Font.Assign(FontRecall.Reference);
if Canvas.Font.Size = 16 then
ShowMessage('16')
else
ShowMessage(IntToStr(Canvas.Font.Size));
finally
FontRecall.Free;
end;
if Canvas.Font.Size = 16 then
ShowMessage('16')
else
ShowMessage(IntToStr(Canvas.Font.Size));
end;
代码中声明了一个TFontRecall类型的实例FontRecall,初始想法是让它记住改变窗体画布的
字体特性前该特性的状态(初始情况下Canvas.Font.Size = 8),然而在这一句Canvas.Font.Assign(FontRecall.Reference);
之后的ShowMessage中显示为16,显然这一句并没有获复初始值8,然后在try..finally..end.
块后再测试发现ShowMessage确显示为初始值8啦!
但是,我看了一下TRecall的源码封装情况,发现它提供出来的一个属性Reference仅对于的是
它最初引用且希望保存其值的那个对象而言,那么当你修改Canvas.Font.Size值时Reference也
会跟着改变,所以第一次测试时显示16当属正常,但为什么在第二次中显示确为初始值8呢?难
道是这一句FontRecall.Free。可是这一句又怎么会影响到当前Canvas.Font.Size的特性值呢?
望各位高手指点!谢!
procedure TForm1.Button3Click(Sender: TObject);
var
FontRecall : TFontRecall;
begin
FontRecall := TFontRecall.Create( Canvas.Font );
try
Canvas.Font.Size := 16;
Canvas.TextOut(5,5,'Hello World');
Canvas.Font.Assign(FontRecall.Reference);
if Canvas.Font.Size = 16 then
ShowMessage('16')
else
ShowMessage(IntToStr(Canvas.Font.Size));
finally
FontRecall.Free;
end;
if Canvas.Font.Size = 16 then
ShowMessage('16')
else
ShowMessage(IntToStr(Canvas.Font.Size));
end;
代码中声明了一个TFontRecall类型的实例FontRecall,初始想法是让它记住改变窗体画布的
字体特性前该特性的状态(初始情况下Canvas.Font.Size = 8),然而在这一句Canvas.Font.Assign(FontRecall.Reference);
之后的ShowMessage中显示为16,显然这一句并没有获复初始值8,然后在try..finally..end.
块后再测试发现ShowMessage确显示为初始值8啦!
但是,我看了一下TRecall的源码封装情况,发现它提供出来的一个属性Reference仅对于的是
它最初引用且希望保存其值的那个对象而言,那么当你修改Canvas.Font.Size值时Reference也
会跟着改变,所以第一次测试时显示16当属正常,但为什么在第二次中显示确为初始值8呢?难
道是这一句FontRecall.Free。可是这一句又怎么会影响到当前Canvas.Font.Size的特性值呢?
望各位高手指点!谢!