Uグリッドにて、UTF8で設定した項目の幅がどうしても
広くなってしまうという質問が出ていますが、再現する条件まで
調べてくれた人がいたので、対策もわかりました。
vnako_unit\CsvUtils2Grid.pasで、
以下のようにusesにTntGraphicsを追加し、
,TntGrids,TntGraphics
下記の関数にて、
procedure CsvGridAutoColWidthUni(grid: TTntDrawGrid; csv: TCsvSheet);
Tntコンポーネントの時は、幅・高さの取得は専用の関数を使う必要があるようです。
もともとの内容は、それぞれ、else節の内容だけとなっているのですが、
旧コンパイラ(Delphi7)用として専用の関数で求めるようにすれば、期待した
ように動くと思います。
------------
{$IF RTLVersion < 20}
ww := WideCanvasTextWidth(grid.Canvas,ansi2uni(v));
{$ELSE}
ww := grid.Canvas.TextWidth(v);
{$IFEND}
------------
{$IF RTLVersion < 20}
DefaultRowHeight := Trunc(WideCanvasTextHeight(grid.Canvas,ansi2uni('A'))*1.2);
{$ELSE}
DefaultRowHeight := Trunc(grid.Canvas.TextHeight('A')*1.2);
{$IFEND}
------------
※Uniじゃない方のprocedureの中身は変更してはダメなので念のため。
また、あちこちで呼び出しているansi2uniなのですが、グローバル変数による制御で
SJIS(MS932)への自動識別を停止できないでしょうか?
Uコンポーネントを使うケースは、UTF8ではなくてはいけないところがあるからこそなので、
誤認識される可能性があるならば、せめて手動でオフになればと思います。
(UTF8のローマ数字がMS932の半角カナと重なっていて誤認識を0にできない。)
単純に、ansi2uniが常にUTF8として処理するようになれば目的に合うはずです。
※フォント名も同様になるのが手間ですが、それは仕様とする。