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

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

21.06.2012, 10:49. Показов 3630. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru