![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| shmelina |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
Для некой программы разрабатывается собственный дизайнер формы.
Первое что пришло в голову, это создать форму и в качестве родителя указать ей другую форму. Вроде получилось как надо. Но есть несколько "но": 1. Заголовок у дочерней формы неактивный. Но с этим можно жить. 2. Если по полю TEdit (который на дочерней форме) кликнуть левой кнопкой мышки, то оно не получает фокус и курсор туда не ставится. Но ставится, почему-то, правой кнопкой. Вопрос: можно ли поведение этой формы сделать стандартным? К сожалению, MDI решение не получится применить. Чтобы лучше понять что я имею в виду сделайте простую программу: 1. Создайте главную форму (Form1). Положите на нее кнопку. Напишите обработчик для этой кнопки:
2. Создайте вторую форму (Form2) и разместите на ней несколько TEdit. 3. ВСЕ! Попробуйте запустить приложение, нажать кнопку и посмотреть как ведет себя дочерняя форма. Всякие шаманства с CreateParams результатов не принесли. Возможно не все делал правильно. Удалось лишь только отключить заголовок окна дочерней формы и она стала вести себя правильно.
Но без заголовка как-то грустно. Есть идеи?
|
||||||
|
|||||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: 5 Всего: 8 |
||||
|
||||
| Louken |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 13.9.2008 Где: Кострома Репутация: 1 Всего: 1 |
А можно поинтерисоваться, по какой причине? Я как то пару лет назад делал нечто подобное, что и дизайнер формы Delphi2005 и более поздних версий Delphi. Т.е. форма, не получающая фокус, с изменяющимися размерами, на ней можно размещать контролы, перемещать их, изменять их размеры и т.д., т.е. стандартные действия редактора. Все размеры, в том числе и размеры формы изменяются с помощью маркеров, рисуемых над контролами. Т.е. почти тот же функционал, что и в Delphi. И все это было сделано именно с помощью модальной формы, хотя можно, наверно, переделать и на немодальную форму. |
|||
|
||||
| shmelina |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
Форма, на которой будет лежать форма, сама является MDIChild.
Ты про модальную форму или про MDI? |
||||
|
|||||
| shmelina |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
Огромное спасибо! Пример помог! Правда я использовал оттуда только:
Всякие CreateParams и BroadCast я не использовал. Возможно чего-то не понимаю. Да и в примере как-то не корректно, на мой взгляд, они использованы. Например, там есть идея делать активной или неактивной дочернюю форму на событиях OnActive и OnDeactive у главной формы. Странно. Во-первых, надо делать на событиях приложения (Application), а не главной формы. Во-вторых, при обоих событиях посылается команда сделать дочернее окно активным! Ну да ладно, главное у меня получилось. Привожу упрощенный код для двух форм. Вернее для одной, для второй ничего делать не надо.
Добавлено через 3 минуты и 3 секунды А есть примеры как сделать квадратики у элементов на форме, чтобы за них менять размеры? Пока все управляется кнопками. Хочется поменьше извращений и побольше стандартных методов. |
||||||
|
|||||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: 5 Всего: 8 |
В том примере форма меняет размеры, можешь просто подрисовать квадратики у углов формы и пусть юзер думает что он за них тянет
Есть еще вариант сделать эти квадратики компонентом TShape и двигать их Это сообщение отредактировал(а) RomanEEP - 8.6.2009, 20:24 |
|||
|
||||
| Louken |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 13.9.2008 Где: Кострома Репутация: 1 Всего: 1 |
Так и знал. Про MDI конечно же, чето я попутал.
не стоит так делать, лучше панельки с каким-то цветом, а то TShape не смогут быть поверх TWinControl компонентов. В свое время сам долго бился над этой проблемой и меня посетила гениальная до простоты мысль (мне такой она показалась в начале), которая решила все мои броблемы, с этими квадратиками над контролами. Сделай прозрачный контрол, разверни его на всю форму и сдели за тем, чтоб он всегда был поверх остальных контролов (BringToFront после создания каждого нового контрола). И тогда на этом прозрачном контроле можно рисовать все что угодно, квадратики, рамку перемещения контрола и прочее. Хотя в этом способе, так же имеются недостатки, типа мерцание будет, когда надо будет перерисовать всю форму, чтоб убрать квадратики например, но с этим можно бороться. |
||||||
|
|||||||
| shmelina |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
Я уже не про форму, а про контролы на форме. Правильно ли я понял, что стандартных (почти готовых) методов нет, нужно все делать ручками? |
|||
|
||||
| Louken |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 13.9.2008 Где: Кострома Репутация: 1 Всего: 1 |
||||
|
||||
| shmelina |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 5.6.2009 Репутация: нет Всего: нет |
Спасибо за советы/ответы. Хороший форум. Буду сюда ходить
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |