Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.59/22: Рейтинг темы: голосов - 22, средняя оценка - 4.59
42 / 59 / 15
Регистрация: 19.12.2011
Сообщений: 552
1

PageControl программное добавление компонентов

27.03.2012, 18:19. Просмотров 4045. Ответов 12
Метки нет (Все метки)

Есть PageControl, при нажатии на Button -
C++
1
2
3
TTabSheet *pTabSheet = new TTabSheet(PageControl2);
  pTabSheet->PageControl = PageControl2;
  pTabSheet->Caption = LabeledEdit1->Text;
так я добавляю новую страницу с именем!
А нужно что бы на этой странице (новой) автоматом появлялись компоненты Image + ValueListEditor. И в valuelisteditor было сразу в левом столбце 4 заполненных пункта!
Как это сделать?

Добавлено через 2 часа 1 минуту
Ни кто не знает как это сделать ?

Добавлено через 21 минуту
Может тогда кто подскажет, вот после создания нового TabSheet как узнать номер этого TabSheet ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2012, 18:19
Ответы с готовыми решениями:

Возможно ли программное добавление элементов?
возможно ли как то реализовать в программе добавление на форму не существующего элемента. это нужно...

Добавление компонентов в TObjectList
Всем привет. Есть где то порядка 50 одинаковых компонентов на форме и нужно их добавить в...

Добавление компонентов в окно, созданное через WinApi
Создается окно с помощью WinApi. Можно ли на это окно добавлять визуальные компоненты?

PageControl добавление данных в базу
Всем добрый вечер! Подскажите, пожалуйста, как реализовать следующее: Есть PageControl с 2мя...

12
59 / 56 / 8
Регистрация: 22.07.2011
Сообщений: 436
27.03.2012, 18:36 2
Цитата Сообщение от Gleban38 Посмотреть сообщение
Может тогда кто подскажет, вот после создания нового TabSheet как узнать номер этого TabSheet ?
C++
1
pTabSheet->TabIndex
1
42 / 59 / 15
Регистрация: 19.12.2011
Сообщений: 552
27.03.2012, 18:53  [ТС] 3
А пытаюсь узнать имя типа
C++
1
Label1->Caption=pTabSheet->name;
ничего не происходит
0
59 / 56 / 8
Регистрация: 22.07.2011
Сообщений: 436
27.03.2012, 18:57 4
Цитата Сообщение от Gleban38 Посмотреть сообщение
ничего не происходит
Зачем вам Name?

Добавлено через 34 секунды
Цитата Сообщение от SDmaN Посмотреть сообщение
Зачем вам Name?
Его после компиляции и не должно быть видно.
0
42 / 59 / 15
Регистрация: 19.12.2011
Сообщений: 552
27.03.2012, 18:59  [ТС] 5
C++
1
2
pTabSheet->Name="TabSheet50";
  Label1->Caption=pTabSheet->Name;
Вот сделал.
А нужно что бы в дальнейшем им манипулировать. (может я неправ и у меня ничего не выйдет, но на ошибках учатся). А вот не подскажете
Цитата Сообщение от Gleban38 Посмотреть сообщение
что бы на этой странице (новой) автоматом появлялись компоненты Image
0
59 / 56 / 8
Регистрация: 22.07.2011
Сообщений: 436
27.03.2012, 19:07 6
Цитата Сообщение от Gleban38 Посмотреть сообщение
А нужно что бы в дальнейшем им манипулировать.
Так не получится. Лучше в *.h в public класса формы добавить:
C++
1
TTabSheet *pTabSheet;
Тогда им можно управлять)
1
42 / 59 / 15
Регистрация: 19.12.2011
Сообщений: 552
27.03.2012, 19:13  [ТС] 7
А про добавление Image на новый табщит что ни будь знаете?
0
59 / 56 / 8
Регистрация: 22.07.2011
Сообщений: 436
27.03.2012, 19:26 8
Цитата Сообщение от Gleban38 Посмотреть сообщение
А про добавление Image на новый табщит что ни будь знаете?
незнаю то ли это, что вам нужно, но всё таки:
C++
1
2
3
4
5
6
7
8
9
TTabSheet pTabSheet = new TTabSheet(PageControl1);
  pTabSheet->PageControl = PageControl1;
  pTabSheet->Caption = Edit1->Text;
  TImage *img = new TImage(Form1);
  TPicture *pic = new TPicture;
  pic->LoadFromFile("img/1.jpg");
  img->Picture = pic;
  img->Parent = pTabSheet;
  img->Visible = true;
0
42 / 59 / 15
Регистрация: 19.12.2011
Сообщений: 552
27.03.2012, 19:33  [ТС] 9
Пробую создать новый Image
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
TTabSheet *pTabSheet = new TTabSheet  (PageControl2);
  pTabSheet->PageControl = PageControl2;
  pTabSheet->Caption = LabeledEdit1->Text;
  pTabSheet->Name="TabSheet" + FloatToStrF(number, ffGeneral, 15,2);
  Label1->Caption=pTabSheet->Name;
  LabeledEdit1->Clear();
 
  TImage *img = new TImage(pTabSheet);
  img->Left=10;
  img->Top=10;
  img->Width=140;
  img->Height=160;
 
  number++;
Ничего не происходит (((
0
59 / 56 / 8
Регистрация: 22.07.2011
Сообщений: 436
27.03.2012, 19:35 10
C++
1
2
3
  TPicture *pic = new TPicture;
  pic->LoadFromFile("img/1.jpg");
  img->Picture = pic;
0
42 / 59 / 15
Регистрация: 19.12.2011
Сообщений: 552
27.03.2012, 19:36  [ТС] 11
TImage *img = new TImage(pTabSheet); Что вообще обозначает значение в скобке? Как я понял, это место, где будет находиться new Image.
0
287 / 228 / 27
Регистрация: 13.06.2010
Сообщений: 744
27.03.2012, 20:29 12
Класс-наследник от TTabSheet создавайте, в котором сразу все необходимые элементы будут.

Вот, к примеру так:

.h
C++
1
2
3
4
5
6
7
8
9
10
11
class TMyTab : public TTabSheet {
private:
public:
    __fastcall explicit TMyTab(TComponent* Owner); // Конструктор
    __fastcall ~TMyTab();  // Деструктор
    void __fastcall ValueListClick(TObject *Sender); // Пример обработчика
 
    static unsigned short Count; // Счетчик количества созданных TMyTab
    TValueListEditor* ValueList1; 
    TImage* Image1;
};
.cpp
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
__fastcall TMyTab::TMyTab(TComponent* Owner) : TTabSheet(Owner) {
    ++Count;
    this->PageControl = (TPageControl*)Owner;
    this->ParentWindow = Form1->Handle;
    this->Caption = "tab"+IntToStr(Count);
 
    Image1 = new TImage(Owner);
    Image1->Parent = this;
    Image1->Align = alClient;
    // Для прикола выведем квадрат случайного цвета
    Image1->Canvas->Brush->Color = RGB(Random(255),Random(255),Random(255));
    Image1->Canvas->Rectangle(5,5,50,50);
 
    ValueList1 = new TValueListEditor(Owner);
    ValueList1->Parent = this;
    ValueList1->Width = 250;
    ValueList1->Align = alLeft;
    ValueList1->OnClick = ValueListClick;
    // Для прикола выведем 10 строк со случайными значениями
    for (int i=0; i<10; ++i) {
        ValueList1->InsertRow("Строка-"+IntToStr(i),Random(1000),true);
    }
}
 
unsigned short TMyTab::Count=0;
 
__fastcall TMyTab::~TMyTab() {
    --Count;
    delete Image1;
    delete ValueList1;
}
void __fastcall TMyTab::ValueListClick(TObject *Sender) // Пример обработчика
{
    // Обработчика
    ShowMessage("Клик! Выделен элемент: "+IntToStr(this->ValueList1->Row));
}
Создание вкладки в PageControl:

C++
1
2
3
4
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TMyTab* tab1 = new TMyTab(PageControl1);
}
Проект (С++Builder XE) прикреплен
Запустил, нажал кнопку "NewTab" 4 раза, результат на скриншоте.
2
Миниатюры
PageControl программное добавление компонентов  
Вложения
Тип файла: rar CppBuilderXE.rar (86.8 Кб, 28 просмотров)
Эксперт С++
8292 / 6047 / 601
Регистрация: 10.12.2010
Сообщений: 28,132
Записей в блоге: 26
27.03.2012, 20:38 13
C++
1
2
TImage *img = new TImage(pTabSheet); // В скобках(конструкторе) Owner владелец
img->Parent = pTabSheet;
// Компонент родитель
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2012, 20:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Программное добавление столбца в таблицу
Возможно ли с помощью программного кода добавить столбец в таблицу?Если возможно, то как?

ADOTable добавление данных из простых компонентов?
Подскажите пожалуйста как как мне скопировать данные из ValueListEditor в Базу Данных пользуясь...

[borland c++] добавление записей в БД с помощью компонентов zeos
Доброго времени суток имеется база на mysql, до этого особо с базами не работал разобрался как...

Программное удаление вкладок PageControl
Уважаемые программисты помогите пожалуйста. Как удалять закладки TabSheet в PageControl...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.