![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Всем привет!
Разработал программу у себя на компе(разрешение экрана 1366х768) в полноэкранном режиме(свойство формы WindowState=WSMaximized). В программе присутствуют панели, имейджи, лейбелы и т.д. Запустив готовый скомпилированный экзешник на нетбуке(разрешение экрана 1024x600) почти половина программы не поместилась(не отобразилась) на экране нетбука. Как написать универсальную программу, которая бы нормально(во весь экран) отображалсь при любом разрешении экрана. Прогуглив инет и испробовав готовые коды, должного рез-та не добился. К примеру использовал след.код: Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Panel1: TPanel; Image1: TImage; Image2: TImage; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; const ScreenWidth: Integer = 1366; ScreenHeight: Integer = 768; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var x, y: LongInt; begin Form1.WindowState:=wsMaximized; Image1.Align:=alClient; Image1.Stretch:=True; {Image1.Proportional:=True;} Image2.Align:=alClient; Image2.Stretch:=True; {Image2.Proportional:=True;} scaled := true; x := getSystemMetrics(SM_CXSCREEN); y := getSystemMetrics(SM_CYSCREEN); if (x <> ScreenHeight) or (y <> ScreenWidth) then begin Form1.height := Form1.height * x div ScreenWidth; Form1.width := Form1.width * y div ScreenHeight; end; if x <> ScreenWidth then scaleBy(x, ScreenWidth); end; end. Код:
const ScreenWidth: LongInt = 1366; ScreenHeight: LongInt = 768; procedure TForm1.FormCreate(Sender: TObject); var iPercentage:integer; begin Form1.Scaled:=True; Image1.Align:=alClient; Image1.Stretch:=True; Image2.Align:=alClient; Image2.Stretch:=True; if (screen.width <> ScreenWidth) then begin height := longint(height) * longint(screen.height) div ScreenHeight; width := longint(width) * longint(screen.width) div ScreenWidth; scaleBy(screen.width, ScreenWidth); end; end. Пожалуйста, помогите с кодом или посоветуйте в каком направлении копать дальше. Заранее спасибо! |
#2
|
||||
|
||||
![]() Очевидно не надо собирать под своё разрешение, оно не всегда доступно, раньше был стандарт 640Х480, потом 800Х600, теперь видимо это 1024Х768, под него и нужно минимальные размеры формы устанавливать, а масштабирование примерно так в OnCreate формы выставлять
Код:
if Screen.Width > 1024 then ScaleBy(Round(((Screen.Width - 1024) / 1024) * 100) + 100, 100); вот статьи по теме Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
![]() Прописав Ваш код в OnCreate формы.Запустил готовый скомпилированный exeшник проги в разрешении экрана 1366х768. Результат: компонент Panel и Image расположенный на нём слишком большие. Запустил прогу в разрешении экрана 1152х864, результат: высота норм(не хватает 3-5 пикселей), а ширина панели и Image слишком длинная. Я в безисходном положении
![]() ![]() |
#4
|
|||
|
|||
![]() Цитата:
Универсального - нет. Надо дизайн интерфейса делать таким, что бы без масштабирования он сам подстраивался под текущие размеры формы. Помогут в этом якоря (Anchor). Ну а с картинками тут, кроме как принудительно переразмеривать их, ничто не поможет. Можно сами картинки делать либо не чуствительные к масштабированию, либо делать фон, а картику либо прозрачной, либо такого же цвета по краям. Но это все общие советы. Тут надо смотреть на конкретный дизайн в аспекте самого приложения. Тогда можно попробовать подсказать что-то более конкретное. |
#5
|
||||
|
||||
![]() Цитата:
я делал так: главная форма открывается в маленьком разрешении с автоскроллами. на форме 4 основных контейнера groupbox c установленными align. если надо больше форму - тыкаем на развернуть окно (border icons - visible = true для всех) Я за здоровый экстрим! Спасибо за "спасибо") |
#6
|
|||
|
|||
![]() Поэксперементировав со свойствами AlignWithMargins и Margins под разрешением экрана 1024х600 я подогнал вручную свойства Marigins(Bottom, Left, Top, Right). Относительно панелей и Image'ов результат очень обрадовал. Но кто подскажет коэффицент подсчета Отступа слева, справа, сверху, снизу. Исходным разрешением является 1366х768. Подскажите плиз!
|
#7
|
||||
|
||||
![]() Видимое поле формы без рамки справа, слева и снизу и шапки с кнопками вверху, это ClientHeight и ClientWidth
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#8
|
||||
|
||||
![]() Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Alegun (11.06.2013)
|
#9
|
||||
|
||||
![]() Цитата:
Хотя там ведь еще и положение заново нужно пересчитывать. Пожалуй не прокатит. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 11.06.2013 в 01:50. |