关于继承自TGraphicControl的控件在位置变动后无法正确显示的问题
我写了一个类继承自TGraphicControl, 在运行时动态生成该控件( 没有经过注册, 只是用标准C++的继承 )
控件显示没问题... 但当在运行时更改其Left/Top属性移动其位置, 则显示不完整, 显示区域被限制在0, 0, Width, Height这样的区域里...
想来是因为Paint里给的Canvas的区域被限制了, 但看了一下TWinControl的PaintControls里的处理又是正常的(根据控件的Left/Top/Width/Height来自动限制), 原Paint函数处理如下:
于是我又尝试用API来画, DC还是用的Canvas的Handle, 问题依旧.... 所以就直接用其父窗口的整个区域DC去绘制, 结果就OK了...代码如下
希望有朋友帮忙回答下是为什么...
控件显示没问题... 但当在运行时更改其Left/Top属性移动其位置, 则显示不完整, 显示区域被限制在0, 0, Width, Height这样的区域里...
想来是因为Paint里给的Canvas的区域被限制了, 但看了一下TWinControl的PaintControls里的处理又是正常的(根据控件的Left/Top/Width/Height来自动限制), 原Paint函数处理如下:
TRect rt( Left, Top, Left + Width, Top + Height );
Canvas->Brush->Color = clWhite;
Canvas->FrameRect( rt );
rt.left++;
rt.top++;
rt.right--;
rt.bottom--;
Canvas->Brush->Color = clBlack;
Canvas->FrameRect( rt );
rt.left++;
rt.top++;
rt.right--;
rt.bottom--;
Canvas->Brush->Color = clWhite;
Canvas->FrameRect( rt );于是我又尝试用API来画, DC还是用的Canvas的Handle, 问题依旧.... 所以就直接用其父窗口的整个区域DC去绘制, 结果就OK了...代码如下
HDC dc = GetDC( Parent->Handle );
TBrush *pBrush = new TBrush;
pBrush->Style = bsClear;
TPen *pPen = new TPen;
pPen->Color = clWhite;
SelectObject( dc, pBrush->Handle );
SelectObject( dc, pPen->Handle );
Rectangle( dc,
Left,
Top,
Left + Width,
Top + Height );
pPen->Color = clBlack;
SelectObject( dc, pPen->Handle );
Rectangle( dc,
Left + 1,
Top + 1,
Left + Width - 1,
Top + Height - 1 );
pPen->Color = clWhite;
SelectObject( dc, pPen->Handle );
Rectangle( dc,
Left + 2,
Top + 2,
Left + Width - 2,
Top + Height - 2 );
ReleaseDC( Parent->Handle, dc );
delete pBrush;
delete pPen;
希望有朋友帮忙回答下是为什么...
...全文
相关推荐
使用Delphi自编的LED显示控件
该项目实现了一个基于Delphi的LED数码管显示控件TLEDFontNum,继承自TGraphicControl。通过可配置的颜色、字符尺寸与间距参数,模拟真实LED发光效果,支持透明背景、自动缩放
金额输入控件TDBCurrencyEdit
本文介绍了如何实现自定义货币编辑控件TCustomCurrencyEdit和货币标签控件TCurrencyLabel。控件继承自TCustomControl和TGraphicControl,支持货币格
Delphi在Image控件中显示文字.rar
**使用TLabel控件**: 一个简单且直观的方法是在TImage控件上方放置一个TLabel控件,调整其透明度和位置,使其看起来像是直接在TImage上显示的。
Borland官方提供的VCL继承关系全图
TCustomForm类:它是窗体的基础,所有的窗体组件都继承自这个类。TCustomForm不仅包含了窗体的大小、位置、标题等属性,还提供了窗口的创建、显示和关闭等功能。
使用Delphi自编的LED显示控件..rar
**控件创建**:首先,你需要创建一个新的组件类,继承自TCustomControl或TGraphicControl。这样可以获得基本的绘图功能,并且可以在设计时在Delphi的Form上拖放使用。


VCL组件使用和开发
