Pytanie o pliki dfm a lfm

Pytanie o pliki dfm a lfm
Mariusz Bruniewski
Mariusz Bruniewski
  • Rejestracja:prawie 20 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Świecie
0

LCL zawierają mniej informacji o pliku

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

VCL

Kopiuj
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

  • D7.JPG (165 KB) - ściągnięć: 15
  • VCL.JPG (185 KB) - ściągnięć: 16

Umysł pozytywny szuka sposobów, jak coś wykonać; umysł negatywny wyszukuje sposoby, by uzasadnić, że czegoś nie można zrobić.
~~ Napoleon Hill ~~
edytowany 4x, ostatnio: Mariusz Bruniewski
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około godziny
  • Lokalizacja:Tuchów
  • Postów:12175
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.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 3x, ostatnio: flowCRANE
Mariusz Bruniewski
Mariusz Bruniewski
  • Rejestracja:prawie 20 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Świecie
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


Umysł pozytywny szuka sposobów, jak coś wykonać; umysł negatywny wyszukuje sposoby, by uzasadnić, że czegoś nie można zrobić.
~~ Napoleon Hill ~~
edytowany 3x, ostatnio: Mariusz Bruniewski
KA
A nie odwrotnie? Przecież to powinno zależeć od ramki okna a w przypadku wysokości Height powinien dojść jeszcze dodatkowo pasek tytułu. To może się zmieniać funkcja GetSystemMetrics zwraca te wartości. EDIT// Widzę że się poprawiłeś.
Mariusz Bruniewski
Mariusz Bruniewski
Poprawiłem :-)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.