Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.03.2012, 20:22
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию ScaleBy

Здравствуйте подскажите пожалуйста как правильно масштабировать форму под разрешение экрана .
Пытаюсь делать так

Код:
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  
Старый 25.03.2012, 22:49
nixel nixel вне форума
Начинающий
 
Регистрация: 12.12.2011
Адрес: Москва
Сообщения: 150
Версия Delphi: XE2-U4
Репутация: 131
По умолчанию

Неправильно используете функцию ScaleBy. Смотрим справку -

Цитата:
procedure ScaleBy(M, D: Integer);

Rescale control and its children.

ScaleBy resizes a control without moving its upper left corner. This is similar to changing the Height and Width properties, but the control also attempts to rescale and rearrange any child controls to maintain their relative size and placement.

The M and D parameters define a multiplier and divisor by which to scale the control. For example, to make a control 75% of its original size, specify the value of M as 75, and the value of D as 100. Any pair of values that has the same ratio has the same effect. Thus M = 3 and D = 4 also makes the control 75% of its previous size.

В Вашем случае подойдет использование метода SetBounds для панели - panel1.SetBounds(0, 0, w, h);
Из справки:

Цитата:
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;


Sets the windowed control's boundary properties all at once.

Use SetBounds to change all of the control's boundary properties at once. The same effect can be achieved by setting the Left, Top, Width, and Height properties separately. By setting all four properties at once, SetBounds ensures that the control will not repaint between changes

Specify the values for the Left, Top, Width, and Height properties as the value of the ALeft, ATop, AWidth, and AHeight parameters, respectively.

На заметку, для формы так же можно вызвать SetBounds. Причем в данном случае с теми же параметрами, что и для панели. Т.е. SetBounds(0, 0, w, h);

Последний раз редактировалось nixel, 25.03.2012 в 23:04.
Ответить с цитированием
  #3  
Старый 26.03.2012, 20:50
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
Печаль

не выходит и так ! при изменение разрешения все компоненты в панели вылазят за границы экрана.

Пожалуйста сделайте небольшой пример чтоб в форме всё масштабироваллось под разные мониторы.
А то уже месяц с этим бьюсь и не как не выходит.
Ответить с цитированием
  #4  
Старый 30.03.2012, 18:49
nixel nixel вне форума
Начинающий
 
Регистрация: 12.12.2011
Адрес: Москва
Сообщения: 150
Версия Delphi: XE2-U4
Репутация: 131
По умолчанию

При изменении разрешения?
Т.е. Вы вручную меняете разрешение монитора в настройках ОС?
Тогда SetBounds надо использовать не при создании формы, а как-то отлавливать изменение разрешения монитора. По уму, скорее всего есть какое-то решение на WinAPI, не по уму можно проверять значение ширины и высоты экрана в таймере.

З.ы. Подгонку размера через ScaleBy можно сделать сразу по двум измерениям так, чтобы панель не вылезала за экран, ТОЛЬКО при условии, что ее начальные размеры (те, с которыми она создавалась, неважно в дизайнтайм или в рантайм) прямо пропорциональны текущему разрешению экрана. В любом другом случае масштабирование произойдет с ошибкой по одному измерению (либо высоте, либо ширине, в зависимости от того, по какому измерению Вы будете высчитывать коэффициенты M и D), и после масштабирования надо будет принудительно подгонять под экран второе измерение.

Зы2. В общем, направление движения, думаю, задал, а там может более сведущие в системных делах товарищи помогут =)
Ответить с цитированием
Этот пользователь сказал Спасибо nixel за это полезное сообщение:
Gudzik11 (31.03.2012)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:41.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025