изменение размера TFrame во время выполнения
Во-первых, лил обо мне, я очень новый графический интерфейс программирования, особенно с C++ Builder. У меня есть tframe, который содержит строку ячеек, точно так же, как на картинке выше. есть кнопка +, и при нажатии ячейка добавляется только к последнему столбцу, как показано. Мне было интересно, можно ли изменить размер tframe во время выполнения, поскольку последний столбец становится все больше и больше. tframe должен начинаться с размера одного ряда ячеек. для этого tframe не может быть полосы прокрутки. он просто должен расширяться по мере того, как ячейки добавляются в последний столбец.
спасибо в продвинутом виде.
Дополнительная информация.
вот код для самого tframe, который добавляет красные ячейки (что также является еще одним tframe jsut fyi). этот tframe также добавляется в окно прокрутки. для лучшего понимания обратитесь к рисунку в Tree Structure with TFrames. конечной целью является создание древовидной структуры tframes.
tframe в этом конкретном квете - это tframe к самому правильному изображению другого вопроса.
__fastcall TTreeTframe::TTreeTframe(TComponent* Owner)
: TFrame(Owner)
{
AddCells();
}
//---------------------------------------------------------------------------
void __fastcall TTreeTframe::AddCells()
{
//this part adds the cells in the tframe (red boxes in the picture)
int tempCellRow = 0;
TCells* NewCellRow = new TCells (this);
NewCellRow->Parent=this;
TComponentEnumerator * ParentEnum = this->GetEnumerator();
while(ParentEnum->MoveNext())
{
tempCellRow++;
}
NewCellRow->SetIndex(tempCellRow);
NewCellRow->Name = "Cell" + IntToStr(tempCellRow);
NewCellRow->Top = (NewCellRow->Height) * (tempCellRow-9);
NewCellRow->Left = 213;
NewCellRow->OnClose = &DeleteCell;
}
void __fastcall TTreeTframe::DeleteCell(TObject *Sender)
{
//this part deletes the cells when the delete button is pressed. As
//mentioned the red boxes themselves are also tframe, and in that
//tframe is a TEdit with a delete button. just so u know where the
//delete button is located
TCells* TCurrent = NULL;
int CellRow = 0;
TCells* NewCellRow = (TCells*)Sender;
CellRow = NewCellRow->GetIndex();
NewCellRow->Name = "";
TComponentEnumerator * ParentEnum = NewCellRow->Parent->GetEnumerator();
while(ParentEnum->MoveNext())
{
TCurrent = (TCells*)ParentEnum->GetCurrent();
if(TCurrent->GetIndex() > CellRow)
{
TCurrent->SetIndex(TCurrent->GetIndex() - 1);
TCurrent->Top -= (NewCellRow->Height);
TCurrent->Name = "DistIPCell" + IntToStr(TCurrent->GetIndex());
}
}
}
//---------------------------------------------------------------------------
void __fastcall TTreeTframe::btnAddCellsClick(TObject *Sender)
{
// this is what the red + does
AddCells();
}
//---------------------------------------------------------------------------
// the rest of this is for the propose of deleting this tframe from the tree structure
void __fastcall TTreeTframe::btnRemoveClick(TObject *Sender)
{
if (FOnClose != NULL)
{
FOnClose(this);
}
PostMessage(Handle, CM_RELEASE, 0, 0);
}
//---------------------------------------------------------------------------
void __fastcall TTreeTframe::WndProc(TMessage &Message)
{
if (Message.Msg == CM_RELEASE)
{
delete this;
return;
}
TFrame::WndProc(Message);
}
//---------------------------------------------------------------------------
void __fastcall TTreeTframe::SetIndex(int TypeRow)
{
this->TypeRow = TypeRow;
}
int __fastcall TTreeTframe::GetIndex()
{
return this->TypeRow;
}
//---------------------------------------------------------------------------
Это немного сложно объяснить, так что если вам нужно уточнение, просто дайте мне знать, спасибо.
o так точно, как TFrame-> Высота, но установить его, когда я нажимаю кнопку добавить? Большое спасибо за вашу помощь. Я помогаю вам в этом проекте. я чувствую себя довольно глупо, задавая так много вопросов, и у меня все время приходится помогать, но, как я уже сказал, я до сих пор не коснулся основы любого из них, это был действительно огромный опыт обучения для меня. – livelaughlove
'TFrame' также имеет' AutoSize' доступной для вас, вместо этого вы можете установить значение true. Тогда вам не нужно вручную настраивать «Высота». –
эй, я пытался заставить это работать. Я проверяю AutoSize на tframe, но во время выполнения он не изменяется. Клетки добавляются должным образом, так что рамка не становится больше. мне нужно было что-то реализовать для события OnResize(), или я что-то пропустил? – livelaughlove