如何设置一个按钮的三态?

abinnet 2002-02-08 12:26:22
就是:平的,凸起和凹下的状态;是什么属性?
TButton
TBitbtn
TSpeedButton
...全文
141 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
erp2 2002-02-08
  • 打赏
  • 举报
回复
是StdCtrls.pas中画的图,你可以根据需要进行更改.
40Star 2002-02-08
  • 打赏
  • 举报
回复
真正的方法是在重载Button的DrawItem成员函数
下面是MSDN的一个例子
void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
UINT uStyle = DFCS_BUTTONPUSH;

// This code only works with buttons.
ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);

// If drawing selected, add the pushed style to DrawFrameControl.
if (lpDrawItemStruct->itemState & ODS_SELECTED)
uStyle |= DFCS_PUSHED;

// Draw the button frame.
::DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem,
DFC_BUTTON, uStyle);

// Get the button's text.
CString strText;
GetWindowText(strText);

// Draw the button text using the text color red.
COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, RGB(255,0,0));
::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(),
&lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
::SetTextColor(lpDrawItemStruct->hDC, crOldColor);
}
mengbo 2002-02-08
  • 打赏
  • 举报
回复
有以下两种方法。
---- 1. 修改BITBTN上的GLYPH属性.
----
(1)当处于FLAT状态时,GLYPH属性设置为图像文件1,为了让按钮只是平面地显示,必须让图像文件1的尺寸大于按钮的实际尺寸,按钮就呈现平面状,可以在
FORM的ONMOUSEMOVE事件上用以下函数实现:
Bitbtn1.glyph.loadfromfile(‘文件名1’);
----
(2)当处于UP和DOWN状态时,GLYPH设置为图像文件2。由于BITBTN构件本身就具有按钮的特性,所以对图像大小没有特殊要求。可以在BITBTN1的ONMOUSEMOVE事件上用以下函数实现:

Bitbtn1.glyph.loadfromfile(‘文件名2’);
---- 用这种方法实现的三态按钮有一个明显的不足,由于BITBTN1不断地从图像文件LOAD图像数据,因此图像一直闪烁不定,不但影响运行速度而且效果不佳。
---- 2.修改IMAGE构件和BITBTN构件的VISIBLE属性
----
在FORM的同一个位置设置大小完全相等的两个构件IMAGE1和BITBTN1,由于一起动FORM时,显示FLAT状态,因此把IMAGE1的VISIBLE属性初值设为TRUE;把BITBTN1的VISIBLE属性设为FALSE。

----
(1)当处于FLAT状态时,只显示IMAGE1构件。即把IMAGE1的VISIBLE属性设为TRUE,把BITBTN1的VISIBLE属性设为FALSE。于是FORM的OMMOUSEMOVE事件上调用如下语句:

IMAGE1.VISIBLE:=TRUE;
BITBTN1.VISIBLE:=FALSE;
----
(2)当处于UP或DOWN状态时,把IMAGE1的VISIBLE属性设为FALSE;把BITBTN1的VISIBLE属性设为TRUE。因此在IMAGE1和BITBTN1的
ONCLICK事件上分别调用如下语句:
IMAGE1.VISIBLE:=FALSE;
BITBTN1.VISIBLE:=TRUE;
---- 使用该方法虽然多用了一个构件,但是不必频繁地装载图像数据,因此运行速度快,效果也很好。
fshrq 2002-02-08
  • 打赏
  • 举报
回复
用speedbutton

828

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧