TStringGirdで、OptionsにgoMultiselectとgoROwSelectが設定されています。
この時に例えば10行あるとして、5行目が選択されている時にシフトキーを押しながら↓キーを押して9行目までを選択範囲にします。ここでシフトキーを押さずに↓キーを押すと5行目から9行めの選択範囲が解除され、10行目が選択されます。ここまでは思い通りの動作をします。ところが5行目から最後の10行目まで選択範囲にした状態でシフトを押さずに↓キーを押すと選択範囲が解除されません。これを、10行目で↓キーを押した時には選択範囲が解除されて10行目が選択されるようにするにはどうしたらいいでしょうか?
それは正常な動作かと思いますが
TStringGridではないですが、エキスプロラーで途中から最後までの
ファイルを選択した状態で↓キーを押してみて下さい。
選択は解除されませんよ?
KHE00221さん
Windowsとしては正常な動作であることは解っています。が、今回作成しているアプリケーションでは選択が解除されて、最終行だけが選択されるようにしたいのです。
こんな感じのことかい?
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;
ofzさん
そのコードでうまくいきました。
なにせ動作をExcelと同じようにせよとの指示で、これで一歩目標に近づけます。ありがとうございます。
ツイート | ![]() |