Дизайн для 100% и 150%-ного размера текста и тд.?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Дизайн для 100% и 150%-ного размера текста и тд.?

Сообщение McLion » 05.12.2015 17:05:37

Всем привет,

столкнулся с такой проблемой, написал программу, на ноуте где размер текста и элементов настроен на 100% - все ок, на 150%-ном таблете все микроскопически маленькое. Подогнал все к 150%ному, на 100% все гигантское.

Что делать, что бы программа на всех настройках нормально выглядела?
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00

Re: Дизайн для 100% и 150%-ного размера текста и тд.?

Сообщение sts » 05.12.2015 19:52:46

вариантов немного
1. не использовать лазарус
2. переписать LCL так каким он должен быть, а не на уровне 1995 года
3. вручную отмасштабировать
sts
постоялец
 
Сообщения: 455
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Дизайн для 100% и 150%-ного размера текста и тд.?

Сообщение McLion » 05.12.2015 21:49:01

Я тут нашел библиотеку одну, которая вроде все классно делает, только вот хочу сделать так, чтобы Images и Labels не масштабировать у которых Size <> 0. Кто бы подсказал как это сделать?

То есть все Image не масштабировать и
Label.Font.Size <> 0 не масштабировать.

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

{$mode objfpc}{$H+}

interface

uses
  Forms, Graphics, Controls;

procedure HighDPI(FromDPI: Integer);
procedure ScaleDPI(Control: TControl; FromDPI: Integer);

implementation

procedure HighDPI(FromDPI: Integer);
var
  i: Integer;
begin
  for i:=0 to Screen.FormCount-1 do
    ScaleDPI(Screen.Forms[i],FromDPI);
end;

procedure ScaleDPI(Control: TControl; FromDPI: Integer);
var
  n: Integer;
  WinControl: TWinControl;
begin
  if Screen.PixelsPerInch = FromDPI then exit;

  with Control do begin
    Left:=ScaleX(Left,FromDPI);
    Top:=ScaleY(Top,FromDPI);
    Width:=ScaleX(Width,FromDPI);
    Height:=ScaleY(Height,FromDPI);
    Font.Height := ScaleY(Font.GetTextHeight('Hg'),FromDPI);
  end;

  if Control is TWinControl then begin
    WinControl:=TWinControl(Control);
    if WinControl.ControlCount > 0 then begin
      for n:=0 to WinControl.ControlCount-1 do begin
        if WinControl.Controls[n] is TControl then begin
          ScaleDPI(WinControl.Controls[n],FromDPI);
        end;
      end;
    end;
  end;
end;

end.
Аватара пользователя
McLion
постоялец
 
Сообщения: 332
Зарегистрирован: 06.02.2015 18:41:00


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 263

Рейтинг@Mail.ru
cron