StringGrid 行移動の把握

解決


suzuo  2011-02-24 06:32:16  No: 40096

XP  D2007

StringGridにてカレント行すべてに、色をつけようとしています。
色自体は  DrawCellにて操作可能なのですが、問題は
行の移動の把握です。
マウスホイール・矢印キー・クリック全てで  行を移動したときを
把握して、Stringgridをリフレッシュと思ったのですが
OnSelectCellは、直前に発生のようで、Refreshしても
同一行の、カレントセルと他のセルとの色付けがずれます。
行が変わった直後を把握するには  どのイベントが該当するのでしょうか?
よろしくお願いします。


Kenny  2011-02-24 09:07:13  No: 40097

既出の変形ですが

  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;

これでカレント行全てに色を付けられます。


suzuo  2011-02-24 16:59:12  No: 40098

Kennyさん、出来ました。
SelectCellは、直前とあったので  直前なら元のCol  Rowを持っていると
頭から思い込んでいました。
OnSelectCellでは  次に選択される値を持っていたのですね。
ありがとうございました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加