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

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

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

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

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

Сообщение McLion »

Всем привет,

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

Что делать, что бы программа на всех настройках нормально выглядела?
sts
энтузиаст
Сообщения: 548
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

вариантов немного
1. не использовать лазарус
2. переписать LCL так каким он должен быть, а не на уровне 1995 года
3. вручную отмасштабировать
Аватара пользователя
McLion
постоялец
Сообщения: 332
Зарегистрирован: 06.02.2015 17:41:00

Сообщение McLion »

Я тут нашел библиотеку одну, которая вроде все классно делает, только вот хочу сделать так, чтобы 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.
Ответить