Lazarus 2.2.0 (2022.01.05.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Form elemek elcsúszása képernyőbeállítás 2016 febr. 07 15:55 #1819

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Az AutoSize jó lehet, végülis ilyesmire gondoltam.

Form elemek elcsúszása képernyőbeállítás 2016 febr. 07 15:36 #1818

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 472
  • Köszönetek: 80
Ez a dolog elsősorban nem (csak) forráskódtól hanem a rendszertéma és az alkalmazásod beállításainak összhatásától függ. Az általad is említett cikk ben is írják, hogy "Linuxon a DPI beállítás jóval bonyolultabb és függ a használt szoftvertől és annak változatától": Natív X, Gtk2, Gtk3, Qt és a többi.

Azt sajnos nem fogod tudni elérni (és ez nem a Lazarus hibája), hogy az alapértelmezett vezérlőkészletekkel minden rendszeren, minden témával, minden egyformán jól nézzen ki, bár a vezérlők (és az őket tartalmazó csoportok) AutoSize tulajdonságának True-ra állítása sokszor jó szolgálatot tehet.

Ha az a célod, hogy minden rendszeren egyformán nézzen ki az alkalmazás felülete akkor le kell mondanod a rendszertémák használatáról az alkalmazásodban. Ilyen esetekben jön jól a Qt (windows, Linux, BSD, Mac stb.). Bár Qt-ben nincs minden teljesen kidolgozva, de ami van az lényegében egyformán néz ki a támogatott rendszereken... ez esetben azonban az alkalmazásod nem a rendszertémával egyezően fog megjelenni és a felhasználónak a Qt függvénytárakkal is rendelkeznie kell (telepítve).
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 2.3.0 -- FPC 3.3.1-- GNU/Linux 5.4.0 x86_64

Form elemek elcsúszása képernyőbeállítás 2016 febr. 05 11:21 #1817

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Ennek működnie kellene Linux alatt is? Mert Linux alatt nem változtak a default fontok. Továbbra nagyobbak maradtak a fontok pl. a gombhoz képest, mint Win esetén (ugyanazzal a forráskóddal).
Vagy a default fontot állítsam át valahogy?

Form elemek elcsúszása képernyőbeállítás 2016 jan. 14 18:15 #1778

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Ha jól értem, akkor ez lenne a lényeg:
wiki.lazarus.freepascal.org/High_DPI

Általános megoldás?
program Project1;
 
{$mode objfpc}{$H+}
 
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, Forms,
  Unit1, Unit2, Unit3,
  uScaleDPI;
 
{$R *.res}
 
begin
  RequireDerivedFormResource := True;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  HighDPI(96);
  Application.Run;
end.
 
# ------------------------------------
 
unit form1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
  uScaleDPI; // This includes ScaleDPI procedure
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  ScaleDPI(Self,96); // 96 is the DPI you designed the Form1  
end;
 
# ------------------------------------
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
  if Screen.PixelsPerInch = FromDPI then
    exit;
 
  for i := 0 to Screen.FormCount - 1 do
    ScaleDPI(Screen.Forms[i], FromDPI);
end;
 
procedure ScaleDPI(Control: TControl; FromDPI: integer);
var
  i: 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);
  end;
 
  if Control is TWinControl then
  begin
    WinControl := TWinControl(Control);
    if WinControl.ControlCount = 0 then
      exit;
 
    with WinControl.ChildSizing do
    begin
      HorizontalSpacing := ScaleX(HorizontalSpacing, FromDPI);
      LeftRightSpacing := ScaleX(LeftRightSpacing, FromDPI);
      TopBottomSpacing := ScaleY(TopBottomSpacing, FromDPI);
      VerticalSpacing := ScaleY(VerticalSpacing, FromDPI);
    end;
 
    for i := 0 to WinControl.ControlCount - 1 do
      ScaleDPI(WinControl.Controls[i], FromDPI);
  end;
end;
 
end.

Form elemek elcsúszása képernyőbeállítás 2016 jan. 14 16:10 #1777

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 472
  • Köszönetek: 80
Igen, lehetséges.
Ezt írd a netes keresőbe: Lazarus windows DPI awareness

Továbbá használhatsz az alkalmazásodban előre meghatárotott betűtípust is, de akkor természetesen a komponensek megjelenése eltér majd a rendszrtémától...
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 2.3.0 -- FPC 3.3.1-- GNU/Linux 5.4.0 x86_64

Form elemek elcsúszása képernyőbeállítás 2016 jan. 14 13:10 #1776

  • makgab
  • makgab profilkép Témaindító
  • Törzsgárda tag
  • Törzsgárda tag
  • Hozzászólások: 280
  • Köszönetek: 1
Üdv!
Win7/8/10(?) esetén előfordulhat, hogy a felhasználó átállítja a képernyőbeállításokat/fontokat és ezért az alkalmazásban a form elemek elcsúsznak (egymásra csúsznak) 1-2 pixelt?
Erre van valami megoldási lehetőség?

Most láttam egy ilyet, ugyanaz az alkalmazás az egyik gépen jó volt, a másikon elcsúszott egy kicsit a formelemek egy része (mindkettő win7).

  • Oldal:
  • 1