XP D2007
StringGridにてカレント行すべてに、色をつけようとしています。
色自体は DrawCellにて操作可能なのですが、問題は
行の移動の把握です。
マウスホイール・矢印キー・クリック全てで 行を移動したときを
把握して、Stringgridをリフレッシュと思ったのですが
OnSelectCellは、直前に発生のようで、Refreshしても
同一行の、カレントセルと他のセルとの色付けがずれます。
行が変わった直後を把握するには どのイベントが該当するのでしょうか?
よろしくお願いします。
既出の変形ですが
private
{ Private 宣言 }
TargetRow: integer; //行位置を記憶する変数
//途中省略/////////////////////////////
procedure TForm1.FormCreate(Sender: TObject);
begin
TargetRow:=1 //初期位置の設定
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (ACol<>0) and (ARow=TargetRow) then begin //ACol=0は固定列の位置
Stringgrid1.Canvas.Brush.Color:=clRed; //色はお好みで
StringGrid1.Canvas.FillRect(Rect);
end;
end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
TargetRow:=ARow; //セルを選んだときに行位置を記憶
StringGrid1.Repaint //再描画
end;
これでカレント行全てに色を付けられます。
Kennyさん、出来ました。
SelectCellは、直前とあったので 直前なら元のCol Rowを持っていると
頭から思い込んでいました。
OnSelectCellでは 次に選択される値を持っていたのですね。
ありがとうございました。
ツイート |