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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2010, 15:56   #1
Grandistok
Пользователь
 
Аватар для Grandistok
 
Регистрация: 13.09.2009
Сообщений: 23
По умолчанию Позициирование формы

Здравствуйте уважаемые гуру. Вот столкнулся с такой проблеммой:

по нажатии кнопки создаю форму таким образом
Код:
FormSelectBase:=TForm.Create(self);
FormSelectBase.Name :='FormSelectBase';
FormSelectBase.Width:=175;
FormSelectBase.Height:=175;
FormSelectBase.BorderStyle:=bsSizeToolWin;
FormSelectBase.BringToFront;
FormSelectBase.Show;
FormSelectBase.Top:=Screen.ActiveForm.Top+150;
FormSelectBase.Left:=Screen.ActiveForm.Left+200;
FormSelectBase.OnClose:=CloseFormSelectBase;

Procedure TMain.CloseFormSelectBase(Sender: TObject; var Action: TCloseAction);
var
Com:TComponent;
begin
Com:=FindComponent('FormSelectBase');
(com as TForm).free;
end;
После создания я хочу поставть форму в определеннле место но она становится в него с маленьким сдвигом по горизонтали и вертикали, плюс после закрытия и повторного вызова она сдвигается еще немного т.е. распологается каскадом. Как можно избавиться от этого?
С уважением добрый парень-убийца…
Grandistok вне форума Ответить с цитированием
Старый 21.02.2010, 18:32   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Ну, во-первых, и ваш вариант никакого сдвига у меня не давал.
Единственное - позиция совсем не та.
Почему ?
Очень просто:
Код:
FormSelectBase:=TForm.Create(self);
FormSelectBase.Name :='FormSelectBase';
FormSelectBase.Width:=175;
FormSelectBase.Height:=175;
FormSelectBase.BorderStyle:=bsSizeToolWin;
FormSelectBase.Top:=Screen.ActiveForm.Top+150;
FormSelectBase.Left:=Screen.ActiveForm.Left+200;
FormSelectBase.Show;
FormSelectBase.BringToFront;
//FormSelectBase.Top:=Screen.ActiveForm.Top+150;
//FormSelectBase.Left:=Screen.ActiveForm.Left+200;
FormSelectBase.OnClose:=CloseFormSelectBase;
mihali4 вне форума Ответить с цитированием
Старый 21.02.2010, 18:38   #3
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Действительно, никакого смещения.

А во-вторых. Зачем вот это?
Код:
FormSelectBase.OnClose:=CloseFormSelectBase;

...

Procedure TMain.CloseFormSelectBase(Sender: TObject; var Action: TCloseAction);
var
Com:TComponent;
begin
Com:=FindComponent('FormSelectBase');
(com as TForm).free;
end;
Sibedir вне форума Ответить с цитированием
Старый 21.02.2010, 22:14   #4
Grandistok
Пользователь
 
Аватар для Grandistok
 
Регистрация: 13.09.2009
Сообщений: 23
По умолчанию

О боги мне стыдно зарекался писать код в 4 часа утра но увлекаюсь и немогу остановиться потом вот пристаю к вам с глупыми вопросами
Код:
Com:=FindComponent('FormSelectBase');
(com as TForm).free;
заменил на
Код:
Action := caFree;
И форма перестала сдвигаться

А вот с позициированием все равно не получается. Попытыюсь обьяснить:
Например у мне нужно поставить созданную форму в координаты 200,200 моего основного окна
Код:
FormSelectBase.Top:=200;
FormSelectBase.Left:=200;
И она выводится в координаты 200,200 ЭКРАНА. А мне нужно 200,200 относительно МОЙ ФОРМЫ (тк пользователь может таскать форму по экрану куда угодно и я не знаю ее экранных координат). Пробовал делать вот так (нашел в интернете)
Код:
FormSelectBase.Top:=ClientToScreen(Point(200,200)).x;
FormSelectBase.Left:=ClientToScreen(Point(200,200)).y;
Но результат аховый выводимая форма попадает совсем не туда куда я хочу причем ее место на экране в зависимости от положения основного окна вообще непонятно откуда берется
Подскажите пожалуйста как привязать позицию выводимой формы к определенной координате в окне приложения?
С уважением добрый парень-убийца…
Grandistok вне форума Ответить с цитированием
Старый 21.02.2010, 23:56   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Код:
FormSelectBase.Top:=FMain.Top+200;
FormSelectBase.Left:=FMain.Left+200;
FormSelectBase.Show;
FormSelectBase.BringToFront;
mihali4 вне форума Ответить с цитированием
Старый 22.02.2010, 15:15   #6
Grandistok
Пользователь
 
Аватар для Grandistok
 
Регистрация: 13.09.2009
Сообщений: 23
По умолчанию

Спасибо вам всем большое, как обычно все гениальное оказалось просто
С уважением добрый парень-убийца…
Grandistok вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как привязать размеры содержимого формы к размерам самой формы acid_bmstu Общие вопросы Delphi 4 05.02.2010 05:02
Как программно закрыть все открытые модальные формы перед сворачиванием главной формы в трей? SkAndrew Общие вопросы Delphi 8 27.01.2010 22:44
Заполнение поле формы автоматически из другой формы!! Магомед Microsoft Office Access 8 28.07.2009 13:49
Как сделать границы формы другого цвета,формы?? Дима я Общие вопросы Delphi 3 22.06.2009 07:24
Обращение из формы в dll к элементу главной формы (delphi) a_n_n_a Помощь студентам 3 10.05.2009 04:00