Autor Téma: Caption okna - font  (Přečteno 410 krát)

Offline Viktor Marek

  • Mladík
  • **
  • Příspěvků: 65
  • Karma: 0
    • Verze Delphi: Delphi 5
Caption okna - font
« kdy: 07-12-2017, 14:56:32 »
V aplikaci používám skinování oken. Pokud program spustím na PC s Windows serverem 2012, písmo v Caption oken se zvětší a délka popisu přesáhne šířku formuláře. Na PC s Win7 a Win10 tato situace nenastane.
Na formulářích je definován font Tahoma 8

Změnit si font přes FormPaint by asi vzhledem k používání skinu nedopadlo dobře.

Připadá mi, že na Serveru 2012 není nainstalovaný nějaký font. Jaký font používá Caption formuláře.

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 431
  • Karma: 21
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Caption okna - font
« Odpověď #1 kdy: 07-12-2017, 15:12:01 »
V aplikaci používám skinování oken. Pokud program spustím na PC s Windows serverem 2012, písmo v Caption oken se zvětší a délka popisu přesáhne šířku formuláře. Na PC s Win7 a Win10 tato situace nenastane.
Na formulářích je definován font Tahoma 8

Změnit si font přes FormPaint by asi vzhledem k používání skinu nedopadlo dobře.

Připadá mi, že na Serveru 2012 není nainstalovaný nějaký font. Jaký font používá Caption formuláře.

Nemyslim si ze jinak nez vlastnim kreslenim non-client casti okna zmeny fontu titulkoveho pruhu nedosahnes (nejsem si tim jisty, tohle jsem nikdy nedelal). Font titulkoveho pruhu si muzes zjistit pres Screen.CaptionFont (je dany nastavenim systemu). To vsak nemusi platit pri pouziti neceho co nazyvas "skinovanim".
« Poslední změna: 07-12-2017, 15:42:14 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Viktor Marek

  • Mladík
  • **
  • Příspěvků: 65
  • Karma: 0
    • Verze Delphi: Delphi 5
Re:Caption okna - font
« Odpověď #2 kdy: 07-12-2017, 17:38:05 »
Díky Google tohle funguje

procedure TForm1.Button1Click(Sender: TObject);
var
  MyStruct: TNonClientMetrics;
begin
  MyStruct.cbSize:=SizeOf(TNonClientMetrics);
  SystemParametersInfo(
    SPI_GETNONCLIENTMETRICS,
    SizeOf(TNonClientMetrics),
    @MyStruct,
    0);
  MyStruct.lfCaptionFont.lfHeight:=8;
  MyStruct.lfCaptionFont.lfFaceName:='Arial';
  SystemParametersInfo(
    SPI_SETNONCLIENTMETRICS,
    SizeOf(TNonClientMetrics),
    @MyStruct,
    0);
end;

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 431
  • Karma: 21
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Caption okna - font
« Odpověď #3 kdy: 07-12-2017, 17:44:43 »
Díky Google tohle funguje

procedure TForm1.Button1Click(Sender: TObject);
var
  MyStruct: TNonClientMetrics;
begin
  MyStruct.cbSize:=SizeOf(TNonClientMetrics);
  SystemParametersInfo(
    SPI_GETNONCLIENTMETRICS,
    SizeOf(TNonClientMetrics),
    @MyStruct,
    0);
  MyStruct.lfCaptionFont.lfHeight:=8;
  MyStruct.lfCaptionFont.lfFaceName:='Arial';
  SystemParametersInfo(
    SPI_SETNONCLIENTMETRICS,
    SizeOf(TNonClientMetrics),
    @MyStruct,
    0);
end;

O tom vim, ale tohle nastaveni je pak platne globalne pro non-client oblasti vsech oken systemu, nebo se pletu? Tohle bys IMHO nemel delat, jen pro "poteseni" z Tve aplikace rozbit uzivateli nastaveni systemu ;)
« Poslední změna: 07-12-2017, 17:52:54 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Viktor Marek

  • Mladík
  • **
  • Příspěvků: 65
  • Karma: 0
    • Verze Delphi: Delphi 5
Re:Caption okna - font
« Odpověď #4 kdy: 07-12-2017, 20:17:57 »
Sakra, máš pravdu.

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 431
  • Karma: 21
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Caption okna - font
« Odpověď #5 kdy: 07-12-2017, 23:00:17 »
Sakra, máš pravdu.

Mozna. Nicmene porad nevime co je to to zminovane "skinovani". Pokud jde o VCL Styles, pak zkus pretizit TFormStyleHook.PaintNC intercepted tridy TFormStyleHook s tim ze zkopirujes v podstate veskery kod a upravis jen kresleni casti komentovane jako "draw text".
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1780
  • Karma: 72
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Caption okna - font
« Odpověď #6 kdy: 08-12-2017, 08:10:16 »
Sakra, máš pravdu.

Mozna. Nicmene porad nevime co je to to zminovane "skinovani". Pokud jde o VCL Styles, pak zkus pretizit TFormStyleHook.PaintNC intercepted tridy TFormStyleHook s tim ze zkopirujes v podstate veskery kod a upravis jen kresleni casti komentovane jako "draw text".

A nemel by si spise jen zjistit nejakym podobnym kodem co byl pro to nastaveni, co je to za font a podivat se u toho klienta zda tam je?
Embarcadero MVP - Czech republic

Offline Viktor Marek

  • Mladík
  • **
  • Příspěvků: 65
  • Karma: 0
    • Verze Delphi: Delphi 5
Re:Caption okna - font
« Odpověď #7 kdy: 08-12-2017, 15:24:03 »
Prolezl jsem net- nic jsem nenašel. Napsal jsem autorovi VCLSkin a přišla stručná odpověď "font is in your form,"

Byl by někdo ochoten napsat rutinu pro zjištění typu a velikosti fontu ve Form.Caption

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1780
  • Karma: 72
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Caption okna - font
« Odpověď #8 kdy: 08-12-2017, 15:45:43 »
No a co máš nastavené ve Windows - viz. ovládací panely, v příloze
Embarcadero MVP - Czech republic

Offline Viktor Marek

  • Mladík
  • **
  • Příspěvků: 65
  • Karma: 0
    • Verze Delphi: Delphi 5
Re:Caption okna - font
« Odpověď #9 kdy: 08-12-2017, 19:34:54 »
>No a co máš nastavené ve Windows
Obávám se, že toto nastavení je možno ve Windows 7. Ve windows 10 a na serveru 2012 toto už možné není.
Na serveru je font SegoeUI nainstalován.

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 431
  • Karma: 21
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Caption okna - font
« Odpověď #10 kdy: 08-12-2017, 19:46:04 »
Prolezl jsem net- nic jsem nenašel. Napsal jsem autorovi VCLSkin a přišla stručná odpověď "font is in your form,"

Byl by někdo ochoten napsat rutinu pro zjištění typu a velikosti fontu ve Form.Caption

Ja zas nevim co je VCLSkin. Pokud jde o tento projekt VCLSkin, pak je odpoved na techto radcich (a "Font is in your form." je pak nesmysl):

Prirazeni fontu kterym se popisek okna kresli je na radku 5260 kde se font bere z pole CaptionFont, ktery se plni metodou CreateCaptionFont jez uvnitr dela to same jako TScreen.GetMetricSettings pro pole objektu fontu FCaptionFont ktere muzes precist pomoci uz zminovaneho Screen.CaptionFont. Takze pro ten projekt muzes bud upravit kod modulu WinSkinForm.pas a pole CaptionFont vypublikovat, nebo jednoduse si vzit font ze Screen.CaptionFont.
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Viktor Marek

  • Mladík
  • **
  • Příspěvků: 65
  • Karma: 0
    • Verze Delphi: Delphi 5
Re:Caption okna - font
« Odpověď #11 kdy: 08-12-2017, 19:54:40 »
Jde o http://www.link-rank.com/

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 431
  • Karma: 21
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Caption okna - font
« Odpověď #12 kdy: 08-12-2017, 20:07:50 »
Jde o http://www.link-rank.com/

Ta URL je linkovana i z GitHub projektu ktery jsem nasel. Zkus se podivat do kodu, zda se neshoduje s tim na GitHub. Pokud ano, pak pro ziskani fontu kterym se kresli titulkovy pruh muzes vypublikovat pole CaptionFont tridy TWinSkinForm, nebo precist font ze Screen.CaptionFont protoze v obou pripadech jde o font z pole lfCaptionFont struktury NONCLIENTMETRICS ziskane pomoci akce SPI_GETNONCLIENTMETRICS.
« Poslední změna: 08-12-2017, 20:11:00 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Viktor Marek

  • Mladík
  • **
  • Příspěvků: 65
  • Karma: 0
    • Verze Delphi: Delphi 5
Re:Caption okna - font
« Odpověď #13 kdy: 08-12-2017, 20:31:57 »
Tohle je na mně opravdu hodně přes čáru - zdrojáky od komponenty nemám, a začínám se v tom ztrácet.

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 431
  • Karma: 21
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Caption okna - font
« Odpověď #14 kdy: 08-12-2017, 21:09:33 »
Tohle je na mně opravdu hodně přes čáru - zdrojáky od komponenty nemám, a začínám se v tom ztrácet.

Zadna veda v tom neni. Nasel jsem projekt VCLSkin na GitHub. Ten na uvodni strance linkuje http://www.link-rank.com. Mozna jde o nekoho, kdo nadrzo postnul zdrojaky placeneho projektu. Nevim.

Jednu vec vsak vim, pokud pouzivas externi kreslitko formulare (3rd party skinovaci engine), je treba zjistit ten font z toho kreslitka (jednoduse proto, ze to kreslitko si muze zvolit font jiny nez by pouzila VCL, pripadne muze byt i nastavitelny skinem).

Pouzivas Delphi 5? Kdybys mel nejakou novou verzi Delphi, pak bych Ti poradil v kombinaci s projektem co je na tom GitHubu neco ve smyslu:

Kód: Delphi [Vybrat]
  1. uses
  2.   ..., WinSkinForm;
  3.  
  4. type
  5.   TWinSkinFormHelper = class helper for TWinSkinForm
  6.   public
  7.     function GetCaptionFont: TFont; inline;
  8.   end;
  9.  
  10. implementation
  11.  
  12. ...
  13.  
  14. { TWinSkinFormHelper }
  15.  
  16. function TWinSkinFormHelper.GetCaptionFont: TFont;
  17. begin
  18.   with Self do
  19.     Result := CaptionFont; // pristup k privatnimu poli CaptionFont
  20. end;
  21.  
  22. procedure TForm1.Button1Click(Sender: TObject);
  23. var
  24.   CaptionFont: TFont;
  25. begin
  26.   CaptionFont := WinSkinForm1.GetCaptionFont; // ziskas font pouzity ke kresleni caption okna
  27.   CaptionFont.Size := 8; // upravis ho jak je treba (jen pozor, napr. barva fontu je v tom projektu ovlivnena nastavenim skinu)
  28.   Invalidate; // a vyptas si prekresleni formu
  29. end;
« Poslední změna: 08-12-2017, 21:11:35 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Kolik je šest plus čtyři (slovem):