Autor Téma: Vykreľovanie textu  (Přečteno 4069 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4721
  • Karma: 41
    • Verze Delphi: XE7 professional
Vykreľovanie textu
« kdy: 15-09-2012, 13:21:51 »
Mám

Kód: Delphi [Vybrat]
  1. procedure DepictTables(isEnable: Boolean);
  2. var
  3.   TheRect: TRect;
  4.   imgW, imgH: Integer;
  5.   Str: String;
  6. begin
  7.   imgW := fMain.imgInAg.Width;
  8.   imgH := fMain.imgInAg.Height;
  9.   with fMain.imgInAg.Canvas do
  10.   begin
  11.     Font.Size := 7;
  12.     Font.Name := 'Tahoma';
  13.     TheRect := Rect(85, 0, imgW, 14);
  14.     Str := ('Hodnoty súčiniteľa k4 podľa typu stropu, strechy a podlahy');
  15.     CenterText(fMain.imgInAg, TheRect, Str, isEnable, [tpAlignH, tpAlignV]);
  16.     TheRect := Rect(0, 0, 86 , 61);
  17.     Str := 'Typ konštrukcií'
  18.     +' stien';
  19.     CenterText(fMain.imgInAg, TheRect, Str, isEnable, [tpAlignH, tpAlignV]);
  20.  

Problém je, že TheRect určujem konštantami. Teraz som to hodil na dislplay v vyšším rozlíšením a text a rámčeky sú rozhádzané. Ako na to?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:Vykreľovanie textu
« Odpověď #1 kdy: 15-09-2012, 14:41:48 »
budeš si muset změřit velikost textu, něco jako Canvas.TextWidth()

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2668
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Vykreľovanie textu
« Odpověď #2 kdy: 15-09-2012, 18:50:19 »
budeš si muset změřit velikost textu, něco jako Canvas.TextWidth()
Na to je asi nejlepsi pouzit rovnou Windows API funkci DrawText. Tu lze pouzit k vypoctu, kolik text zabere pri parametru DT_CALCRECT i primo pro kresleni, podporuje zalamovani radku apod. Vhodnymi parametry lze zarovnavat kam je treba...

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1136
  • Karma: 42
    • Verze Delphi: 7, 2010
Re:Vykreľovanie textu
« Odpověď #3 kdy: 17-09-2012, 10:59:56 »
pripadne v D2010+ je to

TextFormat:=[tfCenter, tfWordBreak, tfCalcRect]
nebo
TextFormat:=[tfCenter, tfSingleLine, tfCalcRect];

canvas.TextRect(r2, ..., TextFormat);

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4721
  • Karma: 41
    • Verze Delphi: XE7 professional
Re:Vykreľovanie textu
« Odpověď #4 kdy: 17-09-2012, 12:02:12 »
 Nakoniec som to vyriešil zmenou veľkosti fontu.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:Vykreľovanie textu
« Odpověď #5 kdy: 17-09-2012, 12:50:37 »
Nakoniec som to vyriešil zmenou veľkosti fontu.

tím jsi nic nevyřešil, ale nahákoval tam řešení pro jednu konkrétní situaci. Až někdo použije jiné DPI nebo text změní/zlokalizuje, tak se ti to tam zase nevejde nebo tam bude zbytečná mezera

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4721
  • Karma: 41
    • Verze Delphi: XE7 professional
Re:Vykreľovanie textu
« Odpověď #6 kdy: 17-09-2012, 16:13:57 »
Ošetril som dva stavy. Podľa rozlíšenia monitora pod 1 920 na šírku jedno, pre ostatné druhé. Myslím, že do bežnej praxe to stačí.

Poznámka: kúpil som NB s full HD a tam mi to vadilo. Predtým som nikde nezachytil problém
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:Vykreľovanie textu
« Odpověď #7 kdy: 17-09-2012, 17:23:09 »
Ošetril som dva stavy. Podľa rozlíšenia monitora pod 1 920 na šírku jedno, pre ostatné druhé. Myslím, že do bežnej praxe to stačí.

Poznámka: kúpil som NB s full HD a tam mi to vadilo. Predtým som nikde nezachytil problém

nezávisí ani tak na rozlišení, jako na velikosti fontu a častěji DPI. Na vyšším rozlišení se většinou dává větší DPI, aby ten text šel přečíst. Předdefinované hodnoty jsou 100, 125 a 150%, ale nastavit tam jde myslím cokoliv.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4721
  • Karma: 41
    • Verze Delphi: XE7 professional
Re:Vykreľovanie textu
« Odpověď #8 kdy: 18-09-2012, 08:21:28 »
O tom viem, ale bežný užívateľ nie. Raz som to skúsil zmeniť na vlastnú hodnotu a nedopadlo to dobre.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1472
  • Karma: 36
    • Pepak.net
Re:Vykreľovanie textu
« Odpověď #9 kdy: 18-09-2012, 08:26:45 »
Mě tedy fascinuje, že tu sice máš rady na jednoduché obecné řešení, ale přestoi trváš na svém proprietárním, které funguje jen někdy. Uvědomuješ si, že to je cesta do pekel? Že dříve nebo později narazíš na uživatele, který nezapadne do té tvé pečlivě vyznačené škatulky normálních uživatelů, a budeš to muset řešit? Nebo hůř, bude to muset řešit tvůj nástupce?

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1136
  • Karma: 42
    • Verze Delphi: 7, 2010
Re:Vykreľovanie textu
« Odpověď #10 kdy: 18-09-2012, 08:55:40 »
OT: takove veci resim, az se to stane (z vlastni zkusenosti :D )

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4721
  • Karma: 41
    • Verze Delphi: XE7 professional
Re:Vykreľovanie textu
« Odpověď #11 kdy: 18-09-2012, 09:06:48 »
pepak - máš pravdu. Ale žiadneho nástupcu nemám - bod pre mňa.

Dvakrát sa mi do toho nechce. Musel by som to komplet prepočítavať podľa veľkosti plátna. Neviem či to stojí za to. Prikladám obrázky.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:Vykreľovanie textu
« Odpověď #12 kdy: 18-09-2012, 09:47:54 »
Dvakrát sa mi do toho nechce. Musel by som to komplet prepočítavať podľa veľkosti plátna. Neviem či to stojí za to. Prikladám obrázky.

Udržet si zákazníky je prý levnější, než shánět nového. Záleží na tobě, jestli chceš, aby to zákazníci používali nebo začali používat něco, kde ten text půjde přečíst :-).

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4721
  • Karma: 41
    • Verze Delphi: XE7 professional
Re:Vykreľovanie textu
« Odpověď #13 kdy: 18-09-2012, 09:49:58 »
Hm, mne to síce trvá trocha dlhšie, ale väčšinou mi to dôjde.
Veď monitor v práci mám 1 200 x 1 920 a NB má 1 080 x 1920.
Akurát v práci mám DPI 100 % a na NB 125 %. A to mi rozhádže tabuľku. Takže pepak, mám to úplne na hovno :). Predpokladám, že postačí, ak budem pracovať so šírkou a výškou textu a DPI ma nemusí zaujímať. Alebo sa mýlim?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4721
  • Karma: 41
    • Verze Delphi: XE7 professional
Re:Vykreľovanie textu
« Odpověď #14 kdy: 18-09-2012, 09:53:29 »
Ešte žiadnych zákazníkov nemám, ale tí akosi nemajú na výber. Je k dispozícii len jeden soft ešte z éry DOS-u prehodený do Windows. Ale práca s ním a vzhľad sa vôbec nezmenili. Je veľmi neohrabaný.
Už rozmýšľam, že by som to mohol dať do obehu.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.