我想为TFont增加Width属性,该怎么做呢?(50分)

  • 主题发起人 mylai911
  • 开始时间
M

mylai911

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是C++ Builder5,其中的字体都是用比例字体,我想为TFont增加Width属性,
以便可以把字体变长,该怎么加?我试了改graphics.pas和graphics.hpp两个文件,
却没起作用,该怎么做呢?请说详细一点,特别是.pas文件的编译我一点都不会:p
 
第1种方法、直接把pas加入到你的project里面
 
第2种方法, 编译出来的obj文件,用tlib程序,加入到lib/release/和lib/debug里面的vcl50.lib里面去
 
请pipi说详细一点,用什么把.pas编译成.obj文件?
 
把pas加入你的project,他就会编译出obj文件了
 
编成了obj文件,用tlib ../lib/debug/vcl50.lib -+ c:/graphics.obj后运行提示
SetWidth(新加的)找不到。
急需解决,能否给你的QQ或email我,电话也行
asiaboy@163.com
QQ:6260618
13086760803
 
你用了debug下面的,你的project的link属性是选择link with debug library吗
否则的话,要加到release下面的去
最简单的还是把obj或者修改之后的pas直接加入你的project就可以了
------------------------------------
不过想到一个问题!你添加了属性之后,TFont的实例大小变了,其它引用了它的
可能会出错。看来有点麻烦
 
怎么可能?除非你用逻辑字体!
BORLAND 的产品用的都是 FONT-PICTH = FIXED_PITCH
以前我打印时为打印出长宋体(simsun 拉长)一直用的
是 CreateFont(),好象从来没有用过能够直接设置的。
关注!
 
ddev:
其实我也是要打印长型的字体,我也用了逻辑字体,在预览中已看到自体变成长的了,
但打印出来却是比例字体。
下面程序:C++ Builder

#include <vcl.h>
#pragma hdrstop
#include <printers.hpp>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Graphics::TFont *tf;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TPrinter *Prntr = Printer();
tf=new Graphics::TFont;
tf->Assign(Form1->Font);
PLOGFONT plf = (PLOGFONT) LocalAlloc(LPTR, sizeof(LOGFONT));
GetObject(tf->Handle,sizeof(plf),plf);
plf->lfHeight=-29;
plf->lfWidth=8;
tf->Handle=CreateFontIndirect(plf);
Prntr->Title="打印测试";
Prntr->begin
Doc();
Prntr->Canvas->Font->Assign(tf);
Prntr->Canvas->TextOut(25,25,"打印测试");
Prntr->Canvas->TextOut(25,125,"1234567890.tt");
Prntr->Canvas->TextOut(25,225,"abcdefghijklmnopqrstuvwxyz");
Prntr->EndDoc();
tf->Free();
}
//---------------------------------------------------------------------------
该程序照理是可以打印出长型的字体的,但是打印出来后却是标准的比例字体,为什么?
 
多人接受答案了。
 
不想你这么执着, 非法添两句吧:
你的代码没问题,关键是:
既然你创建了 LogFont, 为什么不选入设备情境?
hf = CreateFontIndirect(lf);
SelectObject(Canvas.Handle, hf);
..//draw-test
DeleteObject(hf);
 
问题我以解决了,要谢谢你们哦:)
我原来的代码没问题,我看了一下printers.pas,它会调用update涵数,会自动设置字体的高
,然后字体就会变成正常的比例字体。解决办法是把printer->Canvax的分辨率改称与打印机
的分辨率一样,打印出来就是长兴的了。
 
顶部