Autor Téma: FastReport 2.5x a čeština na tiskárně  (Přečteno 1108 krát)

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1401
  • Karma: 34
    • Pepak.net
FastReport 2.5x a čeština na tiskárně
« kdy: 30-07-2012, 09:31:36 »
Celkem pravidelně se snažím (neúspěšně) vyřešit problém, že tiskové sestavy ve FastReportu 2.5x (čti: hodně starý) se mi dobře zobrazí v preview, dobře vytisknou na některých tiskárnách, ale na jiných tiskárnách mají místo českých znaků ksichtíky. Vypadá to přesně tak, jako kdyby se na tiskárnu posílaly texty ně jako grafika, ale jako text, tiskárna to vykreslila svými vestavěnými fonty, ale ty vestavěné fonty měly západní znakovou sadu místo české. Můj problém je v tom, že nějak nejsem schopen Windows přimět, aby na těchto tiskárnách text tiskly jako grafiku a ne jako text - ve vlastnostech zařízení bývá víc míst, kde se dá tisknutí textu jako grafiky vynutit, ale buď to jedno klíčové přehlížím, nebo to Windows nerespektují a tvrdohlavě posílají text. Tak si říkám - nepovedlo se vám to někomu úspěšně vyřešit, třeba nějakým zásahem do toho FastReportu?

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1401
  • Karma: 34
    • Pepak.net
Re:FastReport 2.5x a čeština na tiskárně
« Odpověď #1 kdy: 30-07-2012, 13:02:03 »
Tak jsem nakonec řešení našel, i když pěkně nechutné: V souboru fr_class.pas jsem změnil
Kód: Delphi [Vybrat]
  1. procedure TfrMemoView.AssignFont(Canvas: TCanvas);
  2. begin
  3.   with Canvas do
  4.   begin          
  5.     SetBkMode(Handle, Transparent);
  6.     Font := Self.Font;
  7.     if not IsPrinting then
  8.       if ScaleY = 1 then
  9.         Font.Height := -Round(Font.Size * 96 / 72 * ScaleY) else
  10.         Font.Height := -Trunc(Font.Size * 96 / 72 * ScaleY);
  11.   end;
  12. end;
na
Kód: Delphi [Vybrat]
  1. procedure TfrMemoView.AssignFont(Canvas: TCanvas);
  2. begin
  3.   with Canvas do
  4.   begin          
  5.     SetBkMode(Handle, Transparent);
  6.     Font := Self.Font;
  7.     Font.Charset := EASTEUROPE_CHARSET;
  8.     if not IsPrinting then
  9.       if ScaleY = 1 then
  10.         Font.Height := -Round(Font.Size * 96 / 72 * ScaleY) else
  11.         Font.Height := -Trunc(Font.Size * 96 / 72 * ScaleY);
  12.   end;
  13. end;
a už mi to tiskne česky. Celkem bych uvítal čistší řešení, třeba jako že bych přišel na to, proč FR nerespektuje Charset, který je nastavený u jednotlivých komponent v Report Designeru, ale aspoň to funguje.