StringGridでホマウスイールでスクロールの際、選択セルを固定したままにする方法は?

解決


タロウ  2018-11-05 09:10:13  No: 49584  IP: 192.*.*.*

お願いします。エクセルのようにホイールでスクロールしても選択セルが変わらないようにしたいです。

編集 削除
igy  2018-11-05 15:20:23  No: 49585  IP: 192.*.*.*

ちょこっと試してみただけで、正しく動作するかわかりませんが・・・

procedure TForm1.StringGrid1MouseWheelDown(Sender: TObject;
  Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
    with StringGrid1 do
        if TopRow < RowCount - VisibleRowCount    then    TopRow := TopRow + 1;
    Handled := True;
end;

procedure TForm1.StringGrid1MouseWheelUp(Sender: TObject;
  Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
    with StringGrid1 do
        if TopRow > FixedRows then    TopRow := TopRow - 1;
    Handled := True;
end;

編集 削除
igy  2018-11-05 23:12:08  No: 49586  IP: 192.*.*.*

> 正しく動作するかわかりませんが・・・ 

上記のコードでは、TopRow を 1ずつ変化させてますが、
Excelの動作を見てみると、1行ずつスクロールしているわけではなさそうですね。
コードの見直し等が必要なようです。

編集 削除
Mr.XRAY  2018-11-07 14:28:34  No: 49587  IP: 192.*.*.*

TStringGrid のスクロールバーでスクロールする時は,
選択したセルの行と列の番号は変化しないようです.
これがエクセルの場合と同じかは分かりません.

その仕様でよければ,TStringGrid のクライアント領域 (セルをクリックした状態) での
マウスホイール操作をスクロールバーの動作と同じにするという方法が考えられますね.
実際の実装は継承クラスを作成するか,あるいはサブクラス化で行うかですね.

編集 削除
Mr.XRAY  2018-11-07 14:53:52  No: 49588  IP: 192.*.*.*

>マウスホイール操作をスクロールバーの動作と同じにするという方法が考えられますね.
>実際の実装は継承クラスを作成するか,あるいはサブクラス化で行うかですね.

もし,TStringGird に OnMouseWheel(イベントがあればそのイベントが使用できます.
少なくても Delphi 10.2.3 までの TStringGrid には OnMouseWheel イベントはないようです.

編集 削除
igy  2018-11-07 18:30:44  No: 49589  IP: 192.*.*.*

> 上記のコードでは、TopRow を 1ずつ変化させてますが、 

別の方法だと

procedure TForm1.StringGrid1MouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
    StringGrid1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
    Handled := True;
end;

procedure TForm1.StringGrid1MouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
    StringGrid1.Perform(WM_VSCROLL, SB_LINEUP, 0);
    Handled := True;
end;

とかも・・

編集 削除
タロウ  2018-11-09 23:47:58  No: 49590  IP: 192.*.*.*

なるほど!Handledを使えば良かったのですね!
自分の作りたかったプログラムが作れました!
ありがとうございました!

編集 削除