请教一个简单的问题

jiangwei_122 2002-08-22 05:14:52
我想知道TSpeedButton 为什么有GroupIndex功能,我自己编了一个控件继承了TSpeedButton 改了Paint函数,就没有此功能了,应该如何添加。我看了它的源代码因为是ObjectPascal很多都在C++中不可能。还请高手指点。
...全文
39 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangwei_122 2002-08-22
  • 打赏
  • 举报
回复
void __fastcall TSButton::Paint()
{
const int DownStyles[2]={BDR_RAISEDINNER,BDR_SUNKENOUTER};

const int FillStyles[2]={BF_MIDDLE,0};
TRect PaintRect;
UINT DrawFlags;
int temflag;
if (Enabled==false)
{
FState=bsDisabled;
FDragging=false;
}
else
{
if (FState==bsDisabled)
if (FDown && GroupIndex!=0)
FState=bsExclusive;
else
FState=bsUp;
}
Canvas->Font=Font;
PaintRect=Rect(0,0,Width,Height);
Canvas->Brush->Color=Color;
Canvas->FillRect(PaintRect);

if (FFlat==false)
{
DrawFlags=DFCS_BUTTONPUSH | DFCS_ADJUSTRECT;
if ((FState==bsDown)||(FState==bsExclusive))
{
DrawFlags=DrawFlags |DFCS_PUSHED;
temflag=1;
}
DrawFrameControl(Canvas->Handle,&PaintRect,DFC_BUTTON,DrawFlags);
}
else
{
if((FState==bsDown)||(FState==bsExclusive)||(FMouseInControl &&(FState!=bsDisabled))||(ComponentState.Contains(csDesigning)))
DrawEdge(Canvas->Handle,&PaintRect,DownStyles[temflag],FillStyles[Transparent]|BF_RECT);
else if (Transparent==false)
{
Canvas->Brush->Color=Color;
Canvas->FillRect(PaintRect);
}
InflateRect(&PaintRect,-1,-1);
}
if((FState==bsDown)||(FState==bsExclusive))
{
if((FState==bsExclusive)&&((FFlat==false)||(FMouseInControl==false)))
{
Canvas->Brush->Bitmap=AllocPatternBitmap(clBtnFace,clBtnHighlight);
Canvas->FillRect(PaintRect);
}
}
Canvas->StretchDraw(PaintRect,Glyph) ;
Canvas->Brush->Style=bsClear;
if(FState==bsDisabled)
{
OffsetRect(PaintRect,1,1);
Canvas->Font->Color=clBtnHighlight;
DrawText(Canvas->Handle,Caption.c_str(),Caption.Length(),&PaintRect,DT_CENTER|DT_VCENTER|DrawTextBiDiModeFlags(0)|DT_SINGLELINE);
OffsetRect(PaintRect,-1,-1);
Canvas->Font->Color=clBtnShadow;
DrawText(Canvas->Handle,Caption.c_str(),Caption.Length(),&PaintRect,DT_CENTER|DT_VCENTER|DrawTextBiDiModeFlags(0)|DT_SINGLELINE);
}
else
DrawText(Canvas->Handle,Caption.c_str(),Caption.Length(),&PaintRect,DT_CENTER|DT_VCENTER|DrawTextBiDiModeFlags(0)|DT_SINGLELINE);
}
这就是我重新写的paint函数。
kingcaiyao 2002-08-22
  • 打赏
  • 举报
回复
你将你的Paint函数贴出来看看

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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