Rozmiar elementow po zmianie rozmiaru fonta

0

Przykładowo mam na formatce obok siebie w poziomie trzy buttony
Odstęp pomiędzy buttonami ustaliłem na 10 pix
Domyślny rozmiar fonta w systemie 8
Wszystko jest ok .
Zakładam że ktoś zmieni rozmiar fonta w systemie z 8 na 11 i wszystko się wali w
moim programie :( napisy nie mieszczą się w buttonie,
Więc ustawiłem opcję dla buttonów Autosize = true
Ale to nie rozwiązuje problemu.
Button zmienia rozmiar na większy, napisy się mieszczą ALE powiększone buttony
nakładają się na siebie.
Pytanie;
Jakiej opcji użyć w Object Inspector aby BYŁ ZAWSZE stały odstęp pomiędzy buttonami
niezależnie od tego czy powiększają swój rozmiar jeśli ktoś systemowo zmieni rozmiar fonta dla wszystkich aplikacji.
Z góry dziękuje życzliwym ludziom za pomocną dłoń.

0

Strzelam, parametr LEFT komponentu będzie miał znaczenie.

0

Zakładam że ktoś zmieni rozmiar fonta w systemie z 8 na 11 i wszystko się wali w
moim programie :( napisy nie mieszczą się w buttonie,

Nawet nie wiesz ile programów nie radzi sobie z powiększonym fontem... Jest jeszcze taka opcja jak rozmiar czcionki w ustawieniach ekranu - sporo aplikacji rozłazi się przy ustawionym rozmiarze na duże czcionki, już nie mówiąc o bardzo duże czcionki;

Jakiej opcji użyć w Object Inspector aby BYŁ ZAWSZE stały odstęp pomiędzy buttonami
niezależnie od tego czy powiększają swój rozmiar jeśli ktoś systemowo zmieni rozmiar fonta dla wszystkich aplikacji.

Nie podałeś nazwy środowiska, w którym piszesz, ale strzelam, że nie ma takiej opcji w inspektorze obiektów, dlatego że rozmiarem fontów zarządza system, a Ty pewnie korzystasz z systemowego schematu/manifestu.

0

Zarówno w Delphi jak i w Lazarusie mam ten problem.
Wiem że jest na to jakieś rozwiązanie. ALE JAKIE ?
Teraz akurat siedzę na Linuksie i mam przed sobą okno programu napisanego w Lazarusie o nazwie WinFF (konwertor audiovideo)
Zwiększam z poziomu systemu rozmiar fontów systemowych na bardzo duże i w tym programie wszystko ładnie się powiększa z zachowaniem ŧakich samych odstępów pomiędzy elementami.
Testuje również windowsowy napisany w Delphi program AntiTwin (wyszukiwanie duplikatów) - on również działa poprawnie po zmianie rozmiaru fonta na większy.
Czyli jest rozwiązanie na każdej platformie ALE JAKIE ?
Tym bardziej to ładnie śmiga na Linuksie gdzie programy mają różne GUI (KDE,GTK itd..)

Dziękuje za zainteresowanie i pozdrawiam.

0

Zawsze możesz obsłużyć nadchodzący komunikat zmiany rozmiaru fontów systemowych - sprawdź sobie jaki to komunikat; Do tego napisz sobie metodę, która zmierzy szerokość i wysokość komponentów, po czym je odpowiednio poukłada; Taką metodę wywołaj przy starcie aplikacji czy OnCreate formularzy, a także po otrzymaniu ww. komunikatu, który na pewno jest rozgłaszany w systemie, tak samo jak komunikat o zmianie schematu kolorów systemowych, obecności nowego dysku w napędzie i mnóstwo innych;

Na chwilę obecną nic więcej nie mogę doradzić.

0

A Constraints w ispektorze- ograniczyć wysokość i szerokość??

0
furious programming napisał(a):

Zawsze możesz obsłużyć nadchodzący komunikat zmiany rozmiaru fontów systemowych - sprawdź sobie jaki to komunikat; Do tego napisz sobie metodę, która zmierzy szerokość i wysokość komponentów, po czym je odpowiednio poukłada; Taką metodę wywołaj przy starcie aplikacji czy OnCreate formularzy, a także po otrzymaniu ww. komunikatu, który na pewno jest rozgłaszany w systemie, tak samo jak komunikat o zmianie schematu kolorów systemowych, obecności nowego dysku w napędzie i mnóstwo innych;

Na chwilę obecną nic więcej nie mogę doradzić.

Dzięki, ale nadal mam nadzieje że jest coś prostszego niż pisanie wielu linijek kodu w sekcjo OnCreate dla formy i przeliczanie rozmiaru elementów i odstępów pomiędzy nimi w razie zmiany przez użytkownika rozmiaru fonta dla każdego dostępnego rozmiaru w systemie
Mam nadzieję że jest jednak coś podobnie działającego jak opcja Anchors =akLeft
tyle tylko że utrzymująca stały odstęp od sąsiedniego po lewej stronie elementu, a nie jak Anchorst od lewej krawędzi formy.

pipek napisał(a):

A Constraints w ispektorze- ograniczyć wysokość i szerokość??

To mi nic nie daje, jedynie obetnie część tekstu jeśli ustalę max rozmiar buttona a napis będzie dłuższy w pikselach niż ograniczona przez Constraints szerokość buttona.
To odpada ponieważ przy zmieniającym się rozmiarowo tekście w buttonach logicznym jest ustawienie dla buttona Autosize = true aby cały tekst był widoczny.
Do tego brakuje mi jedynie coś co utrzyma stałe odstępy pomiędzy buttonami.

0

Tfuuu, borze,raczej tak ma być:

Button1.Caption:='jaaaaaaaaaaaxx';
Button2.Left:=(Button1.Width+Button2.Width)+2;

dodanie znacznika <code class="delphi"> - furious programming

0

No tak :) prosty sposób a może być skuteczny
Obliczanie pozycji kolejnych buttonów z uwzględnieniem szerokości buttona po lewej stronie + odstęp
Czuje że będzie dobrze :D
Button dopasuje się do szerokości tekstu poprzez Autosize = true
a jego nowa szerokość będzie uwzględniona w pozycji Left kolejnego buttona
Pozdrawiam

0

Jeżeli przyciski mają mieć zawsze taki sam rozmiar, to nie używaj właściwości AutoSize; Poza tym napisałem Ci wcześniej, że i tak będziesz musiał napisać sobie metodę, którą trzeba będzie wywołać przy tworzeniu każdego formularza (jeśli na każdym są przyciski i inne elementy, których rozmiar i położenie trzeba będzie ustawić), a dodatkowo po otrzymaniu komunikatu z systemu, że zmieniła się wielkość systemowego fonta.

1

A czy nie można po prostu ustawić właśności Scaled formatki na False?

Z opisu Helpa do Delphi 7 wynika, że właśnie po to jest ta własność

Scaled determines whether the form adjust itself to differences between the font used at design time and the current system font used by a system at runtime. If Scaled is true, the form resizes itself and all its child controls to maintain the relationship between the size of controls and the height of text displayed in the default font. If Scaled is false, no such resizing occurs.

By setting Scaled to true, the form can adjust to fonts that are not scalable (that is, fonts that only supply discrete point sizes) or to differences such as forms designed using small fonts at design time that are run on systems that use large fonts.

The degree of resizing is determined by the PixelsPerInch property, which measures the proportion of the font on the system used when designing the form.

0

@pipek
To nic nie daje :(

@furious programming
Muszę ustawiać dla buttonów autosize = true ponieważ chcę by szerokość buttona była dopasowana do szerokości tekstu na nim.
W innym wypadku obcięło by mi tekst po zmianie rozmiaru fonta na większy.
A tak przynajmniej button mi się dopasowuje szerokością do szerokości napisu.
A szerokości napisu nie znam ponieważ zależy ona od rozmiaru fonta systemowego na kompie użytkownika.

@olesio
O to właśnie chyba chodzi - czyli przeskalowanie całej formy wraz z elementami po zmianie rozmiaru fonta.
Siedzę teraz na Linuksie i mam przed sobą Lazarusa.
ALE takiej opcji Scaled nie ma w object inspector ani w wewnętrznych instrukcjach.
Nie wiem czy jest takie coś w Delphi ? (mam w pracy)

Hmm.. nie mam tego Scaled i nie wiem gdzie to szukać :(
Czy to instrukcja czy wstawka jakiegoś kodu ?

0

Scaled to właściwość formularza, nie komponentu; Oczywiście w VCL jest, ale już w LCL nie; Za to są takie metody jak ScaleBy, ScaleControls i ScaleConstraints, ale ich nigdy nie używałem, więc musiałbyś poczytać;

W innym wypadku obcięło by mi tekst po zmianie rozmiaru fonta na większy.

Raczej nikt nie będzie miał fonta 5x większego od standardowego rozmiaru, więc możesz zostawić offsety po bokach etykiety przycisku i nie bawić się z ich układaniem; A jeśli każdy przycisk jest tak mały, że po zmianie rozmiaru fonta ucina jego etykietę, to lepiej od razu zabierz się za poprawienie interfejsu.

0

@załamany: tak, jest taka własność pod Delphi 7. I jeszcze raz uściślę, cytując siebie: dotyczy FORMATKI.

A czy nie można po prostu ustawić właśności Scaled formatki na False?

Natomiast pod Lazarusem, należy pewnie kombinować coś w ten deseń, jak podpowiada poprzednik w postcie wyżej. Ale z tym niewiele doradzę, gdyż słabo znam Lazarusa. Raczej piszę pod Delphi 7. I zawsze ustawiam pod VCL wspomnianą własność na False. Odkąd odkryłem, że raz przy True rozwaliło mi totalnie zaprojektowany u siebie wcześniej układ.

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