Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/43: Рейтинг темы: голосов - 43, средняя оценка - 4.86
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249

Создание дочерней формы

21.11.2013, 11:05. Показов 9137. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Может быть вопрос элементарный, но с ходу решения не нашел.

Задача такая. Есть главная форма с кнопкой, по нажатию на которую открывается дочерняя форма. Эта дочерняя форма должна обладать следующими характеристиками:
1. На панели задач не должно быть кнопки для созданной дочерней формы.
2. Дочерняя форма должна иметь возможность свободно перемещается в пределах главной формы, не выходя за ее пределы.
3. При перемещении окна главной формы - дочерняя форма перемещается в след за ней, сохраняя свое относительное положение.
4. Когда фокус находится в дочерней форме - главная форма должна оставаться активной. То есть как будто бы это не форма, а простая панель, родителем которой является главная форма.

Как принципиально эта задача решается?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.11.2013, 11:05
Ответы с готовыми решениями:

Создание дочерней формы
Привет пипл! Очень нужна помощь! Я в С++ новичек, так что не судите строго. Вот имеется код на Delphi //процедура закрытия дочерней...

Сворачивание дочерней формы
Вообщем имеется 2 формы. 1 служит для некоторых действий, а вторая уже для полной работы (запуск с первой формы обязателен!) Когда...

Закрытие дочерней формы.
Пиплс. Есть проблема. Если в дочерней форме открывается другая форма, то при закрытии дочерней происходит ошибка. Если в дочерней...

29
10 / 10 / 4
Регистрация: 12.10.2013
Сообщений: 249
21.11.2013, 18:11  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от UI Посмотреть сообщение
но шаманство с WM_NCACTIVATE
Не подскажите какой тут надо плясать танец? А то деактивация главной формы раздражает
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
21.11.2013, 19:02
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Нитонисе Посмотреть сообщение
какой тут надо плясать танец?
Румбу:

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
// Header
class TForm1 : public TForm
{
__published:    // IDE-managed Components
 
    // ...
 
private:
protected:
    void __fastcall WndProc(TMessage &Message); // <--- !!!
 
public:
    __fastcall TForm1(TComponent* Owner);
    // ...
};
 
 
// Реализация
void __fastcall TForm1::WndProc(TMessage &Message)
{
    static bool isAppActive = true;
 
    switch(Message.Msg)
    {
        case WM_NCACTIVATE:
            Message.WParam = isAppActive;
            Message.Result = DefWindowProc(this->Handle, Message.Msg, Message.WParam, Message.LParam);
            break;
 
        case WM_ACTIVATEAPP:
            isAppActive = (Message.WParam != 0);
            LPARAM lp = 0L;
            this->Perform(WM_NCACTIVATE, 0, lp);
            Message.Result = 0;
            return;
    }
    TForm::WndProc(Message); // interited
}
"И всего делов" (С)
3
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 600
22.11.2013, 10:16
- UI, подскажите пожалуйста почему вариант:
C++
1
  ::SetParent( Form2->Handle, Handle );
работает, а вариант:
C++
1
  Form2->Parent = this;
- нет! Неужели что-то просто не доделано в Билдере ...
- А вообще-то мне кажется, что Вы зря героически сражаетесь с 4-мя недостатками (3-мя перечисленными
в посте #6 и дезактивацией Основной Формы) такими страшными средствами. Посмотрите мой вариант. Проще
просто некуда!
И лишен всех 4-х недостатков по определению. Правда это не MDI ...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
22.11.2013, 11:39
Цитата Сообщение от Staut Посмотреть сообщение
И лишен всех 4-х недостатков по определению.
Ничего подобного.

Цитата Сообщение от Нитонисе Посмотреть сообщение
Когда фокус находится в дочерней форме - главная форма должна оставаться активной.
Это не выполняется. А чтобы это изменить, и нужно обрабатывать WM_NCACTIVATE + WM_ACTIVATEAPP...

Цитата Сообщение от Staut Посмотреть сообщение
Правда это не MDI
У меня тоже не MDI. MDI, как выяснилось, автору темы не подходит.
0
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 600
22.11.2013, 13:11
- Тогда я решительно не понимаю что значит одновременно активные сразу две Формы ? Просто обе
Формы нарисованы ярким цветом ?
Ведь нельзя же вводить данные одновременно сразу в две Формы,
даже если они обе активны !
Мышка-то одна ! Все равно надо переходить от одной Формы к другой.
- Не знаю смотрели ли Вы последнее мое приложение ? Просто та Форма, с которой Вы в данный момент работаете
немного более ярко окрашена, а та с которой сейчас не работаете - чуть тускнее. Переходить от одной Формы к
другой можно бесчисленное число раз с помощью простого щелчка по нужной Форме (даже не закончив ввода в
какие-либо контролы, а потом вернувшись и все доделав).
- Спасибо UI за пример работы с Процедурой Окна Формы (это ведь API), хотя и не все еще там понимаю ...

Добавлено через 4 минуты
- Да, совсем забыл, а почему все же не работает Form2->Parent = Form1; ?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
22.11.2013, 13:12
А никто не требует одновременного ввода в 2 формы одновременно. Просто надо, чтобы, когда пользователь работает с дочерней формой, при беглом взгляде на экран было бы видно, что за приложение сейчас активно. А это - другой заголовок окна, отбрасываемая (или не отбрасываемая) родительской формой на нижележащие приложения тень, и т.д... В твоем случае, как только я активировал дочернюю форму, эти признаки у родительской формы пропали.

Цитата Сообщение от Staut Посмотреть сообщение
а почему все же не работает Form2->Parent = Form1;
Потому что так написана. Если бы у формы, которую надо сделать дочерней, не было Border-а (попробуй стиль bsNone для второй формы), то все бы работало прекрасно. А вот с рамкой VCL-евский метод SetParent работать не умеет. Поэтому надо отдать эту проблему системе, пускай она разбирается...
0
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 600
22.11.2013, 14:41
- UI, попробовал Form2->BorderStyle = bsNone; Лучше не надо, вообще приложение вылетает !
Рисует вторую Форму лишь частично и т.д. ...
- Что касается работы сразу двух Форм, то Вы имеете в виду, что вторая (не активная в данный момент Форма)
должна продолжать работать с данными, выводить всю поступающую новую информацию. Ну тогда это
может и правда ... Мне просто пока не доводилось писать таких приложений.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33480 / 21578 / 8250
Регистрация: 22.10.2011
Сообщений: 37,041
Записей в блоге: 12
22.11.2013, 14:54
Цитата Сообщение от Staut Посмотреть сообщение
вообще приложение вылетает !
И это не так. Нормально отображается форма без бордера (правда в левом верхнем углу по умолчанию). Но только это не то, что нужно ТС-у.
0
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 600
22.11.2013, 17:02
- Но вот факт. У меня-то 2-я Форма создается динамически. Добавляю в совершенно рабочее приложение
(третье мое приложение) в том месте, где вторая Форма создается и определяются ее параметры всего один
оператор:
C++
1
  frm_2->BorderStyle = bsNone;
и вторая Форма начинает рисоваться НАПОЛОВИНУ. Ну ладно, с этим можно разбираться очень долго, но совершенно
незачем.
0
 Аватар для KlikQ
3 / 3 / 4
Регистрация: 06.05.2013
Сообщений: 63
25.05.2014, 17:54
Может знаете как сделать на первой форме кнопку, чтобы при нажатии на нее закрывалась вторая? Во второй форме BorderStyle = bsNone.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2014, 17:54

Загрузка дочерней формы
Доброго времени суток. Обращаюсь к вам за советом. У меня такая проблема. В программу с самого начала грузится база данных...

Вывод из дочерней формы в главную
Есть две формы, форма1(Главная) и форма2(Побочная, которую вызываю из главной). Так вот, при по пытке вывода строки из побочной формы2 в...

Не изменяется название дочерней формы
Здравствуйте, сделал форму авторизации по данному уроку. Все работает отлично, только вот на самой форме авторизации при попытке изменить...

Доступ к методам класса главной формы из дочерней
Здравствуйте! Перелазил форум и в поисковике тоже искал, но нечего не подвернулось, может быть плохо искал. Суть втом, что я немогу вызвать...

Сохранение текста в файл из RichEdit дочерней формы MDIApplication
подскажите пожалуйста, как сохранить текст из дочерней формы с помощью SaveDialog пробую так, но выдает ошибку, что RichEdit is not a...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru