A
aizb
Unregistered / Unconfirmed
GUEST, unregistred user!
为了在没有中文平台的英文版中显示中文,特地写了如下的一段程序:<br>//系统中已有936代码页文件,注册表中也已经有相关的值。<br>//系统中已经安装了中文宋体字库。<br>//系统版本是英文WIndows98第二版。<br><br>//为什么DrawTextW函数不起作用。而TextOutW函数确可以起作用。<br><br>unit Unit1;<br><br>interface<br><br>uses<br> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br> Dialogs, ExtCtrls, StdCtrls;<br><br>type<br> TForm1 = class(TForm)<br> Button1: TButton;<br> Image1: TImage;<br> procedure Button1Click(Sender: TObject);<br> private<br> { Private declarations }<br> public<br> { Public declarations }<br> end;<br><br>var<br> Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>procedure AiOutText(Canvas:TCanvas; x,y:integer; GB:string;R:TRect);<br>var WWideChar;<br> GBlength, WSize:integer;<br>begin<br> GBLength:=Length(GB);<br><br> WSize:=GBlength*2+2;<br> W:=AllocMem(WSize);<br> try<br> MultiByteToWideChar(936,0,PChar(GB),GBLength,W,WSize);<br><br> GBlength:=LStrLenW(W);<br> TextOutW(Canvas.Handle, R.Left,R.Top,W,GBlength);<br> R.Top:=R.Top+40;<br> DrawTextW(Canvas.Handle,W,GBlength,R,DT_LEFT);<br> //本来想在TextOutW输出的位置的下面40Y偏移用DrawTextW输出另一行。但是没有任何输出。<br> //也就是说这个函数根本没有起到作用。<br> //TextOutW和DrawTextW在使用上有什么大的区别吗?我需要DrawTextW的最后两个参数。<br> finally<br> FreeMem(W, WSize);<br> end;<br>end;<br><br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var s:String;<br>begin<br> s:='<a href="listroom.asp">问题分类</a>';<br> Canvas.Font.Size:=16;<br> Canvas.Font.Name:='MS Song';<br> Canvas.Font.Charset:=GB2312_CHARSET;<br> AiOutText(Canvas,0,0,s,ClientRect);<br>end;<br><br>end.