如何在THeaderSection中嵌入VCL TEdit控件?

时间:2018-11-29 20:01:25

标签: c++ c++builder vcl

我想在THeader控件上嵌入TEdit控件。

更新:

根据下面雷米(Remy)的回答,我想到了下面的代码,效果很好。

int secsWidth(0);
for(int i = 0; i < HeaderControl1->Sections->Count; i++)
{
    secsWidth += HeaderControl1->Sections->Items[i]->Width;
}

TPoint p1(HeaderControl1->Left, HeaderControl1->Top);
TPoint p2 = HeaderControl1->ClientToScreen(p1); //<--- ???
mEdit->Left = p1.X + secsWidth;
mEdit->Top = p1.Y;
mEdit->Parent = HeaderControl1;

以上代码在框架构造器中执行。框架是动态创建的。

无论出于何种原因,如果上面标记为“ ??”的行被注释掉,则编辑控件不可见。观察到这条线实际上没有做任何事情。

我猜该调用会为HeaderControl组件创建一些必要的内部构件?

1 个答案:

答案 0 :(得分:1)

是,但不是直接。

THeaderSection本身并不是一个UI控件,它只是内存中的一个收集项,因此它不能承载任何子控件。唯一的UI控件是THeaderControl本身。

由于THeaderControlTWinControl的后代,因此只能在运行时(而不是在设计时)将THeaderControl设置为{{1 }},然后可以根据需要使用ParentTEditTEdit属性来将THeaderSection.Left相对于所需的标题部分定位,以计算您要在其中显示THeaderSection.Width的标题部分。