如何在 THeaderSection 中嵌入 VCL TEdit 控件?
How to embed a VCL TEdit control in a THeaderSection?
我想在 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 组件创建了一些必要的内部结构?
是的,但不是直接的。
THeaderSection
本身不是 UI 控件,它只是内存中的一个 collection 项,因此它不能承载任何 child 控件。唯一的 UI 控件是 THeaderControl
本身。
由于 THeaderControl
是 TWinControl
的后代,仅在运行时(而不是 design-time)您可以将 THeaderControl
设置为 Parent
TEdit
,然后您可以根据需要使用 THeaderSection.Left
、THeaderSection.Width
和 THeaderControl.Height
相对于所需的 header 部分定位 TEdit
属性来计算 header 部分的边界矩形,您希望 TEdit
在其中出现。
我想在 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 组件创建了一些必要的内部结构?
是的,但不是直接的。
THeaderSection
本身不是 UI 控件,它只是内存中的一个 collection 项,因此它不能承载任何 child 控件。唯一的 UI 控件是 THeaderControl
本身。
由于 THeaderControl
是 TWinControl
的后代,仅在运行时(而不是 design-time)您可以将 THeaderControl
设置为 Parent
TEdit
,然后您可以根据需要使用 THeaderSection.Left
、THeaderSection.Width
和 THeaderControl.Height
相对于所需的 header 部分定位 TEdit
属性来计算 header 部分的边界矩形,您希望 TEdit
在其中出现。