Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Портятся размеры элеметов формы в Win8


Автор: Jek1975 19.7.2013, 14:54
Есть программа, написанная для WinXP в Borland Delphi 7. Там она работала безупречно, но возникла необходимость запустить её в Win8.
И тут начались проблемы. По умолчанию в Win8 есть параметр "панель управления">"оформление и персонализация">"экран">"Изменение размера всех элементов".
По умолчанию он = 125%. В этом случае многие элементы, которые могут менять размеры в зависимости от параметров Align и Anchors уезжают за пределы формы (становятся невидимыми); шрифты тоже уезжают и портят рамки.
Если этот параметр изменить на 100%, глюков становится меньше, но они не пропадают совсем - см.прикреплённый скриншот.

Подскажите что делать? Играться параметрами Align и Anchors или что-то другое? (на "удлиняющиеся" шрифты наплевать, нужно хотя бы все элементы формы оставить на местах). Гуглом искал, но ничего похожего не нашёл.

Автор: Illusion Dolphin 19.7.2013, 15:33
Самое простое это выставить у формы Scaled = False (это не тру с точки знения юзабилити для польователя, но легче в разработке)

Автор: gesper 19.7.2013, 21:53
AutoSize параметр офнуть пробовал у компонентов?

Автор: ZBugz 20.7.2013, 09:45
Там наоборот, лучше у формы AutoSize включить. 

Автор: StranikS 26.7.2013, 22:01
Вы Manifest подключите к проекту.

И интерфейс нужно будет пересобрать под Win7 или Win8, ставьте D7 под любую из них и собирайте его по новой при этом у формы должно стоять Scale =True (стоит по умолчанию), в этом случае он у вас уже автоматически будет "резиновым", т.е. масштабируемым.  

Автор: korvinx3m 11.4.2014, 11:27
Если актуально еще...

Я, в свое время, нашел такое решение:

Код

const

  ScreenWidth: LongInt = 1280;  {Я разрабатывал мою форму в режиме 1280x1024}
  ScreenHeight: LongInt = 1024; {Я разрабатывал мою форму в режиме 1280x1024}

procedure TForm1.FormCreate(Sender: TObject);
var
i: integer; 

begin
//масштабирование формы  [begin]
scaled := true;
if (screen.height-GetTaskBarHeight) <= Form1.Height then
  begin
  Form1.scaleBy((screen.height-GetTaskBarHeight-Form1.BorderWidth-GetSystemMetrics(SM_CYFRAME)), Form1.Height);
  scaled := false;
  end;
//масштабирование формы  [end]

//масштабирование шрифтов  [begin]
for i := componentCount-1 downto 0 do
  with components[i] do
    if GetPropInfo(ClassInfo, 'font') <> nil  then font.size := (Form1.Height DIV ScreenHeight) * font.size;
//масштабирование шрифтов  [end]

//Центрируем форму относительно клиентской области экрана (не включая панель задач)  [begin]
//Для того, чтобы этот код работал свойство Position формы должно быть установлено в poDefault
Form1.left := (screen.width - Form1.width) div 2;
Form1.top := (screen.height - GetTaskBarHeight - Form1.height) div 2;
//Центрируем форму [end]

end; 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)