Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Builder C++ TabControl

Ostatnio zmodyfikowano 2011-12-17 18:34
Autor Wiadomość
DVD93
Temat założony przez niniejszego użytkownika
» 2011-12-17 16:34:35
Chciałbym by za każdym razem Tworzyło się nowe memo między którymi mógłbym się swobodnie przełączać za pomocą zakładek.
P-45761
akwes
» 2011-12-17 16:50:32
Hm... Chyba nie powinienem ale masz :P

C/C++
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 * Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1( TComponent * Owner )
    : TForm( Owner )
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click( TObject * Sender )
{
    // Dodawanie zakladki
    int tmp = TabControl1->Tabs->Count; // ilosc, lub jak kto woli ostatni element
    TabControl1->Tabs->Add( "Zakladka " + IntToStr( tmp ) ); // dodatnie zakladki
    // Tworzymy nowe memo!
    MemoTab.push_back( new TMemo( this ) );
    // Ustawiamy rodzica
    MemoTab[ tmp ]->Parent = TabControl1;
    // Na całego rodzica
    MemoTab[ tmp ]->Align = alClient;
   
    // Zmieniamy zakładke na nowo powstałą
    TabControl1->TabIndex = tmp;
   
    // Ukrywamy wszyskie memo
    for( int i = 0; i < MemoTab.size(); i++ )
    {
        MemoTab[ i ]->Visible = false;
    }
   
    // Odkrywamy nasze memo
    MemoTab[ tmp ]->Visible = true;
   
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TabControl1Change( TObject * Sender )
{
    // Nie widzę nigdzie zadrzenia OnChangeTab (byłoby lepiej, któryś komponenet to ma chyba)
    // no ale niech bedzie OnChange
   
    // Ukrywamy wszyskie memo
    for( int i = 0; i < MemoTab.size(); i++ )
    {
        MemoTab[ i ]->Visible = false;
    }
   
    // Odkrywamy nasze memo
    MemoTab[ TabControl1->TabIndex ]->Visible = true;
}
//---------------------------------------------------------------------------

C/C++
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <vector>
//---------------------------------------------------------------------------
class TForm1
    : public TForm
{
    __published: // IDE-managed Components
    TTabControl * TabControl1;
    TButton * Button1;
    void __fastcall Button1Click( TObject * Sender );
    void __fastcall TabControl1Change( TObject * Sender );
private: // User declarations
public: // User declarations
    __fastcall TForm1( TComponent * Owner );
    std::vector < TMemo *> MemoTab;
   
   
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 * Form1;
//---------------------------------------------------------------------------
#endif

Dużo tego nie ma, na trudne też nie wygląda (bo nie jest :P). Wytłumacz się teraz :P
P-45768
DVD93
Temat założony przez niniejszego użytkownika
» 2011-12-17 17:49:00
Bardzo dziękuje za pomoc ;D w końcu działa ;D już wcześniej próbowałem tworzyć nowe Memo na każdą zakładkę za pomocą kodu tego typu;

C/C++
TMemo * Memo1;
Memo1 = new TMemo( this );
Memo1->Parent = this;
Memo1->Left = 50;
Memo1->Top = 50;

Ale nie działało za dobrze dlatego porzuciłem ten pomysł.
P-45779
akwes
» 2011-12-17 18:34:58
1. Trzeba mieć listę stworzonych TMemo. Jeżeli to co podałeś to cały kod, to zaraz po wyjściu z funkcji wskaźnik na memo się mazał, a TMemo w pamięci pozostawało i nam robiło wyciek pamięci.
2. Parent musi być tym komponentem na którym ma się nam ukazać. Czyli jak ma być w ttabcontrol to nie dajemy mu jako rodzica formy.

No, cieszę się że pomogło :P

Jeżeli poza TMemo chcesz mieć coś na zakładce mieć to radzę wtedy zastosować TPanel.
Czyli zrobić też listę TPaneli, jako Parent dla każdego zestawu (czyli TMemo i co tam jeszcze chcesz mieć) ustawiasz rodzica na TPanel, i TPanelowi rodzica na TTabControl. Wtedy ukrywanie wszystkich komponentów na karcie ograniczy się do ukrywania Panelu - wygoda.

A wygląd TPanelu da się dostosować tak żeby go nie było widać.
P-45793
1 « 2 »
Poprzednia strona Strona 2 z 2