如何确定一个字符串在某个DC上输出时的长度(有中文)(100分)

  • 主题发起人 主题发起人 TOTO
  • 开始时间 开始时间
T

TOTO

Unregistered / Unconfirmed
GUEST, unregistred user!
SelectObject(DC, Font)<br>GetTextExtentPoint32W(DC, PChar, PCharLen, TSize);<br>这个函数总是返回一些莫名其妙的值。<br>看到Delphi TCanvas类中的代码,好像还创建了Handle, Fonnt, Pen, Brush<br>小弟对Windows的SDK不熟,不知道为什么这样。<br>我也照样创建了一堆,怎么何这个DC挂上?(我是在Delphi 中创建的TFont<br>, TPen, TBrush)<br><br><br>我的意思是要得到这个字符串在一个Memo上的长度,准备把太长的折行<br><br>谢谢!!!<br><br>
 
var acanvas:TCanvas;<br>acanvas:=TCanvas.create;<br>acanvas.handle:=DC &nbsp; //你得到的dC<br>acanvas.textheight('asdf');<br>acanvas.textwidth('asdfasdf');<br><br>
 
如果你为了折行显示可以用drawtext这个api函数。
 
SelectObject 之前, Font要创建. DC也要创建.<br><br>如果你想用DC的方法得到这个字符串在一个Memo上的长度可以这样.<br><br>fucntion GetStrWidth(str : string):Integer;<br>var<br>&nbsp; TempCanvas : TCanvas;<br>&nbsp; DC : hDC;<br>begin<br>&nbsp; DC := GetDC (Memo1.Handle);<br>&nbsp; TempCanvas := TCanvas.Create;<br>&nbsp; TempCanvas.Handle := DC;<br>&nbsp; Result := TempCanvas.TextWidth(Str);<br>&nbsp; TempCanvas.Free;<br>&nbsp; ReleaseDC (Memo1.Handle, DC);<br><br>end;
 
TOTO ----名牌马桶!<br>我最近刚做完一卖TOTO的销售软件
 
function GetSize(const YourString:String):Integer;<br>begin<br>&nbsp; with TLabel.Create(nil) do<br>&nbsp; begin<br>&nbsp; &nbsp; &nbsp;AutoSize:=True;<br>&nbsp; &nbsp; &nbsp;Font:=Memo1.Font;<br>&nbsp; &nbsp; &nbsp;Caption:=YourString; &nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp;Result:=Width;<br>&nbsp; &nbsp; &nbsp;Free;<br>&nbsp; end;<br>end;<br><br>&lt;a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=167142" target="_blank"&gt;参看这里&lt;/a&gt;<br>和<br>&lt;a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=166687" target="_blank"&gt;这里&lt;/a&gt;<br>
 
前两天,好慢。本来是我第一个看到的,但贴帖子贴了20遍,都没成<br>让你们抢先了。heng!! :)
 
我也贴了20遍,就是贴不上去,老是超时.最后我把显示图象关掉才贴上去了.
 
www,你好玩赖,hehe
 
呵呵,,这不是玩赖,这叫技巧.
 
我帖了21遍。
 
多人接受答案了。
 
后退
顶部