如何实现平面控件,就是CorelDraw里的那种?(100分)

  • 主题发起人 主题发起人 HammerLi
  • 开始时间 开始时间
H

HammerLi

Unregistered / Unconfirmed
GUEST, unregistred user!
只是单纯的设定控件的Flate和Ctrl3D属性不行,我好像看到过一篇文章介绍过一种方法可以实现,不过用的是C++,各位有知道的吗?
 
有个FlatStyle控件包啊。
 
我不太喜欢用第三方控件,还是用API吧!
 
附加控件里有SpeedButton可以实现平面的按钮
 
做个平面按钮,可从TGraphicControl继承,然后重载Paint,在其中自己画出按钮的形状。相当于三态按钮,普通模式、鼠标在其上和鼠标按下三种状态,可以添加两个布尔变量FIsDown,FIsOver来决定鼠标的状态。
WM-
 
只不过是画出时控制,对你自己原有的控件的PAINT方法稍加改造就行了
 
TGraphicControl有Paint方法,但TWinControl类的没有,
所以在WM_PAINT消息处理函数中来画出控件的平面外观到是一条可行之路。
Just try it!
 
有一个 TCustomControl 类是从 TWinControl 继承下来的,它兼有 TWinControl 和
TGraphicControl的特性,应该可以满足你的要求!
 
如果继承类自己做控件不太现实,我不能将每种控件都继承下来自己处理啊。
 
>>我不太喜欢用第三方控件,还是用API吧!
不论是否第三方控件,最终都是调用API实现的。

>>如果继承类自己做控件不太现实,我不能将每种控件都继承下来自己处理啊。
有现成的不用,又不愿意自己写,那你想怎么样啊?
 
>>不论是否第三方控件,最终都是调用API实现的。
这是地球人都知道的

>>有现成的不用,又不愿意自己写,那你想怎么样啊?
如果都用现成的我就不使Delphi了,最终的目的应该是搞清楚如何实现的,而不是拿来主义。我那句话让您理解为我不愿意自己写了?我总不能将ListView, TreeView, Button, ComboBox, StatusBar, Menu, Edit, ScrollBar, Panel ...... 都继承下来自己改写吧!
看清我的题目,我当时看的那篇文章是通过一种方法对窗体上所有的控件进行处理,使其呈现出平面控件的效果,好像要用到钩子函数,记得不清楚了,否则就不问了。
 
去下一个XPMENU控件,它就是你所要的方法实现了对大部分控件外观的修改。看看它的代码不过也够麻烦的
 
我给你写点代码。把分给我哦。。我刚来DFW。。给点专家分了。
如果你的东西不要求输入焦点。选择TGraphicControl,反之,选择TCustomControl;
我现在以一个实用的按牛给你引路,OK?
TMyBtn=class(TCustomControl);//需要焦点的按牛具有TBUTTON的 CAN FOCUSED
///和 TSPEEDBUTTON的当鼠标离开和进入时候的变换效果
private
FMouseIn:Boolean;//表示鼠标现在是否正在自己身上
procedure CMMOUSEENTER(var Msg:TMessage);message CM_MOUSEENTER;//鼠标进入激发
Procedure CMMOUSELEAVE(var Msg:TMessage);message CM_MOUSELEAVE;// 鼠标离开了。
procedure WM_SETFOCUS(var Msg:Tmessage);message WM_SETFOCUS;//被聚焦了。
procedure WM_KILLFOUS(var Msg:TMesage);message WM_KILLFOCUS//焦点不在自己身上
.....................
protected Paint;override;
//下面的代码自己搞定吧。知道了要截获什么消息,知道了消息的意义,做什么应该很清楚了。
各个消息处理过程里。设置状态标志,然后去 Invalidate;刷新自己;
重载的PAINT里。根据不同的状态标志。画你自己的样子吧。。。。
完毕。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
 

Similar threads

后退
顶部