Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
6 / 6 / 3
Регистрация: 06.02.2013
Сообщений: 71
Builder 6

Создать динамическую форму

28.04.2013, 18:10. Показов 2900. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
- Здравствуйте Всем! Пробовал сделать в BCB6 динамическую форму. Пока ничего не
вышло. Сделать свой VCL-компонент на базе формы нельзя, т.к. список прородителей
моего нового VCL-компонента (Component->New Component...->AncestorType) не содержит
TForm.
- Если пробую вручную создать модуль-форму типа приведенного ниже:
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
//<<< Файл интерфейса "Unit1.h" >>>
 
#ifndef     Unit1H
#define     Unit1H
 
 
//------------------------------------------------------------------------------
//#include <Classes.hpp>
//#include <Controls.hpp>
//#include <StdCtrls.hpp>
#include <Forms.hpp>
//------------------------------------------------------------------------------
 
 
//##### ..... #####
//------------------------------------------------------------------------------
class   TSt : public    TForm
{
private:
 
public:
    // конструктор.
    __fastcall  TSt( TComponent* Owner );
 
};  //(class TSt)
//------------------------------------------------------------------------------
 
//------------------------------------------------------------------------------
#endif  //(Unit1H)
//==============================================================================
//<<< Файл реализации "Unit1.cpp" >>>
 
//##### ..... #####
#pragma hdrstop //--------------------------------------------------------------
#include    "Unit1.h"   // собственный интерфейс.
 
//------------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TSt*    St;
//------------------------------------------------------------------------------
 
 
//##### ..... #####
// конструктор.
__fastcall  TSt::TSt( TComponent* Owner )
    : TForm( Owner )
{
}
то жалуется линкер, что не может открыть файл "UNIT1.DFM".

А я хотел далее создавать и удалять динамические формы из основного модуля, как
это делается с динамическими Клавишами и Едитами ...
C++
1
2
3
    TSt*    St = new    TSt( this );
    St->Parent = this;
    // ......... и т.д.
Подскажите как это делается грамотно? Заранее благодарен.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.04.2013, 18:10
Ответы с готовыми решениями:

Как создать динамическую матрицу?
Здравствуйте программисты! Дали задание по матрицам, дело в том,что их нужно создать динамически....

Создать динамическую матрицу вещественных чисел
здрасти, помогите создать двумерный динамический массив вещест. чисел

Подскажите, как создать одномерную, динамическую строку типа char
Подскажите, как создать одномерную, динамическую строку типа char. И что бы символы вводились с...

11
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.04.2013, 18:45
оОП подкралось незаметно ?

Когда создаешь новую форму она наследуется от TForm, а не с потолка берется...
0
 Аватар для Tarik20
21 / 22 / 5
Регистрация: 14.02.2013
Сообщений: 243
28.04.2013, 18:48
Зачем сороковая строчка?
C++
1
#pragma resource "*.dfm"
Удали и будет работать!
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.04.2013, 18:50
Цитата Сообщение от Okonenko Stanis Посмотреть сообщение
то жалуется линкер, что не может открыть файл "UNIT1.DFM".
Ясно дело ведь в нем все свойства формы настроенные в дизайне ...

Создавать надо через менюшку, а не ручками :



Что бы использовать форма не создавалась автоматом в приложении её нужно перекинуть в Avalible Forms

1
6 / 6 / 3
Регистрация: 06.02.2013
Сообщений: 71
29.04.2013, 10:58  [ТС]
- Avazart - Я и создаю свою форму (TSt), как наследуемую от TForm (см. строку 18
моего листинга).

- Умом я понимаю, что как положено надо:
1) - Создать форму
File->New->Other...->Form->OK;
2) - Перевести ее в НЕ СОЗДАВАЕМЫЕ с самого начала программы:
Project->Options...->(перенести мою форму из Auto-create forms: в Available forms
->OK;
3) - По необходимости создавать и уничтожать мою форму:
TSt* St = new TSt( this );
St->Parent = this;
// .........
delete St;
- Просто хотелось узнать у знающих людей, может можно создавать их проще, вручную,
как это делается с TButton или TEdit... Огромное спасибо Вам LK и Avazart за ссылки!
Оказывается эта тема уже широко обсуждается, а я просто не попадал на нее. Сейчас буду
читать и разбираться ...

- Tarasichok - Без 40-й строчки конечно все компилится и собирается, но во время
выполнения дает ran-time ошибки. Форме не хватает слишком многих установок, которые
и должны быть в ***.dfm-файле.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.04.2013, 13:56
Цитата Сообщение от Okonenko Stanis Посмотреть сообщение
может можно создавать их проще,
Блин куда может быть проще ?

Добавлено через 53 секунды
Цитата Сообщение от Okonenko Stanis Посмотреть сообщение
вручную,
как это делается с TButton или TEdit...
А кто в ручную их создает ?
Создают также через меню Component->New Component...
0
6 / 6 / 3
Регистрация: 06.02.2013
Сообщений: 71
30.04.2013, 17:37  [ТС]
- Avazart, другими словами, хоть через File->..., хоть через Component->..., все равно ЧЕРЕЗ СРЕДУ!
А TButton и TEdit создаются непосредственно из кода! Но ладно ..., будем считать, что и это хорошо!
Всем большое спасибо!
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.04.2013, 17:39
Цитата Сообщение от Okonenko Stanis Посмотреть сообщение
А TButton и TEdit создаются непосредственно из кода!
Т.е из кода?
1
6 / 6 / 3
Регистрация: 06.02.2013
Сообщений: 71
09.05.2013, 13:52  [ТС]
- Спасибо Вам Avazart за участие в этой теме! Я более или менее разобрался
в вопросе ... Ранее я по неопытности думал, что нельзя создать Форму прямо из кода,
как это делается, например, для клавиши:
C++
1
2
3
    TButton*  btn = new  TButton( this );
    btn->Parent = this;
    // ..... и т.д.
- Теперь я уразумел, что примерно то-же можно делать и с формой.
Например так:
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
// конструктор.
__fastcall TForm1::TForm1( TComponent*  Owner )
    : TForm( Owner )
{
    // создание динам. формы.
    form = new  TForm( Application );
    form->Position = poScreenCenter;
    form->OnDestroy = &form_destroy;
    form_activated_first_time = true;
 
    // создание динам. клавиши (на динам. форме).
    TButton*  btn = new  TButton( form );
    btn->Parent = form;
    btn->SetBounds( 10, 10, 100, 50 );
    btn->Caption = "close";
    btn->OnClick = &btn_click;
}
// ---------------------------------------------------------------------------
// .........
void __fastcall  TForm1::FormActivate( TObject*  Sender )
{
    if ( form_activated_first_time  && form )
    {
        form_activated_first_time = false;
        form->Show();
    }
}
- Еще раз Спасибо!
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.05.2013, 13:55
Только непонятно зачем делать это

C++
1
2
3
4
5
6
7
8
9
    form->OnDestroy = &form_destroy;
    form_activated_first_time = true;
 
    // создание динам. клавиши (на динам. форме).
    TButton*  btn = new  TButton( form );
    btn->Parent = form;
    btn->SetBounds( 10, 10, 100, 50 );
    btn->Caption = "close";
    btn->OnClick = &btn_click;
Когда можно наследоваться и в дизайнере кинуть кнопку и назначить обработчик события.
1
6 / 6 / 3
Регистрация: 06.02.2013
Сообщений: 71
09.05.2013, 14:53  [ТС]
C++
1
2
3
4
5
6
7
8
9
    form->OnDestroy = &form_destroy;
    form_activated_first_time = true;
 
    // создание динам. клавиши (на динам. форме).
    TButton*  btn = new  TButton( form );
    btn->Parent = form;
    btn->SetBounds( 10, 10, 100, 50 );
    btn->Caption = "close";
    btn->OnClick = &btn_click;
- Avazart, первые две строчки в Вашем вопросе это пережиток старых мыслей:
- form->OnDestroy = &form_destroy; - это чтобы ясней увидеть факт разрушения
динам. формы.
- form_activated_first_time = true; - Вывод на экран динам. формы производится из
обработчика OnActivate основной формы, чтобы динам. форма лежала поверх
основной. Если не использовать этот ключ, то программа будет пытаться выводить
динам. форму на экран и когда это надо, и когда это просто не возможно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.05.2013, 14:53
Помогаю со студенческими работами здесь

Создать динамическую записную книжку, используя структуру
Создать динамическую записную книжку, используя структуру struct book{ char name; char...

Создать класс Vector – вектор, используя динамическую память
Создать класс Vector – вектор, используя динамическую память. Определить операторы &quot;+&quot; –...

Создать класс Vector – вектор, используя динамическую память
Может кто подскажет листинг этой программы???

Создать динамическую струтуру-массив с типом string и int
Здравствуйте. Учу C++ по книге Прата и делаю его задачи. И тут попалась вот такая задача: создать...

Как создать динамическую библиотеку .so с классами
Здравствуйте! Возник вопрос, как вообще изпользовать классы в .so библиотеке, чтобы я мог её...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru