StringGrid上での色の指定をするには


こうちゃん  2001-10-18 17:20:26  No: 216  IP: [192.*.*.*]

前回はどうもありがとうございました。
また別な壁にぶちあたってしまいました。。。

StringGrid関連です。
1.グリッドを範囲指定したときの色(青っぽいやつ)を変更できますか?
    変更できるときのやり方を教えてください。
2.範囲指定した場合の外枠はつけれますか?

・この二つで選択の背景色を黄色にしてその枠を赤色にしたいです

3.セルの入力時に背景色もしくは文字の色を変更できますか?」
    
・現在背景色が黒で文字が白なのですが入力時に背景色が白になってしまい
  入力中の文字がみえません。

よろしければ教えてください。

  こうゆうのは別々に書いたほうがよいのでしょうか?

編集 削除
にしの  2001-10-21 03:48:51  No: 217  IP: [192.*.*.*]

> こうゆうのは別々に書いたほうがよいのでしょうか?

別々が良い場合と、一緒でも良い場合があると思います。
にたような処理なら一緒に書いた方が1つですみますし。

1,2に関しては、OnDrawCellイベントでできると思います。

3に関しては、TStringGridでの編集ボックス TInplaceEdit のColor, Fontを変更すればできそうですが、プロパティ・メソッドどちらにもそれらしい項目は見あたりません。
TStringGridを派生させて、新しいコンポーネントを作れば、TInplaceEdit のColor, Fontの変更も可能になります。

編集 削除
にしの  2001-10-21 04:49:55  No: 218  IP: [192.*.*.*]

1,2のサンプルです。
セルの内容の描画も必要ですが、ここではしていません。
適宜修正してください。

# 先頭の空白に、全角空白を使っています。

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if gdFixed in State then
  begin
    // 固定セル
    Exit;
  end
  else if gdSelected in State then
  begin
    // 選択中
    StringGrid1.Canvas.Brush.Color := clYellow;
    StringGrid1.Canvas.FillRect(Rect);
    StringGrid1.Canvas.Pen.Color := clRed;
    StringGrid1.Canvas.Rectangle(Rect);
    INC(Rect.Left);
    INC(Rect.Top);
    DEC(Rect.Right);
    DEC(Rect.Bottom);
   StringGrid1.Canvas.Rectangle(Rect);
  end
  else
  begin
    // 非選択中
    StringGrid1.Canvas.Brush.Color := clWindow;
    StringGrid1.Canvas.FillRect(Rect);
  end;
end;

編集 削除