TStringGridの選択範囲の不可思議な動作

解決


komin  2007-11-29 22:35:02  No: 28745

TStringGirdで、OptionsにgoMultiselectとgoROwSelectが設定されています。
  この時に例えば10行あるとして、5行目が選択されている時にシフトキーを押しながら↓キーを押して9行目までを選択範囲にします。ここでシフトキーを押さずに↓キーを押すと5行目から9行めの選択範囲が解除され、10行目が選択されます。ここまでは思い通りの動作をします。ところが5行目から最後の10行目まで選択範囲にした状態でシフトを押さずに↓キーを押すと選択範囲が解除されません。これを、10行目で↓キーを押した時には選択範囲が解除されて10行目が選択されるようにするにはどうしたらいいでしょうか?


KHE00221  2007-11-29 23:28:51  No: 28746

それは正常な動作かと思いますが

TStringGridではないですが、エキスプロラーで途中から最後までの
ファイルを選択した状態で↓キーを押してみて下さい。
選択は解除されませんよ?


komin  2007-11-29 23:56:54  No: 28747

KHE00221さん

  Windowsとしては正常な動作であることは解っています。が、今回作成しているアプリケーションでは選択が解除されて、最終行だけが選択されるようにしたいのです。


ofZ  2007-11-30 01:08:00  No: 28748

こんな感じのことかい?
procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  gridRect: TGridRect;
begin
  if Shift = [] then begin
    gridRect := StringGrid1.Selection;
    if (KEY=VK_DOWN) and 
       (gridRect.Bottom = StringGrid1.RowCount - 1) then begin
      gridRect.Top :=StringGrid1.Row;
      gridRect.Bottom :=StringGrid1.Row;
      StringGrid1.Selection := gridRect
    end
    else if (KEY=VK_UP) and 
            (gridRect.Top = StringGrid1.FixedRows) then begin
      gridRect.Top := StringGrid1.FixedRows;
      gridRect.Bottom := StringGrid1.FixedRows;
      StringGrid1.Selection := gridRect
    end;
  end;
end;


komin  2007-11-30 20:23:59  No: 28749

ofzさん
  そのコードでうまくいきました。
  なにせ動作をExcelと同じようにせよとの指示で、これで一歩目標に近づけます。ありがとうございます。


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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