Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
4 / 4 / 2
Регистрация: 18.10.2009
Сообщений: 23

Динамический массив форм

21.06.2012, 10:49. Показов 3673. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Максимум того что я нашёл в интернетах - создание массива кнопок. В классе окна прописывался контейнер map, либо vector и туда загружались динамически созданные компоненты.
Есть ли возможность также создать массив окон? Или предел возможностей это: файл->Новый->Форма?
Использую RAD Studio 2007.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.06.2012, 10:49
Ответы с готовыми решениями:

Динамический массив при наследовании, элементами которого являются объекты класса наследника динамический массив
Попробовал создать динамический массив, у которого элементы - объекты класса динамический массив, причем использовал класс-наследник от...

Динамический массив ,элементами которого являются объекты класса динамический массив
Доброго времени суток, захотел создать динамический массив ,элементами которого являются объекты класса динамический массив, если...

Создать динамический класс Book, содержащий динамический массив Authors
Мне нужно написать программу,а я не знаю как ее написать. Знаю, тут люди за кого-то не делают, укажите хотя бы направление. вот сама...

9
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
21.06.2012, 11:47
Цитата Сообщение от pirogg Посмотреть сообщение
Есть ли возможность также создать массив окон?
Цитата Сообщение от pirogg Посмотреть сообщение
Максимум того что я нашёл в интернетах - создание массива кнопок.
Основная проблема большинства пользователей CBuilder - это то, что они не хотят изучать C++.
Создать кнопку - это создать экземпляр класса (TButton, например), создать окно - это создать экземпляр класса (TForm, например).

Поэтому массив окон необходимо рассматривать в первую очередь как массив экземпляров класса:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
TForm * FormArray[10];
for (int i=0;i<10;i++) {
     FormArray[i] = new TForm(Application);
     FormArray[i]->Left = i * 10;
     FormArray[i]->Show();
}
 
Sleep(3000);
 
for (int i=0;i<10;i++) {
     delete FormArray[i];
     FormArray[i] = 0;
}
Добавлено через 2 минуты
Цитата Сообщение от pirogg Посмотреть сообщение
Максимум того что я нашёл в интернетах

Не по теме:

Как говорил Джордж Буш: "Ох, уж эти ваши интернеты..." :-)

2
3 / 3 / 0
Регистрация: 22.02.2011
Сообщений: 46
22.06.2012, 16:00
Добрый день, Maluda.

При закрытии приложения сохраняю список открытых в данный момент формах:

C++
1
2
3
4
5
6
7
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
  ini->EraseSection("Windows");
  for (int ii=0; ii<MDIChildCount; ii++)
  {
    ini->WriteString ( "Windows", ii, MDIChildren[ii]->ClassName() );
  }
}

Теперь при создании главной формы необходимо прочитать секцию в ini файле и открыть окна записанные в ini-файле:
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
  TStringList *Section = new TStringList;
  ini->ReadSection("Windows", Section);
 
  for (int ii=0; ii < Section->Count; ii++)
  {
    ???????????????????????????????????;
  }
}
0
 Аватар для Maluda
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
22.06.2012, 18:31
sergey.ivanov, немного не понял вопрос, какая стоит задача?
Вы записываете название класса?

Что хотите получить при чтении? Создание объекта по имени класса?

Добавлено через 26 минут
Думаю, понял задачу.
Набросал пример сохранения и открытия MDI окон.

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
#include <memory>
#include <IniFiles.hpp>
 
void __fastcall TMainForm::CreateMDIChild(const String &sName) {
    //--- create a new MDI child window ----
    TMDIChild *Child = new TMDIChild(Application);
 
    if (FileExists(sName)) {
        Child->Memo1->Lines->LoadFromFile(sName);
        Child->Caption = sName;
    }
    else {
        Child->Caption = "File <" + sName + "> is not found!";
    }
}
 
//---------------------------------------------------------------------------
void __fastcall TMainForm::SaveMDILayout() {
    std::auto_ptr<TIniFile>AIniFile(new TIniFile("test.ini"));
    for (int i = 0; i < this->MDIChildCount; i++) {
        AIniFile->WriteString("Windows", i, this->MDIChildren[i]->Caption);
    }
}
 
//---------------------------------------------------------------------------
void __fastcall TMainForm::LoadMDILayout() {
    // удаление всех открытых окон
    while (this->MDIChildCount) {
        this->MDIChildren[0]->Free();
    }
 
    std::auto_ptr<TStringList>AWindowsStrings(new TStringList());
 
    std::auto_ptr<TIniFile>AIniFile(new TIniFile("test.ini"));
    AIniFile->ReadSection("Windows", AWindowsStrings.get());
 
    for (int i = 0; i < AWindowsStrings->Count; i++) {
        CreateMDIChild(AIniFile->ReadString("Windows", AWindowsStrings->Strings[i], "Error value"));
    }
}
0
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 4
26.06.2012, 20:29
День добрый. Хочу сделать заметки на рабочем столе. Создаю массив форм. А как мне теперь корректно закрыть и удалить из массива конкретную форму? Формы создаются программно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
TForm *MyForm[5];
int i=0;
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(i>4){
AnsiString msg = "Нельзя создавать так много заметок";
Application->MessageBox(msg.c_str(),
Application->Title.c_str(),
MB_OK | MB_ICONINFORMATION);
} else{
MyForm[i] = new TForm(this);
MyForm[i]->Name = "Stick" + IntToStr(i + 1);
MyForm[i]->Caption = "Заметка" + IntToStr(i + 1);
MyForm[i]->Show();
i++;  }
 
//delete MyForm[i];
 
}
0
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 4
29.06.2012, 06:09
Выслушаю любую идею.
Не бросайте меня на произвол судьбы)
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
29.06.2012, 16:25
AAntonoff, книжки читать надо да запоминать, а не на произвол судьбы отдаваться.
C++
1
2
3
MyForm[2]->Close();
delete MyForm[2];
for(size_t i = 2; i < 5; MyForm[i] = ( i == 4 ? NULL: MyForm[i + 1] ) );
1
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 4
30.06.2012, 14:01
BRcr, Спасибо) Я немного уточню вопрос. Вот создается у меня форма, кнопку закрытия на ней создавать не хочу (Есть только крестик). Не могу понять ГДЕ писать код закрытия и удаления из массива, если формы в принципе не существует изначально!
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.07.2012, 01:45
Для того и есть указатели на обработчики событий, чтоб не только в инспекторе объектов мышкой тыкать можно было.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// ...
MyForm[i] = new TForm(this);
MyForm[i]->Name = "Stick" + IntToStr(i + 1);
MyForm[i]->Caption = "Заметка" + IntToStr(i + 1);
MyForm[i]->Show();
MyForm[i]->OnClose = &dyn_form_close;
// ...
void __fastcall TForm1::dyn_form_close(TObject *Sender, TCloseAction &Action){
  Action = caFree;
  TForm *f = dynamic_cast<TForm *>(Sender);
  for(size_t i = 0, b = 0; i < 5; MyForm[i] == f ? ++b: 0, 
            b > 0 ? MyForm[i] = ( i == 4 ? NULL: MyForm[i + 1] ): f, ++i );
}
1
0 / 0 / 0
Регистрация: 26.06.2012
Сообщений: 4
01.07.2012, 14:46
BRcr, Спасибо, попробую разобраться)

Добавлено через 4 часа 7 минут
BRcr, dyn_form_close как описать? Говорит непонятный символ.

Добавлено через 19 минут
Цитата Сообщение от BRcr Посмотреть сообщение
void __fastcall TForm1::dyn_form_close(TObject *Sender, TCloseAction &Action)
И еще я никогда сам не писал такого (надо учиться=)) Вот это тоже нужно где то описать, в .h? Можно чуть по подробнее. Не сочтите за наглость=)

Добавлено через 23 минуты
BRcr, Разобрался)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.07.2012, 14:46
Помогаю со студенческими работами здесь

Создать динамический класс Book, содержащей динамический массив Authors
всем привет. может кто-то набросать код для такой вот задачи: Создать динамический класс Book, содержащей динамический массив...

Сделать динамический массив структур, причем в структуре так же существует динамический массив
Добрый день. Есть такая пзадача: нужно сделать динамический массив структур, причем в структуре так же существует динамический массив....

Динамический массив: выписать из него элементы в другой массив без повторений
Всем привет, проблема, дан отсортированный динамический массив , в нем есть повторяющиеся элементы, надо выписать из него элементы в...

Можно ли в классе создавать массив переменной длинны. Например динамический массив?
Динамические массивы привлекают больше. :)

Скопировать динамический массив в другой массив только с положительными элементами из первого
Пользователь вводит размер массива и сам массив. Программа копирует в другой массив только положительные элементы из первого. Оба массива...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru