关于 DrawText 竖向显示文本的问题,请赐教! ( 积分: 50 )

  • 主题发起人 主题发起人 qylin1
  • 开始时间 开始时间
Q

qylin1

Unregistered / Unconfirmed
GUEST, unregistred user!
我想要在 Canvas 上用 DrawText 来竖向显示文本,我的代码如下:<br><br>With Canvas Do<br>Begin<br> &nbsp; // 旋转 90 度显示 Caption<br> &nbsp; &nbsp;SaveFont := TFont.Create;<br> &nbsp; &nbsp;SaveFont.Assign(Font);<br> &nbsp; &nbsp;GetObject(SaveFont.Handle, sizeof(LogFont), @LogFont);<br> &nbsp; &nbsp;With LogFont do<br> &nbsp; &nbsp;Begin<br> &nbsp; &nbsp; &nbsp;lfEscapement := 900;<br> &nbsp; &nbsp; &nbsp;lfPitchAndFamily := FIXED_PITCH or FF_DONTCARE;<br> &nbsp; &nbsp;End;<br> &nbsp; &nbsp;Font.Handle := CreateFontIndirect(LogFont);<br> &nbsp; &nbsp;SetBkMode(Handle, TRANSPARENT);<br><br> &nbsp; &nbsp;Brush.Style := bsClear;<br> &nbsp; &nbsp;R := Rect(1, 1, Width - 1, Height -1) ;<br> &nbsp; &nbsp;DrawText(Handle, PChar(Caption), Length(Caption), R, DT_WORD_ELLIPSIS) ;<br><br> &nbsp; &nbsp;Font.Assign(SaveFont);<br> &nbsp; &nbsp;SaveFont.Free;<br>End ;<br><br>我试过用 TextRect 是可以实现的,但我运行上面代码时,Canvas 上是一片空白,什么也没显示,小弟不才,搞了一天也没办法搞定,因为我这里一定要用 DrawText,有请各位高手赐教赐教,谢谢!
 
我想要在 Canvas 上用 DrawText 来竖向显示文本,我的代码如下:<br><br>With Canvas Do<br>Begin<br> &nbsp; // 旋转 90 度显示 Caption<br> &nbsp; &nbsp;SaveFont := TFont.Create;<br> &nbsp; &nbsp;SaveFont.Assign(Font);<br> &nbsp; &nbsp;GetObject(SaveFont.Handle, sizeof(LogFont), @LogFont);<br> &nbsp; &nbsp;With LogFont do<br> &nbsp; &nbsp;Begin<br> &nbsp; &nbsp; &nbsp;lfEscapement := 900;<br> &nbsp; &nbsp; &nbsp;lfPitchAndFamily := FIXED_PITCH or FF_DONTCARE;<br> &nbsp; &nbsp;End;<br> &nbsp; &nbsp;Font.Handle := CreateFontIndirect(LogFont);<br> &nbsp; &nbsp;SetBkMode(Handle, TRANSPARENT);<br><br> &nbsp; &nbsp;Brush.Style := bsClear;<br> &nbsp; &nbsp;R := Rect(1, 1, Width - 1, Height -1) ;<br> &nbsp; &nbsp;DrawText(Handle, PChar(Caption), Length(Caption), R, DT_WORD_ELLIPSIS) ;<br><br> &nbsp; &nbsp;Font.Assign(SaveFont);<br> &nbsp; &nbsp;SaveFont.Free;<br>End ;<br><br>我试过用 TextRect 是可以实现的,但我运行上面代码时,Canvas 上是一片空白,什么也没显示,小弟不才,搞了一天也没办法搞定,因为我这里一定要用 DrawText,有请各位高手赐教赐教,谢谢!
 
1、DrawText(Handle, PChar(Caption), Length(Caption), R, DT_WORD_ELLIPSIS)<br>这句改成<br>DrawText(Handle, PChar(Caption), Length(Caption), R, DT_CENTER or DT_VCENTER or DT_SINGLELINE or DT_WORD_ELLIPSIS);<br>另外 DT_WORD_ELLIPSIS 不是把字符串以椭圆形排列,它只是截去不符合矩形规范的字体,用的很少,我不知道你非要用它干吗,费解。<br>2、GetObject(SaveFont.Handle, SizeOf(LogFont), @LogFont) <br>这句改成<br>GetObject(Font.Handle, SizeOf(LogFont), @LogFont)<br>不过这条并不重要。
 
TO: vvyang<br> &nbsp; 我按照你的改动测试了,文本是可以显示出来来,但是却没办法控制文本的对齐呀!<br> &nbsp; 比如:我要文本竖向显示的时候是显示在 Rect 框的下方,那该怎么做?谢了
 
1、早说是显示在 Rect 下方啊:<br>R := Rect(1, 1, Width - 1, Height - 30);<br>DrawText(Handle, PChar(Caption), Length(Caption), R, DT_CENTER or DT_BOTTOM or DT_SINGLELINE);<br>2、注意调整 Rect 的范围以让字符能有足够的空间显示出来,DT_CENTER 是控制是文本水平居中,不需要可以去掉。至于那个 DT_WORD_ELLIPSIS,没的说,删。
 
大哥呀,我按你的方法又测试了,还是不行呀,要么没显示,要么显示不全,怎么办,再帮帮忙吧!
 
显示不全不就是显示了么!你调整 Rect 的范围了么,要给字符串留出足够的地方,字符串是向矩形里面画的!!<br>R := Rect(1, 1, 200, 200);
 
一个一个字的显示
 
多人接受答案了。
 
后退
顶部