Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/37: Рейтинг темы: голосов - 37, средняя оценка - 4.86
 Аватар для SecretSilent
81 / 81 / 9
Регистрация: 16.02.2010
Сообщений: 637

Одинаковый размер форм на разных экранах

17.02.2012, 13:54. Показов 7487. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать так, чтобы форма имела фиксированные высоту и ширину на разного размера диагоналей экранах?
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2012, 13:54
Ответы с готовыми решениями:

Как обеспечить одинаковый размер картинки на разных экранах Android?
Как?

Размер картинки на разных экранах
Добрый день. Не понимаю как сделать. Есть ImageView, например, максимальная ее высота 300dp и ширина на весь экран. Каким размером должна...

Одинаковый код для разных форм и контролов. MVVM
Есть у меня одна модель и 2 формы. В формах содержится 4 usercontrol в которых понакидано несколько обычных контролов (комбобоксы там...

4
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
17.02.2012, 14:12
Свойство Scaled поставь в false. Или наоборот. В общем с этим свойством надо поиграться
1
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
17.02.2012, 14:21
она и так имеет фиксированный размер. имеется ввиду что бы визуально / физически она была одинакового размера? брать свойства экрана (точек на дюйм) и пересчитывать размер формы. шрифты правда так не удастся смасштабировать
1
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.02.2012, 14:03
Визуально одинаковый размер формы относительно размеров экрана на различных экранах? Элементарно:
C++
1
2
3
4
void __fastcall Form::FormShow(TObject *Sender) {
   Width = Screen->Width / 3;
   Height = Screen->Height / 2;
}
Правда, таким образом на экранах с разным соотношением сторон мы получим визуально растянутую/сжатую форму. Чтобы этого избежать, можно сохранять пропорции формы и смотреть только на, скажем, высоту экрана:
C++
1
2
3
4
void __fastcall Form::FormShow(TObject *Sender) {
   Height = Screen->Height / 2;
   Width = Height * 1.5;
}
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.02.2012, 15:09
Приложение, которое будет работать при различном разрешении дисплея
На ранней стадии создания приложения решите для себя хотите ли вы позволить форме масштабироваться. Преимущество немасштабируемой формы в том, что ничего не меняется во время выполнения. В этом же заключается и недостаток (ваша форма может бать слишком маленькой или слишком большой в некоторых случаях).
Если вы не собираетесь делать форму масштабируемой, установите свойство Scaled=False и дальше не читайте.
В противном случае Scaled=True .
Установите AutoScroll=False . AutoScroll = True означает 'не менять размер окна формы при выполнении' что не очень хорошо выглядит, когда содержимое формы размер меняет.
Установите шрифты в форме на самые распространенные TrueType шрифты, например Arial, Times New Roman, Courier. Если вдруг выбранного шрифта не окажется на пользовательском компьютере, то 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 покажет урезанную снизу строку. Каждый компонент лучше сделать на несколько точек больше.
Даже при выполнении перечисленных инструкций, у вас могут возникнуть проблемы при переходе, например от Large fonts к Small fonts в Windows при одном и том же разрешении. Бороться с этим помогают специально для этого разработанные компоненты. Если же вы решите самостоятельно изменять размеры компонентов, лежащих на форме, то вам могут помочь методы TCanvas.TextWidth и TCanvas.TextHeight .
Как написать приложение, адекватно отображающееся на экранах с различным разрешением монитора
да... делфий... такова жизнь
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
unit Main;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics,
  Controls, Forms, Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    {Отлавливаем, сообщение о изменении разрешения экрана}
    procedure WMDisplayChange(var message: TMessage); message WM_DISPLAYCHANGE;
  public
    { Public declarations }
    W, H: integer;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.DFM}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Width := Round(Width * 1.5);
  Height := Round(Height * 1.5);
  ScaleBy(150, 100)
end;
 
procedure TForm1.WMDisplayChange(var message: TMessage);
begin
  inherited;
  Width := Round(Width * LOWORD(message.LParam) / W);
  Height := Round(Height * HIWORD(message.LParam) / H);
  ScaleBy(LOWORD(message.LParam), W);
  W := Screen.Width;
  H := Screen.Height;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  W := Screen.Width;
  H := Screen.Height;
end;
 
end.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2012, 15:09
Помогаю со студенческими работами здесь

Одинаковый ли размер стека у разных версиях/девайсах Android?
Столкнулся с проблеммой stack overflow... пришлось резать файлы на куски. Но все ровно в каждой части подхожу до предела стека. Тестирую на...

Отображение в браузерах и на разных экранах
Есть сайт сверстан мной - https://piratelifepf.000webhostapp.com/, только вот на разных экранах он отображается по-разном, особенно футер и...

Координаты курсора на разных экранах
Фон развернут на весь экран, соответственно на разных экранах будут разные координаты. Мне нужно сделать кликабельным только...

Лейбл с радиокнопками на разных экранах
Добрый вечер. Есть маленькая проблема с версткой. Для описания проблемы взял простой пример. Есть лейбл и три радиокнопки: <html> ...

Проблема с отображением скрипта на разных экранах
Столкнулся с проблемой на своем сайте. При просмотре с экрана 1280х960 скрипт отображается как надо - РИСУНОК №1 При просмотре с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru