请教一个简单的WinApi用法(100分)

  • 主题发起人 主题发起人 water
  • 开始时间 开始时间
W

water

Unregistered / Unconfirmed
GUEST, unregistred user!
&nbsp;我写的一个控件中在Paint事件里有如下语句:<br><br>ExtTextOut(aCanvas.Handle, tLeft, tTop, ETO_OPAQUE, @aRect, @aText[1],Length(aText), nil);<br><br>但发现用ExtTextOut画上去字体无论我设成什么颜色,它都画成黑色,请问<br>我该如何能画出自已想要的颜色呢?当然前提是仍然使用ExtTextOut函数,<br>请指教!<br><br>
 
acanvas.font.color:=clred;
 
与api无关的,你只要设置canvas的font的颜色就行了。
 
另外你的用法不对。<br>ExtTextOut(aCanvas.Handle, tLeft, tTop, ETO_OPAQUE, @aRect, @aText[1],Length(aText), nil);<br><br>aText是什么类型的??<br><br>如果<br>var aText:string;<br>ExtTextOut(aCanvas.Handle, tLeft, tTop, ETO_OPAQUE, @aRect, pchar(aText[1]),Length(aText), nil);<br>
 
不是吧?<br>如果你用windows中的textout函数,是要先创建font对象才能改变颜色的。就如我前面的问题---怎么用canvas.pen来代替在使用anglearc前要创建的pen一样。应该有个什么关联方法才能通过canvas.font来改变的。
 
acanvas.Font.Color:=clred;<br>ExtTextOut(aCanvas.Handle, tLeft, tTop, ETO_OPAQUE, @aRect, @aText[1],Length(aText), nil);<br><br>
 
(苦笑),WWW老兄,我还不至于如此弱智,若是设aCanvas.Font.Color可以我也<br>不会来问了。你还是先去研究一下Win32SDK吧。<br>
 
to water:<br>&nbsp; 不信你可以试一下:<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var arect:trect;<br>&nbsp; &nbsp; atext:string;<br>begin<br>&nbsp; arect:=rect(100,40,150,150);<br>&nbsp; atext:='asdfasdf';<br>&nbsp; canvas.font.color:=clred;<br><br>&nbsp;ExtTextOut(canvas.Handle, 101, 41, ETO_OPAQUE, @aRect, pchar(aText),Length(aText), nil);<br>end;<br>
 
哪顺便问一下,为什么这句就画不出来?<br>&nbsp; windows.AngleArc(canvas.Handle,100,100,100,45,45);
 
我在VC下是用CDC类中的settextcolor;<br>在Delphi中也有相应的SDK;<br>COLORREF SetTextColor(<br><br>&nbsp; &nbsp; HDC hdc, // 设备上下文的指针<br>&nbsp; &nbsp; COLORREF crColor // 颜色 <br>&nbsp; );<br>例子:<br>蓝低红字:<br>settextcolor(cancas.Handle,RGB(255,0,0));<br>SetBkColor(cancas.Handle,RGB(0,0,255));<br>ExtTextOut(.......<br>试试看!
 
呵呵,<br>&nbsp; &nbsp; 大家可别只记得用VCL而忘了API的使用了。<br>&nbsp; &nbsp; <br>ExtTextOut是条API,<br>&nbsp; &nbsp;其中ETO_OPAQUE参数表示: <br>&nbsp; &nbsp; The current background color should be used to fill the rectangle.<br><br>如Crane所说,<br>可用settextcolor和SetBkColor改变颜色。<br><br><br><br>
 
呵呵,settextcolor不行吧。设置canvas.font.color可以啊,试一下,难到你们没看到红色吗?
 
settextcolor与canvas.font.color都可以实现,只不过参数应注意,请看如下程序<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; DC:HDC;<br>&nbsp; rc:TRect;<br>&nbsp; s:PChar;<br>begin<br>&nbsp; s:='Liifdgkfj';<br>&nbsp; rc:=Rect(10,10,100,100);<br>&nbsp; DC:=GetDC(handle);<br>&nbsp; SetTextColor(DC,clRed);<br>&nbsp; ExtTextOut(DC, 10, 10, ETO_OPAQUE, @rc, s,Length(s), nil);<br>&nbsp; ReleaseDC(handle,DC);<br><br>&nbsp; rc:=Rect(200,200,300,300);<br>&nbsp; canvas.Font.Color:=clred;<br>&nbsp; ExtTextOut(Canvas.Handle, 200, 200, ETO_OPAQUE, @rc, s,Length(s), nil);<br>end;<br><br>
 
多人接受答案了。
 
后退
顶部