Проблема с разрешением программы

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
scorpi.on
Сообщения: 32
Зарегистрирован: 03 июн 2005, 18:51
Откуда: Могилёв, Беларусь

Помогите пожалуйста.
Я создал приложение на весь экран. Разрешение моего экрана 1280 на 1024. Когда эту программу запустил мой друг на своем компьютере с разрешением 640 на 480 то была видна только часть программы а остальная была скрыта так как она была очень большая. Как можно сделать так чтобы моя программа изменяла свой размер в зависимости от включенного разрешения экрана.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Если проблема в элементах управления, достаточно в начале работы программы написать:

Код: Выделить всё

if Form1.Width>Screen.Width then
  for i:=0 to componentcount-1 do
    begin
      if components[i] is TEdit then with components[i] as TEdit do
           begin
           width:=round(Screen.Width*width/Form1.width);
           Height:=round(Screen.Height*Height/Form1.Height);
           top:=round(Screen.Width*top/Form1.width);
           left:=round(Screen.Width*left/Form1.width);
           end;
       {Этот кусок - if... then... begin end - повторить для всех элементов управления, имеющихся на форме, меняя TEDit на TLabel, TMemo, TButton и т.д.}
    end;
Если же программа графическая, тут уже надо лезть в сам алгоритм
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Зачем так напрягаться - проще поставить у формы выраннивание AllClient
[syntax=Delphi] [/syntax]
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Duncon, а мы не ищем легких путей! ;)
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Ну-ну
[syntax=Delphi] [/syntax]
Blood_Magic
Сообщения: 273
Зарегистрирован: 30 июн 2005, 14:53

извращенцы
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
YurikGL
Сообщения: 142
Зарегистрирован: 16 фев 2005, 21:54
Откуда: Уфа
Контактная информация:

http://forums.realcoding.net/index.php?showtopic=11055

вот из BlackManFAQ:

Что нужно предусмотреть при разработке приложения, которое будет работать при различном разрешении дисплея?

04 апр 2002 (четверг), 10:33:44

* а ранней стадии создания приложения решите для себя хотите ли вы позволить форме масштабироваться.
Преимущество немасштабируемой формы в том, что ничего не меняется во время выполнения.
В этом же заключается и недостаток (ваша форма может быть
слишком маленькой или слишком большой в некоторых случаях).
* Если вы Е собираетесь делать форму масштабируемой, установите св-во Scaled=False и дальше не читайте.
* В противном случае Scaled=True.
* Установите AutoScroll=False. AutoScroll = True означает не менять размер окна формы
при выполнении что не очень хорошо выглядит, когда содержимое формы размер меняет.
* Установите фонты в форме на TrueType фонты, например Arial.
!!!!: Если такого фонта не окажется на пользовательском компьютере, то Windows выберет
альтернативный фонт из того же семейства. Этот фонт может не совпадать по размеру, что вызовет проблемы.
* Установите св-во Position в любое значение, отличное от poDesigned.
poDesigned оставляет форму там, где она была во время дизайна, и, например,
при разрешении 1280x1024 форма окажется в левом верхнем углу и совершенно за экраном при 640x480.
* Оставляйте по-крайней мере 4 точки между компонентами, чтобы при смене
положения границы на одну позицию компоненты не " наезжали" друг на друга.
* Для однострочных меток (TLabel) с выравниванием alLeft или alRight
установите AutoSize=True. Иначе AutoSize=False.
* Убедитесь, что достаточно пустого места у TLabel для изменения
ширины фонта - 25% пустого места многовато, зато безопасно.
При AutoSize=False Убедитесь, что ширина метки правильная,
при AutoSize=True убедитесь, что есть ссвободное место для роста метки.
* Для многострочных меток (word-wrapped labels), оставьте хотя бы одну пустую строку снизу.
* Будьте осторожны при открытии проекта в среде Delphi
при разных разрешениях. Свойство PixelsPerInch меняется
при открытии формы. Лучше тестировать приложения при разных разрешениях,
запуская готовый скомпилированный проект, а редактировать его при одном разрешении.
Иначе это вызовет проблемы с размерами.
* Не изменяйте свойство PixelsPerInch !
* В общем, нет необходимости тестировать приложение для каждого разрешения в отдельности,
но стоит проверить его на 640x480 с маленькими и большими фонтами и на более высоком разрешении перед продажей.
* Уделите пристальное внимание принципиально однострочным компонентам типа TDBLookupCombo.
Многострочные компоненты всегда показывают только целые строки,
а TEdit покажет урезанную снизу строку. Каждый компонент лучше сделать на несколько точек больше.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

Имхо... Я обычно програмлю ограничив размер формы до 800*600...
Как вариант для извращений, можно первым контролом на форму положить ScrollBox ;)
Изображение
Ответить