4

Ctrlキーを押しながらグリッド上のさまざまなセルをクリックするなど、グリッド内の任意の場所で複数のセルを隣接させずに選択できる文字列グリッドを探しています。または、誰かが標準のDelphiTStringGridでこれを行う方法を知っている場合。

どんなポインタでもありがたいことに受け取られるでしょう。

4

1 に答える 1

4

ここにはもっと優秀な人がたくさんいますが、まだ答えが出ていないので、やってみようと思いました。

コンポーネントにこれを実行させる方法を私は知りません。ただし、セルをControlキーを押しながらクリックすると、イベントOnSelectedCellが呼び出されます。(テストしたばかりです。)選択した行と列を保持するリストにセルの行と列を追加するコードをイベントハンドラーに配置できます。次に、OnDrawCellイベントで、セルを強調表示します。

procedure TForm1.StringGrid1DrawCell(    Sender: TObject;
                                         ACol: Integer;
                                         ARow: Integer;
                                         Rect: TRect;
                                         State: TGridDrawState);
begin
   if CellSelected( ARow, ACol) then  // you write CellSelected() to refer to the list you're keeping
     begin
       StringGrid1.Canvas.Brush.Color := clYellow;
       StringGrid1.Canvas.FillRect(Rect);
       StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[ACol,ARow]);
     end;
end;
于 2010-08-31T11:26:04.493 に答える