Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Изменение размера формы при выполнении программы [D7, Win2k]


АМБ ©   (2005-08-02 10:26:00) 

Программа имеет на форме компоненты: DBGrid, Memo, Edit и кнопочки. Сделал так, что при выполнении программы, если изменить размер формы, то меняются соответственно и размеры компонент и координаты кнопок. Отрабатывается событие: FormCanResize, где написано

...
 edtFilter.Width := frmMain.Width - 71;
 edtFilter.Top := frmMain.Height - 68;

 btnOnFilter.Left := frmMain.Width - 65;
 btnOnFilter.Top := frmMain.Height - 68;
...

И все работает как надо, но... только на моем рабочем компьютере (Win 2000), на котором подбирались вычитаемые величины. При запуске экзешника на домашнем(Win NT4), настройки сбиваются и появляются скроллинги основной формы. Изменение разрешения на рабочем компьтере не приводит к "искажению" (т.е. к скроллингу).

Как надо делать такие эффекты (изменение формы программы с пропорциональным изменением координат и размера компонент) ПРАВИЛЬНО, чтобы при переносе на различные компьютеры, с различными ОС, различными мониторами и т.д. не возникали искажение насроек, и, как следствие, не возинкали скроллингиа???


АМБ   (2005-08-04 13:39:00) [1]


> ЮЮ
Да. Согласен. Я и сам не люблю использовать в коде константы. Поэтому, перед этим пробовал такой вариант:


dbgDBF.Height := frmMain.ClientHeight - round(dbgDBF.Left*4.5);


Тоже работает. Но, мне показалось, код тяжеловат. Хотя может и более "правильный" (не могу подобрать слово вместо "правильный")
А без коэффициента трудно подогнать "под размер".
Возможно этого можно будет избежать если с самого начало интерфейс разрабатывать с тем, чтобы не использовать коэффициенты.
Но, это в будущем. Хотя, надеюсь, не далеком.


ЮЮ   (2005-08-04 12:17:00) [2]

>Работает даже с константами

Ширина-то и в Африке останется такой же (если это не TLabel с AutoSize), а вот при использовании "крупного шрифта", высота TEdit-а изменится и будет не равна той константе, что прописана в коде.


АМБ   (2005-08-04 12:04:00) [3]

Извинте, за долгое молчание. Текучка...:о(
Попробовал варианты с Align, Alignment, Anchors. Как-то до конца еще "не проник". По - новому надо весь интерфейс строить. Но буду проповать и дальше. Так-что, спасибо за информацию.
А вот идея ЮЮ понравилась сразу. Почти сразу реализовал. Только дома проверял долго. Со временем трудно. Но все-таки проверил, все пока работает как надо. Работает даже с константами, т.е.

...
edtFilter.Width := frmMain.ClientWidth - 71;
...

Главное оказывается это ClientWidth.
Так что ЮЮ - БОЛЬШОЕ СПАСИБО...


АМБ   (2005-08-04 12:04:00) [4]

Извинте, за долгое молчание. Текучка...:о(
Попробовал варианты с Align, Alignment, Anchors. Как-то до конца еще "не проник". По - новому надо весь интерфейс строить. Но буду проповать и дальше. Так-что, спасибо за информацию.
А вот идея ЮЮ понравилась сразу. Почти сразу реализовал. Только дома проверял долго. Со временем трудно. Но все-таки проверил, все пока работает как надо. Работает даже с константами, т.е.

...
edtFilter.Width := frmMain.ClientWidth - 71;
...

Главное оказывается это ClientWidth.
Так что ЮЮ - БОЛЬШОЕ СПАСИБО...


ЮЮ   (2005-08-02 11:29:00) [5]

заменить константы габаритами компонент:

edtFilter.Width := frmMain. ClientWidth- edtFilter.Left;
edtFilter.Top := frmMain.ClientHeight - edtFilter.Height;


tesseract   (2005-08-02 11:23:00) [6]

Примерно так
внизу ставим панель Align=alBootom;
на неё ставми панель поменьше Align=alRight; на неё кладутся кнопки которые долджны быть справа.
Вверху две панели (Допустим у тебя Memo под grid)
Верхней панели AlTop нижней AlClient.
Можешь задать в Constraits максимальные/минимальный размеры панелей чтобы при свяртывании ничего не наезжало.


msguns   (2005-08-02 10:33:00) [7]

Использовать св-ва Align, Alignment, Anchors, а также сплиттеры
Строить интерфейс на базе панелей, которые автовыравниваются, а на них класть визуальные контролы со свойсвом Align := alClient


sniknik   (2005-08-02 10:30:00) [8]

Как надо ... ПРАВИЛЬНО
Anchors


Наверх

Титульная страница Поиск, карта сайта Написать письмо