Как встроить элемент управления VCL TEdit в THeaderSection? - PullRequest
0 голосов
/ 29 ноября 2018

Я хотел бы встроить элемент управления TEdit в элемент управления THeader.

ОБНОВЛЕНИЕ:

Основываясь на ответе Реми ниже, я пришел к следующему коду, который прекрасно работает.

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 голосов
/ 29 ноября 2018

Да, но не напрямую.

THeaderSection не является собственным элементом управления пользовательского интерфейса, это просто элемент коллекции в памяти, поэтому он не может содержать дочерние элементы управления.Единственный элемент управления пользовательского интерфейса - это THeaderControl.

Поскольку THeaderControl является TWinControl потомком, только во время выполнения (не во время разработки) вы можете установить THeaderControl как Parent для TEdit, и затем вы можете расположить TEdit относительно требуемой секции заголовка по мере необходимости, используя свойства THeaderSection.Left, THeaderSection.Width и THeaderControl.Height, чтобы вычислить ограничивающий прямоугольник секции заголовка, внутри которойВы хотите, чтобы TEdit появился.

...