Pytanie o pliki dfm a lfm

0

LCL zawierają mniej informacji o pliku

object Form1: TForm1
  Left = 256
  Height = 500
  Top = 148
  Width = 500
  Caption = 'Form1'
  LCLVersion = '2.0.12.0'
end
end

VCL

object Form1: TForm1
  Left = 256
  Top = 148
  Width = 500
  Height = 500
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
end
end

Przy przenoszeniu plików z dfm do plików lfm, środowisko lazarus traktuje ClientHeight, ClientWidth jako odpowiednio dla Delphi Height, Width i omijają przy przenoszeniu aplikacji prawdziwe proporcje formy, dlaczego tak się dzieje? Czy istnieje jakiś wzór obliczający te wartość?

Chodzi mi dokładnieD7.JPGVCL.JPG

1
Mariusz Bruniewski napisał(a):

LCL zawierają mniej informacji o pliku

Nie o pliku, a o formularzu. Zawiera tyle informacji, ile mu jest potrzebne — pozostałe, czyli wszystkie właściwości posiadające wartości domyślne, nie są (w odróżnieniu od Delphi7) przechowywane w pliku .lfm, bo to nie ma sensu.

Przy przenoszeniu plików z dfm do plików lfm, środowisko lazarus traktuje ClientHeight, ClientWidth jako odpowiednio dla Delphi Height, Width i omijają przy przenoszeniu aplikacji prawdziwe proporcje formy, dlaczego tak się dzieje?

Nie omija, a tłumaczy, aby dostosować wartości tych właściwości do ekosystemu LCL.

Poza tym LCL jest zbudowany inaczej niż VCL i wspiera znacznie więcej mechanizmów niż ten Delphi'owy dziad (m.in. tryb HighDPI, skalowanie, layout wyposażony w zaawansowane kotwiczenie kontrolek itd.), więc nie ma żadnego powodu, aby oczekiwać dokładnie takich samych okien i ich zachowania po (automatycznym) przeportowaniu projektu z Delphi do Lazarusa.

Czy istnieje jakiś wzór obliczający te wartość?

Nie, nie ma — Lazarus odczytuje te wartości tak jak ma je odczytywać i pokazuje zawartość zaimportowanych formularzy tak jak jest to zgodne z LCL. Jeśli efekty końcowe są inne, to sam musisz poprawić zawartość tych formularzy w designerze.

Zresztą powinieneś to zrobić, z dwóch powodów. Po pierwsze po to, aby doprowadzić okna do oczekiwanego stanu, czyli aby wyglądały tak jak chcesz. A po drugie, aby wyposażyć je w zaawansowane kotwiczenie kontroler (czyli skorzystać z Anchor Editor), dzięki czemu formularze będą wyglądać i zachowywać się poprawnie na każdym systemie, skórce i każdych ustawieniach wyświetalania/skalowania/DPI, bez konieczności pałowania się z programowaniem zdarzeń typu OnResize, jak to trzeba było robić w tym zabytkowym Delphi.

0

Aby zachować proporcję pomiędzy plikami dfm a lfm wystarczy dla
ClientHeight dodać do istniejącej wartości wartość 58
ClientWidth dodać do istniejącej wartości wartość 16
, aby proporcje były zachowane odpowiednio Height, Width w lazarusie.

Proste przykład :-)
ClientHeight= 434 + 58 = 492 Height w lazarusie
ClienttWidth= 634 + 16 = 650 Width w lazarusie

1 użytkowników online, w tym zalogowanych: 0, gości: 1