なでしこ1のUグリッドの自動幅調整

51 views
Skip to first unread message

うぇいく

unread,
Oct 30, 2017, 10:07:55 AM10/30/17
to 日本語プログラミング言語「なでしこ」開発
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として処理するようになれば目的に合うはずです。
※フォント名も同様になるのが手間ですが、それは仕様とする。
Reply all
Reply to author
Forward
0 new messages