2012-02-13 3 views
1

enter image description hereизменение размера 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; 
} 
//--------------------------------------------------------------------------- 

Это немного сложно объяснить, так что если вам нужно уточнение, просто дайте мне знать, спасибо.

ответ

0

Как и любой другой элемент пользовательского интерфейса, TFrame опубликовал Width и Height свойства, которые можно установить во время разработки и во время выполнения.

+0

o так точно, как TFrame-> Высота, но установить его, когда я нажимаю кнопку добавить? Большое спасибо за вашу помощь. Я помогаю вам в этом проекте. я чувствую себя довольно глупо, задавая так много вопросов, и у меня все время приходится помогать, но, как я уже сказал, я до сих пор не коснулся основы любого из них, это был действительно огромный опыт обучения для меня. – livelaughlove

+1

'TFrame' также имеет' AutoSize' доступной для вас, вместо этого вы можете установить значение true. Тогда вам не нужно вручную настраивать «Высота». –

+0

эй, я пытался заставить это работать. Я проверяю AutoSize на tframe, но во время выполнения он не изменяется. Клетки добавляются должным образом, так что рамка не становится больше. мне нужно было что-то реализовать для события OnResize(), или я что-то пропустил? – livelaughlove

Смежные вопросы