Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2012, 01:27   #1
nls
Пользователь
 
Регистрация: 25.12.2011
Сообщений: 20
По умолчанию Центрировать дочернюю форму по основной

Сорри за название темы, дело ко сну идёт.

В общем суть:

Есть 1 форма (главная) и есть 2-я (дочерняя). Чтобы мне хотелось сделать:

При нажатии кнопки, расположенной на главной форме, открывалась бы дочерняя форма (поверх главной), причём отображаться она должна по центру относительно главной формы. Вроде не сложно, а сделать не получается. Попробовал в свойствах дочерней формы выставить значение поля Position в poMainFormCenter и poOwnerFormCenter. Способ работает, но если после закрытия дочерней формы, передвинуть главную и вновь открыть дочернюю, то дочерняя форма отобразиться на той позиции, в которой она была в прошлый раз (совсем не по центру главной формы).

Есть ли какой-нибудь вариант побороть проблему?
nls вне форума Ответить с цитированием
Старый 29.01.2012, 07:05   #2
IvaD
Пользователь
 
Аватар для IvaD
 
Регистрация: 15.11.2011
Сообщений: 16
По умолчанию

Код:
procedure TForm2.FormShow(Sender: TObject);
var x,y:real;
begin
 x:=form1.left+((form1.Width-form2.Width)/2);
 y:=form1.top+((form1.Height-form2.Height)/2);
 form2.left:=Trunc(x);
 form2.top:=Trunc(y);
end;
Вот на скорую руку набросал
IvaD вне форума Ответить с цитированием
Старый 29.01.2012, 08:59   #3
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Значит вы полностью не уничтожаете вторую форму при закрытии, а просто скрываете её.
FaTaL вне форума Ответить с цитированием
Старый 29.01.2012, 11:03   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

ИМХО так проще:
Код:
procedure TForm2.FormShow(Sender: TObject);
begin
 Left:=(form1.width div 2)-(form2.width div 2)+form1.Left;
 Top:=(form1.Height div 2)-(form2.Height div 2)+form1.Top;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.01.2012, 12:45   #5
nls
Пользователь
 
Регистрация: 25.12.2011
Сообщений: 20
По умолчанию

Всем спасибо за помощь, сделал способом Stilet. Все супер.
nls вне форума Ответить с цитированием
Старый 29.01.2012, 17:37   #6
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Это то проще. Но смотря как он вторую форму вызывает. Вдруг каждый раз по новому создает, тогда лишняя память тратиться.
FaTaL вне форума Ответить с цитированием
Старый 29.01.2012, 22:53   #7
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Если форма динамически создается каждый раз, то наверное проще CustomForm.Position:= MainFormCenter;
_Engine_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить из памяти дочернюю форму.Дельфи Человек Панда Помощь студентам 3 13.10.2011 22:26
Как открыть дочернюю MDI форму из другой дочерней Sullla Общие вопросы Delphi 9 15.08.2011 07:27
Закрыть приложение через дочернюю форму Человек Панда Помощь студентам 4 15.07.2011 23:08
Как поместить форму в bpl файл, а из основной программы только создавать ее? <Konstantin> Общие вопросы Delphi 1 30.03.2011 20:55
Центрировать диалог на главной форме ZvEr_HaCkEr Общие вопросы Delphi 9 25.08.2010 05:34