菜鸟求教,少分小问题。(10分)

  • 主题发起人 主题发起人 JackKen
  • 开始时间 开始时间
J

JackKen

Unregistered / Unconfirmed
GUEST, unregistred user!
var
F1:TFont;
F2:TFont;
procedure TForm1.Button1Click(Sender: TObject);
begin
FontDialog1.Execute;
F1:=TFont.Create;
F1:=FontDialog1.Font;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
FontDialog1.Execute;
F2:=TFont.Create;
F2:=FontDialog1.Font;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Canvas.Font:=F1;
Canvas.TextOut(0,0,'Go!Go!Go!');
Form1.Canvas.Font:=F2;
Canvas.TextOut(0,50,'Go!Go!Go!');
end;
不知为何,输出时总是按F2的设定输出,F1不起作用。即不论Button1时如何设定字体,输出时两句话的字体颜色等属性都是F2的。请各位指教。
 
TFont 不能直接用 = 的
F1:=TFont.Create;
//创建了注意要释放
if FontDialog1.Execute then
F1.Assign(FontDialog1.Font);
Form1.Canvas.Font.Assign(F1);
Canvas.TextOut(0,0,'Go!Go!Go!');
Form1.Canvas.Font.Assign(F2);
Canvas.TextOut(0,50,'Go!Go!Go!');
 
你用F1:=FontDialog1.Font;,实际上只是把F1指向了FontDialog1的Font的内存地址
所以当FontDialog1的Font改变时F1也改变了,所以按你的写法F1永远等于F2
用F1.Assign(FontDialog1.Font);就可以了
 
同意,TFont下还有很多的类别,不能就这样等于。
 
楼上仁兄,我的想法是
F1.Create后就分配了空间,应该能保存数据。我试过其他对象好像都可以这样操作。是Font较特殊吗。还是我根本进入了一个误区。
 
F1:=TFont.Create;
if FontDialog1.Execute then
// F1.Assign(FontDialog1.Font);
F1 := FontDialog1.Font;
F1.Style := F1.Style + [fsBOLD];
在字体选择框中不要选中粗体,执行完上面这一段后再执行
FontDialog1.Execute
你就会看到字体选择框中粗体被选上了,F1做为一个指针,指向了FontDialog1.Font,它们是一块的。
使用Assign将为F1赋值一个FontDialog1.Font的一个拷贝。
 
画布canvas只能保存一种字体
在你赋与Form1.Canvas.Font:=F2时
先前写进入的字体就被变化了
所以你都是显示第二种字体
 
在问各位高手,是不是其他有关的对象都赋值都不能用:=,而应该用Assign。照一些仁兄的讲法,即使是Create后,都还是一个指针,那到底应怎样为一个对象分配内存空间。我越来越糊涂了。请各位仁兄赐教。
 
多人接受答案了。
 
后退
顶部