![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Изменение размера формы при выполнении программы [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