Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549

Создать копию TTabSheet

04.07.2014, 13:22. Показов 2632. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть 1 TTabSheet сделанный через конструктор, по ходу выполнения программы мне нужно размножить эти листы, как можно это сделать?

Пытался так, но не получается:

C++
1
2
3
4
TTabSheet* tab = new TTabSheet(PageControl1);
        tab->Assign(TabSheet1);
        tab->PageControl = PageControl1;
        tab->TabVisible = true;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.07.2014, 13:22
Ответы с готовыми решениями:

FileCopy, создать копию файла с расширением txt
Требуется создать копию файла с расширением txt. Использую функцию FileCopy,...

Создать копию документа
Доброе! нужно из открытого документа иметь возможность создавать новый CopyAllItems не использую, так как легче ручками прописать какие...

Как создать копию <tr>
Как создать копию &lt;tr&gt; с помощью jQuery при нажатия на + &lt;tr&gt; &lt;td&gt;Выберайте файл:&lt;/td&gt; &lt;td &gt;&lt;input...

16
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
04.07.2014, 14:16
А где размножение-то само? Это только создание.
0
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
04.07.2014, 14:38  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А где размножение-то само? Это только создание.
так вот я и не знаю как размножить, я думал Assign`ом создать копию уже имеющегося
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.07.2014, 19:47
Цитата Сообщение от hiphone Посмотреть сообщение
я думал Assign`ом создать копию уже имеющегося
И? Что ?
Напиши свою ф-цию копирования в чем проблема ?
0
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
04.07.2014, 21:30  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
И? Что ?
Напиши свою ф-цию копирования в чем проблема ?
Так я не знаю как, в этом проблема
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
04.07.2014, 23:49
Вообче-то в динамике плюсовать закладки на PageControl и наполнять их содержимым - это мазохизм, все прекрасно делается в дизайн-режиме. Но примеры этого есть...
C++
1
2
3
   TTabSheet *tsb = new TTabSheet(PageControl1) ;
   tsb->PageControl = PageControl1;
   tsb->Caption = "Äâà";
0
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
05.07.2014, 00:01  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
Вообче-то в динамике плюсовать закладки на PageControl и наполнять их содержимым - это мазохизм, все прекрасно делается в дизайн-режиме. Но примеры этого есть...
Мне нужно по ходу выполнения неизвестно сколько вкладок, и не пустых, а с компонентами, а это мазохизм их вручную прописывать
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
05.07.2014, 00:17
Ну, наделайте их с запасом, содержимое (из первой вкладки) превосходно копируется Ctrl+C, сделайте при старте невидимыми(TabVisible=0)... . Неужто расписывать страницы текста на каждый такой случай удобнее?!
0
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
05.07.2014, 00:20  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
Ну, наделайте их с запасом, содержимое (из первой вкладки) превосходно копируется Ctrl+C, сделайте при старте невидимыми(TabVisible=0)... . Неужто расписывать страницы текста на каждый такой случай удобнее?!
C запасом это сколько? 100? 1000? Неизвестно сколько пользователь захочет их сделать, да и должно же быть решение как можно клонировать вкладку
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
05.07.2014, 00:27
Ну, я, возможно, и не прав, но для клонирования использую поток (сам придумал, так как никто здесь решения не подсказал...). То-есть, создаю MemoryStream, у него есть фишки WriteComponent, ReadComponent; сперва создать шаблон, загнать его в поток (write), удалить содержимое шаблона (иначе повторы имен при создании новых) - и потом при потребности создать клон, создается новый компонент, назначается родитель, а все извращения с ним воспроизводятся чтением потока (read). Только за именами нужно следить и удалять грамотно, когда не нужны становятся.
1
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
05.07.2014, 12:26  [ТС]
Подскажите, ошибка при Assign: Cannot assign a TLabel to a TLabel
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
05.07.2014, 13:07
А зачем assign? У Label кроме Caption и нет ничего; или хочется все особенности скопировать? (размер, координаты, цвет...)
0
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
05.07.2014, 17:46  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
А зачем assign? У Label кроме Caption и нет ничего; или хочется все особенности скопировать? (размер, координаты, цвет...)
да, все параметры и эвенты
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.07.2014, 18:16
Блин, создай свой класс фрейм на нем размещай компоненты, а потом на табах создавай фреймы этого класса.
1
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
05.07.2014, 19:20  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Блин, создай свой класс фрейм на нем размещай компоненты, а потом на табах создавай фреймы этого класса.
Можно пример?
0
61 / 50 / 12
Регистрация: 25.01.2010
Сообщений: 257
06.07.2014, 09:28
Я создавал листы таким кодом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void __fastcall TForm1::PageControl1Change(TObject *Sender)
{
//здесь будем создавать новую вкладку
//нужно динамически добавлять компоненты
//первый шаг - добавить новый таб
if(PageControl1->TabIndex == i - 1)
  {
   TTabSheet *pPage = new TTabSheet(PageControl1);
   pPage->PageControl = PageControl1;
   pPage->Caption = AnsiString("+");
   PageControl1->ActivePage->Caption = AnsiString("Page") + IntToStr(i);
   Form1->StatusBar1->Panels->Items[1]->Text = pPage->Name;
 
   Panel[i] = new TPanel(PageControl1);
   Panel[i]->Parent = PageControl1->ActivePage;
   Panel[i]->Align = alTop;
 
   CppWebBrowser[i] = new TCppWebBrowser(PageControl1);
   CppWebBrowser[i]->TOleControl::Parent = PageControl1->ActivePage;
   CppWebBrowser[i]->Align = alClient;
   CppWebBrowser[i]->OnBeforeNavigate2 =  TCppWebBrowserBeforeNavigate2(&CppWebBrowser1BeforeNavigate2);
   CppWebBrowser[i]->OnProgressChange = CppWebBrowser1ProgressChange ;
   //и т.д.
    i++;
   
}
пишется однажды и создается сколько угодно листов...
1
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
10.07.2014, 09:18
- Простенький пример на создание и удаление страниц TPageControl в RAD XE3

Заголовочный файл Основной Формы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//##### ..... #####
//------------------------------------------------------------------------------
class   TForm1  : public    TForm
{
__published:    // IDE-managed Components
    TPageControl *PageControl1;
    TStatusBar *StatusBar1;
    TLabel *Label1;
    TLabel *Label2;
    void __fastcall PageControl1Change(TObject *Sender);
    void __fastcall PageControl1Changing(TObject *Sender, bool &AllowChange);
    void __fastcall PageControl1MouseActivate(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y, int HitTest, TMouseActivate &MouseActivate);
 
 
private:    // User declarations
    // сделать Страницу "Плюс".
    void __fastcall     Make_Plus_Page( void );
    // сделать текущую Страницу (из страницы "Плюс").
    void __fastcall     Make_Cur_Page( void );
    // удалить текущую Страницу.
    void __fastcall     Del_Cur_Page( void );
 
public:     // User declarations
    // конструктор.
    __fastcall  TForm1(TComponent* Owner);
 
};
//------------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//------------------------------------------------------------------------------
Файл реализации Основной Формы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//##### ..... #####
// конструктор.
__fastcall  TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    // сделать Страницу "Плюс".
    Make_Plus_Page();
}
 
//##############################################################################
// .........
void __fastcall     TForm1::PageControl1Change(TObject *Sender)
{
    // если текущая Страница - "Плюсик" ...
    if ( PageControl1->ActivePage->Caption == "+" )
    {
        // сделать Страницу "Плюс".
        Make_Plus_Page();
 
        // сделать текущую Страницу (из страницы "Плюс").
        Make_Cur_Page();
    }
}
 
//(при каждой смене Активной Страницы.)
void __fastcall     TForm1::PageControl1Changing(TObject *Sender, bool &AllowChange)
{
    // .........
}
 
// .........
void __fastcall     TForm1::PageControl1MouseActivate(TObject*  Sender, TMouseButton    Button,
          TShiftState Shift, int X, int Y, int HitTest, TMouseActivate &MouseActivate)
{
    // если нажата - НЕ ПРАВАЯ Клавиша Мыши ...
    if ( Button != mbRight )
    {
        // если текущая Страница - "Плюсик" ...
        if ( PageControl1->ActivePage->Caption == "+" )
        {
            // сделать Страницу "Плюс".
            Make_Plus_Page();
 
            // сделать текущую Страницу (из страницы "Плюс").
            Make_Cur_Page();
        }
    }
    // если нажата - ПРАВАЯ Клавиша Мыши ...
    else
    {
        // если текущая Страница - НЕ "Плюсик" ...
        if ( PageControl1->ActivePage->Caption != "+" )
        {
            // удалить текущую Страницу.
            Del_Cur_Page();
        }
    }
}
 
//##############################################################################
// сделать текущую Страницу (из страницы "Плюс").
void __fastcall     TForm1::Make_Cur_Page( void )
{
    // поменять Название старой (текущей) Страницы.
    PageControl1->ActivePage->Caption = AnsiString( "Page" ) + IntToStr( PageControl1->TabIndex );
}
 
// сделать Страницу "Плюс".
void __fastcall     TForm1::Make_Plus_Page( void )
{
    // создать гновую Страницу.
    TTabSheet *new_Page = new TTabSheet( PageControl1 );
    // оформить новую Страницу.
    new_Page->PageControl = PageControl1;
    new_Page->Caption = AnsiString( "+" );
}
 
// удалить текущую Страницу.
void __fastcall     TForm1::Del_Cur_Page( void )
{
    // если Страницы, более высокие, чем текущая (удаляемая) - ЕСТЬ ...
    if ( PageControl1->TabIndex < PageControl1->PageCount-2 )   //(последняя Страница НЕ "Плюс".)
    {
        // по всем страницам более высоким, чем текущая (удаляемая).
        for ( int   n=PageControl1->PageCount-2; n>PageControl1->TabIndex; n-- )
        {
            // переименовать ее.
            PageControl1->Pages[n]->Caption = AnsiString( "Page" ) + IntToStr( n-1 );
        }
    }
    // удалить текущую Страницу.
    delete  PageControl1->ActivePage;
}
Добавлено через 15 часов 56 минут
- Как всегда что-то забыл, забыл инструкции по применению.
Надо добавить в конструктор Основной Формы:
C++
1
2
3
  // инструкции.
  Label1->Caption = "Щелчек левой кнопкой Мыши (по Странице ""+"") - Добавляет новую Страницу.";
  Label2->Caption = "Щелчек правой кнопкой Мыши (по Странице НЕ ""+"") - Удаляет данную Страницу.";
- Еще раз - Привет Всем!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.07.2014, 09:18
Помогаю со студенческими работами здесь

Создать копию файла
Дан файл произвольных данных c1. Создать копию этого файла и присвоить ему новое имя используя функции blockread и blockwrite

Создать копию формы
У меня есть форма и на ней картинка. Мне нужно, чтобы при нажатии на эту форму создавалась еще одна такая же. var X: TForm1; begin ...

Создать копию закладки
Доброе время суток. Подскажите пожалуйста как программно создать/удалить закладки со всеми полями в TabControl Макет &lt;Window...

Создать копию Picturebox
Помогите пожалуйста решить задачу.Запускается форма,, на ней есть картинка , при нажатии на которую создается копия , которую потом нужно...

Создать копию файла
На диске находиться файл result.txt. Написать программу создающую копию этого файла с именем copy_resylt.txt.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru