喫茶XRAYトップページ

[▲前のスレッド]

[7050] ZColorStringGridコンポーネントで金額表示させるには?返信 削除
2013/11/7 (木) 10:42:37 KSC
大変、ご無沙汰しております。
KSCです。

未だに毎日10時間以上PCと向かい合いDelphiでソフトウェア開発をしています。

マスターが照会している「ZColorStringGrid」コンポーネント

http://mrxray.on.coocan.jp/Delphi/plSamples/051_ZColorStringGridCompo.htm#00

のページを以前に見ていて、
「へぇ〜こんなコンポーネントがあるんだ〜!!」
と思っていたのですが、

現在、セル結合を多用するカレンダーグリッドを準備しなければならず
マスターの照会ページを見ながら開発を進めているのですが、

下記の内容で悩んでおります。

・金額数値において、
 表示の際は、3桁カンマ区切り表示で、
 編集の際は、3桁カンマ区切りの無い通常の数値で編集をしたい。

普通のTStringGridならOnDrawCellイベントで、
数値データをFormatFloatを使用して表示するのですが、

procedure TFrm.GridDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  str: string;
begin
  if (ARow > 1) and (ACol > 3) and (ACol < Grid.ColCount - 1) then begin
    str := Grid.Cells[ ACol, ARow ];

    if str <> '' then begin
      str := FormatFloat(',0', StrToFloat( str ));

      Grid.Canvas.FillRect( Rect );
      Grid.Canvas.TextOut(Rect.Right - Grid.Canvas.TextWidth( str ) - 2,
                          Rect.Top + ((Rect.Bottom - Rect.Top
                                      - Grid.Canvas.TextHeight( str )) div 2) + 2,
                                      str);
    end;
  end;
end;

TStringGrid同様に上記のように書くと、
金額数値は、
 表示時:3桁カンマ区切り
 編集時:通常の数値
となるのですが、フォント情報がセルの「TCellStyle」のフォントではなく、
Gridのフォントで描画されてしまいます。(たぶん)

セルの「TCellStyle」のフォントで描画させるにはどのようにすれば良いでしょうか?

どなたか知って見える方が居ましたら教えて下さい。

[7053] Re:ZColorStringGridコンポーネントで金額表示させるには?返信 削除
2013/11/7 (木) 20:36:32 snail
▼ KSCさん

話が理解できていないと思いますが、

> となるのですが、フォント情報がセルの「TCellStyle」のフォントではなく、
> Gridのフォントで描画されてしまいます。(たぶん)


単純に「TCellStyle」のフォントと「Gridのフォント」を一緒にしては
駄目ですか。

> セルの「TCellStyle」のフォントで描画させるにはどのようにすれば良いでしょうか?

Grid.Canvas.Font := xxx;

といったように書いては駄目ですか。

> どなたか知って見える方が居ましたら教えて下さい。
知っていないので当てずっぽうです。


[7055] Re2:ZColorStringGridコンポーネントで金額表示させるには?返信 削除
2013/11/8 (金) 10:08:29 KSC
▼ snailさん

アドバイスありがとうございます。

> 単純に「TCellStyle」のフォントと「Gridのフォント」を一緒にしては
> 駄目ですか。
>
> > セルの「TCellStyle」のフォントで描画させるにはどのようにすれば良いでしょうか?
>
> Grid.Canvas.Font := xxx;
>
> といったように書いては駄目ですか。


Grid.Canvas.Fontを変更すると言う事も行ったのですが、Font情報だけは
変更されますが、
「ZColorStringGrid」標準のセル編集のように
・入力文字列の長さがセル幅を超えると自動的にセル幅が広がるとは...
 (SizingWidthがTrueの場合(UseCellSizingWidthがTrueの場合のみ有効))
  ・
  ・
「ZColorStringGrid」の各プロパティに連動したレイアウト変更は、
できません。

OnDrawCellイベントでセル値の描画を実行しようとする場合は、
「ZColorStringGrid」の各プロパティに連動したレイアウト変更に関しても
自前で書くしかないのでしょうかね〜!!

そう考えると、OnDrawCellイベントで何とかしようと考えるよりも
コンポーネントのセルの編集時に使用するエディタを
RxLibの「TRxCalcEdit」のような数値入力コンポーネントなどに
置き換えする方法でいった方が良いのかな?

と言いますか、上記の方法ってどうやれば良いのでしょうかね〜!!

[7058] Re3:ZColorStringGridコンポーネントで金額表示させるには?返信 削除
2013/11/8 (金) 23:06:24 snail
▼ KSCさん

ZColorStringGrid はすでに開発は終わって代わりに ZEXMLSS の開発が
進んでいるようですね。

> Grid.Canvas.Fontを変更すると言う事も行ったのですが、Font情報だけは
> 変更されますが、
> 「ZColorStringGrid」標準のセル編集のように
> ・入力文字列の長さがセル幅を超えると自動的にセル幅が広がるとは...
>  (SizingWidthがTrueの場合(UseCellSizingWidthがTrueの場合のみ有効))


やりたい事がよく理解できません。

↓こちらの説明はごらんになっていますか。

http://avemey.com/zcolorstringgrid/zcolorstringgrid.php?lang=en


InplaceEditorOptions プロパティに UseCellStyle というのがあります。
True に設定されていれば、セルに設定されているプロパティが使用されると
思います。プロパティは↓の感じで設定できます。

  ZSG.CellStyle[ 4, 4 ].Font.Color          := clBlack;   // 文字色
  ZSG.CellStyle[ 4, 4 ].Font.Name           := 'MS 明朝';   // 文字色
  ZSG.CellStyle[ 4, 4 ].Font.Size           := 20;        // 文字サイズ
  ZSG.CellStyle[ 4, 4 ].BGColor             := clTeal;    // 背景色
  ZSG.CellStyle[ 4, 4 ].SizingWidth         := False;    // 入力された文字数に従って列幅を変更しない


>自前で書くしかないのでしょうかね〜!!

しょうかねと書かれても、必要な機能が無いのなら自分で実装するしか
無いんじゃないですか。

>と言いますか、上記の方法ってどうやれば良いのでしょうかね〜!!

実装されている範囲であきらめるか、気合いを入れてソースを読むしか
ないと思います。

ZColorStringGrid ってかなりローカルなものですからね。
ソースを見てもコメントは化け化けでロシア語だし。


[7060] Re4:ZColorStringGridコンポーネントで金額表示させるには?返信 削除
2013/11/9 (土) 09:23:15 KSC
▼ snailさん

アドバイスありがとうございます。

> InplaceEditorOptions プロパティに UseCellStyle というのがあります。
> True に設定されていれば、セルに設定されているプロパティが使用されると
> 思います。プロパティは↓の感じで設定できます。
>
>   ZSG.CellStyle[ 4, 4 ].Font.Color          := clBlack;   // 文字色
>   ZSG.CellStyle[ 4, 4 ].Font.Name           := 'MS 明朝';   // 文字色
>   ZSG.CellStyle[ 4, 4 ].Font.Size           := 20;        // 文字サイズ
>   ZSG.CellStyle[ 4, 4 ].BGColor             := clTeal;    // 背景色
>   ZSG.CellStyle[ 4, 4 ].SizingWidth         := False;    // 入力された文字数に従って列幅を変更しない


上記の情報と後はソースを読んで頑張ってみます。
 
> ZColorStringGrid ってかなりローカルなものですからね。
> ソースを見てもコメントは化け化けでロシア語だし。


そうなんですよね〜。コメントバケバケで...

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82