![]() |
|
#1
|
|||
|
|||
![]() Здравствуйте подскажите пожалуйста как правильно масштабировать форму под разрешение экрана .
Пытаюсь делать так Код:
procedure TForm1.FormCreate(Sender: TObject); var W,H : Integer ; begin w:=Screen.Width; h:=Screen.Height; BorderStyle := bsNone; FormStyle := fsStayOnTop; Left := 0; Top := 0; Height := h; Width := w; panel1.Left:=0; panel1.Top:=0; panel1.ScaleBy(w,h); end; Подскажите пожалуйста что я не так делаю? |
#2
|
|||
|
|||
![]() Неправильно используете функцию ScaleBy. Смотрим справку -
Цитата:
В Вашем случае подойдет использование метода SetBounds для панели - panel1.SetBounds(0, 0, w, h); Из справки: Цитата:
На заметку, для формы так же можно вызвать SetBounds. Причем в данном случае с теми же параметрами, что и для панели. Т.е. SetBounds(0, 0, w, h); Последний раз редактировалось nixel, 25.03.2012 в 23:04. |
#3
|
|||
|
|||
![]() не выходит и так ! при изменение разрешения все компоненты в панели вылазят за границы экрана.
Пожалуйста сделайте небольшой пример чтоб в форме всё масштабироваллось под разные мониторы. А то уже месяц с этим бьюсь и не как не выходит. |
#4
|
|||
|
|||
![]() При изменении разрешения?
Т.е. Вы вручную меняете разрешение монитора в настройках ОС? Тогда SetBounds надо использовать не при создании формы, а как-то отлавливать изменение разрешения монитора. По уму, скорее всего есть какое-то решение на WinAPI, не по уму можно проверять значение ширины и высоты экрана в таймере. З.ы. Подгонку размера через ScaleBy можно сделать сразу по двум измерениям так, чтобы панель не вылезала за экран, ТОЛЬКО при условии, что ее начальные размеры (те, с которыми она создавалась, неважно в дизайнтайм или в рантайм) прямо пропорциональны текущему разрешению экрана. В любом другом случае масштабирование произойдет с ошибкой по одному измерению (либо высоте, либо ширине, в зависимости от того, по какому измерению Вы будете высчитывать коэффициенты M и D), и после масштабирования надо будет принудительно подгонять под экран второе измерение. Зы2. В общем, направление движения, думаю, задал, а там может более сведущие в системных делах товарищи помогут =) |
Этот пользователь сказал Спасибо nixel за это полезное сообщение: | ||
Gudzik11 (31.03.2012)
|