いつもお世話になっております。
OnDrawCellイベントでStringGridを表示する時、セルの内容を取得して
マイナス表示なら赤文字、それ以外は黒文字で表示したいのですが、
If (ARow <> 0) and (ARow <> 11) Then
With StringGrid1.Canvas Do
Begin
Brush.Color :=clWhite;
FillRect(Rect);
If strtofloat(StringGrid1.Cells[ACol,ARow])>=0 then
Font.Color := clblack
else
Font.Color := clred;
DrawText(Handle, PChar(StringGrid1.Cells[ACol,ARow]),
Length(StringGrid1.Cells[ACol,ARow]),
Rect,
DT_RIGHT or DT_VCENTER or DT_SINGLELINE);
End;
これで一時は良かったのですが、セルに数字(通常は小数点入り)が
ない段階で表示するとエラーが起こりました。数字と空欄(文字?)だ
からかなと思ったのとDelphi上で実行する時にエラーメッセージを見た
くない(他のエラー箇所が想像しずらい)のでIfの条件を2つにしました。
If (strtofloat(StringGrid1.Cells[ACol,ARow])>=0) or
(StringGrid1.Cells[ACol,ARow]:='') then
コンパイルは通りますが、実行ではじかれてしまいます。
1つのセルに数字と空欄が存在しうる場合のチェック方法はありますで
しょうか?長くなりすみません。よろしくお願い申し上げます。
こうするとか
If (StringGrid1.Cells[ACol,ARow]<>'') and (他の条件) then
QQQさんこんにちは。ありがとうございます。
if (StringGrid1.Cells[ACol,ARow]<>'') and
(strtofloat(StringGrid1.Cells[ACol,ARow])>=0) then
で実行した所できました。
ただ、似たようなコードが以前からあり、問題なかったのですが、この
コードがあるとStringGridのセルが1つしか選択できなくなってしまい
ました。
選択状態の青いセルが白になっているのですが、今回のコードに何か不足
しているのでしょうか?よろしくお願い申し上げます。
TGridDrawStateをHelpで見ると分かります。
//例
if gdSelected in State then
QQQさん。ありがとうございます。
ヘルプを見ましたが今ひとつ理解できない次第です。TGridDrawStateは
セル描画時のセルに関する状態情報を表す・・・とありますが、今まで
できたのは何故?状態情報を表すという事が複数セルの選択とどう関係
するのか?と混乱しております。
参考書を見たらそれっぽい記事が出ていました。QQQさんの例の
>if gdSelected in State then
を使っており、だめもとで試してみました。
if gdSelected in State then を↓の上に置いて
DrawText(Handle, PChar(StringGrid1.Cells[ACol,ARow]),
gdFocused やgdFixedも試しましたが結果は再描画されないらしく、
全てのセルが空欄になりました。
大変お手数ですがもう少し具体的にご指導いただけますでしょうか?
すみません。よろしくお願い申し上げます。
Brush.Color :=clWhite;の行を
//選択orFocusがあれば青くするとか
if (gdSelected in State) or (gdFocused in State) then
Brush.Color:=clBlue else
Brush.Color:=clWhite;
QQQさん、どうもありがとうございました。
実行したところできました。
>if (gdSelected in State) or (gdFocused in State) then
はフォームを表示(描画)した時でけでなく、その後の表示をずっと
フォローし続ける命令と解釈すればよいですか?
問題自体は解決できましたので「解決」とさせていただきますが、
これから復習しようと思っております。
ご親切にどうもありがとうございました。
ツイート | ![]() |