StringGrid の背景色反転を無効にするには

解決


めるめる  2006-11-14 12:41:37  No: 23908  IP: 192.*.*.*

いつもお世話になります。
StringGrid について教えて下さい。

現象
・Form1 に StringGrid1 および Button1 を貼り付け、実行する。
・規定値として一番左上のセルが青反転色で表示される。
・任意のセルをクリックすると背景色の反転は解除される。
・Button1 をクリックすると最後に選択していた StringGrid のセルが青反転色になる。

実現したいこと
・Form1 を表示した時に StringGrid1 の一番左上のセルの反転表示をしない
  (他のセルと同様の背景色とする)
・Button1 をクリックする等、StringGrid1 からフォーカスが抜けたとき、
  最後に選択していたセルを反転表示させない

試しに、OnDrowCell イベントに
  StringGrid1.Canvas.Brush.Color := clWhite;
  StringGrid1.Canvas.Font.Color  := clBlack;
などと記述してみましたがダメでした。

どなたか回答やヒントなど、よろしくご教授おねがいします。

編集 削除
AY  2006-11-14 13:18:14  No: 23909  IP: 192.*.*.*

これで、どうでしょうかね?

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
    with StringGrid1 do begin
        Canvas.Font.Assign(Font);
        if (gdFixed in State) then begin
            Canvas.Brush.Color := FixedColor;
        end
        else begin
            Canvas.Brush.Color := Color;
        end;
        Canvas.FillRect(Rect);
        DrawText(Canvas.Handle, Pchar(Cells[ACol, ARow]),
                      Length(Cells[ACol, ARow]),
                      Rect, DT_SINGLELINE + DT_RIGHT + DT_VCENTER);
    end;

end;

編集 削除
めるめる  2006-11-14 15:11:50  No: 23910  IP: 192.*.*.*

AY 様、丁寧な回答ありがとうございました。
早速試しましたところ、期待通りの動作となりました。
どうやら最後の2行が大事のようですね。

ヒントをいただいたので、ちょっと調べてみました。
最後の DrawText() は、TextOut() でもうまくいくみたいです。

  Canvas.FillRect(Rect);
  Canvas.TextOut(Rect.Left+2, Rect.Top+4, Cells[ACol, ARow]);

今後ともよろしくお願いいたします。

編集 削除
AY  2006-11-14 15:40:46  No: 23911  IP: 192.*.*.*

>最後の DrawText() は、TextOut() でもうまくいくみたいです。

そうですね。
DrawTextは、センタリングや右詰めが可能のなので、
私は  DrawText多用しています。

編集 削除