|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
19.04.2012, 16:16 | #1 |
Пользователь
Регистрация: 08.01.2012
Сообщений: 12
|
Многооконное приложение из однооконного
Проблема в следующем.
Есть программа-одна форма. Там есть чекбоксы, радиобаттоны, эдиты и т.п.-типа производится настройка параметров перед вычислениями. Потом программа считывает установленные параметры, обращаясь к соответствующим эдитам и т.д. Возникла необходимость модернизировать прогру, добавить возможностей. иеста на главной форме уже нет. Надо вынести часть настрое в отдельные окна или фреймы. 1. Что для этого лучше-фрейма или окна (формы)? 2. Стал пробовать с дочерними формами. Создал, перенес интересующие поля на дочернюю форму (Контрол-Х, Контрол-V), устанавливил свойство Form Style в fsMDIForm для основной формы и в fsMDIChild для второй формы, на которую перенес кнопки, в свойствах проекта перенес вторую форму в Auto Create form. Да, сделал чтобы в коде обоих форм были перекресные инклуды заголовочных файлов - с помощью Инклуде Юнит Хедер. Запускаю Run-выдает ошибки в коде программы - неопределенные символы "RadioGroup1" и.т.д.-все боксы и поля не распознаются. Что я делаю не так? |
19.04.2012, 16:27 | #2 |
Форумчанин
Регистрация: 14.10.2011
Сообщений: 267
|
Я рекомендую применить компонент PageControl (из "Win32"); сам этим пользуюсь регулярно. Во первых: не появляется новая куча файлов, как с новыми формами, во вторых: все переменные и контролы доступны как обычно, в третьих: в режиме дизайна можно свободно перемещаться по вкладкам и размещать на них компоненты, как на чистой форме.
|
19.04.2012, 16:46 | #3 |
Пользователь
Регистрация: 08.01.2012
Сообщений: 12
|
Я уже использую ТабКонтролы-да, это выход и я об этом думал - но хотел, чтобы можно было перемещать по окну главной формы, вынести за пределы главного окна и т.д.
|
19.04.2012, 17:24 | #4 |
Форумчанин
Регистрация: 17.11.2010
Сообщений: 262
|
Если вы их убрали из главного окна, а обработчики событий на эти компоненты оставили, то будет ошибка. Страницы не всегда хороши. А вы правильно создаете дочернее окно?
|
19.04.2012, 17:51 | #5 | |
Пользователь
Регистрация: 08.01.2012
Сообщений: 12
|
Цитата:
Если файл открылся успешно, сделать активным поле второй формы. И вот это поле - неопределенный символ для первой формы. А дочернее окно создавал так: 1. Файл-Нью-Форм 2. В свойствах проекта Ран-Опшенс перенес вторую форму из Эвейлебл в Автокриейт формс 3. В свойствах форм ФормСтайл установил в родительский для первой и в дочернюю для второй 4. меню Файл-ИнклюдеЮнитХедер установил так,Ю чтобы в проекте первой формы был указан заголовочный файл второй формы и наоборот. 5. Сонтрол-Х, Сонтрол-V интересующие меня поля и группы из первой формы во вторую Что еще нужно сделать, чтобы не выдавало ошибки? Как правильно сделать так, чтобы события, происходящие на второй форме - были понятны родительской форме-ну типа на дочерней изменил значение в Эдит, а при обработке событий первая форма могла прочитать значение этого поля. Или первая форма, в случае условного оператора, могла проверить это условие в зависимости от выбора, сделанного на второй форме. |
|
19.04.2012, 18:01 | #6 |
Форумчанин
Регистрация: 14.10.2011
Сообщений: 267
|
- ну, это просто: Form1->CheckBox2->Checked ... Form2->Edit4->Text ... if(Form3->RadioGroup1->ItemIndex==3) ... и т.д. (указывать родителя...).
|
19.04.2012, 18:36 | #7 |
Форумчанин
Регистрация: 17.11.2010
Сообщений: 262
|
Создание дочерней формы
1. В файле project удалить create 2. В родительской форме на нужное вам событие Код:
Код:
|
19.04.2012, 19:08 | #8 |
Пользователь
Регистрация: 08.01.2012
Сообщений: 12
|
Ну я понял принцип-спасибо. Вроде сделал. Но Запускаю Ран-выводится только основная форма. Вторая форма с настройками не выводится...
|
19.04.2012, 19:16 | #9 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Она и не выведется автоматически. Её нужно вызывать кнопкой или разделом меню, вот так:
Form2->Show(); Или: Form2->ShowModal(); В этом случае форма вызывается как модальная.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
19.04.2012, 19:29 | #10 | |
Пользователь
Регистрация: 08.01.2012
Сообщений: 12
|
Цитата:
Application->CreateForm(__classid(TForm1), &Form1); Application->CreateForm(__classid(TFilterOption s), &FilterOptions); ? Ну, объявить переменные второй формы Паблик - это понятно. Но если не все там делается переменными - например, проверка состояния флагов. Конечно, это Итемс-ы? - их глобальными не объявить ведь. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Приложение | ALEX777a | Фриланс | 5 | 14.03.2012 13:27 |
многопоточное приложение | favorite | Общие вопросы Delphi | 0 | 26.05.2011 19:47 |
Многооконное приложение | Miha85193 | Общие вопросы Delphi | 1 | 03.12.2010 01:49 |
Задача:в вижуал с++ Разработать приложение-сервер и приложение (смотри дальше сообщение) | Мила777 | Фриланс | 2 | 21.10.2009 11:05 |