いつもお世話になります。
StringGrid について教えて下さい。
現象
・Form1 に StringGrid1 および Button1 を貼り付け、実行する。
・規定値として一番左上のセルが青反転色で表示される。
・任意のセルをクリックすると背景色の反転は解除される。
・Button1 をクリックすると最後に選択していた StringGrid のセルが青反転色になる。
実現したいこと
・Form1 を表示した時に StringGrid1 の一番左上のセルの反転表示をしない
(他のセルと同様の背景色とする)
・Button1 をクリックする等、StringGrid1 からフォーカスが抜けたとき、
最後に選択していたセルを反転表示させない
試しに、OnDrowCell イベントに
StringGrid1.Canvas.Brush.Color := clWhite;
StringGrid1.Canvas.Font.Color := clBlack;
などと記述してみましたがダメでした。
どなたか回答やヒントなど、よろしくご教授おねがいします。
これで、どうでしょうかね?
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;
AY 様、丁寧な回答ありがとうございました。
早速試しましたところ、期待通りの動作となりました。
どうやら最後の2行が大事のようですね。
ヒントをいただいたので、ちょっと調べてみました。
最後の DrawText() は、TextOut() でもうまくいくみたいです。
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left+2, Rect.Top+4, Cells[ACol, ARow]);
今後ともよろしくお願いいたします。
>最後の DrawText() は、TextOut() でもうまくいくみたいです。
そうですね。
DrawTextは、センタリングや右詰めが可能のなので、
私は DrawText多用しています。