リモートデスクトップ利用時にマウスホイールで常にページごとにスクロールされる
2022/08/08
リモートデスクトップによって PowerBuilder アプリケーションを実行している場合、データウィンドウおよびデータウィンドウ上のドロップダウンリストボックス、ドロップダウンデータウィンドウをマウスホイールでスクロールすると、常に 1 ページごとにスクロールされる事象が報告されています。
Bug ID | 323 | |||||
---|---|---|---|---|---|---|
Product | PowerBuilder EN/JP | |||||
ステータス | PowerBuilder 2019 R3 で修正済 | |||||
発生バージョン | EN | 12.6以前 | 2017 (R2) | 2017 (R3) | 2019 | - |
JP | 12.6以前 | 2017 (R2) | 2017 (R3) | 2019 | - |
※ :発生バージョン :解決済み、未発生 :未確認
(2017 以外のバージョンについてはリリースされている最新リビジョンでの状況です)
詳細
通常、データウィンドウコントロールやデータウィンドウ上のドロップダウンのリストのマウスホイールによるスクロールについては OS のマウス設定 ([設定 | デバイス | マウス] の「マウスホイールでスクロールする量」および「一度にスクロールする行数」) に依存します。
しかし、リモートデスクトップ経由でアプリケーションを操作すると、OS の設定が反映されず、マウスホイールによるスクロールが常に 1 ページごとになります。
回避策
- ホイール操作を検出して行ごとにスクロールさせる (ドロップダウンを除く)
- データウィンドウコントロールの Other イベントでマウスホイールの操作を検出して、Send 関数によりスクロールメッセージを送信します。
[データウィンドウコントロールの Other イベント]
CONSTANT uint WM_MOUSEWHEEL = 522 // マウスホイール操作 CONSTANT long WM_VSCROLL = 277 // スクロール操作 CONSTANT long SB_LINEUP = 0 // 1 行上にスクロール CONSTANT long SB_LINEDOWN = 1 // 1 行下にスクロール long ll_scroll // 上下のどちらにスクロールするか integer li_loop integer li_line = 3 // スクロールする行数 (3 行ごと) // ホイール操作時 IF message.number = WM_MOUSEWHEEL THEN // Ctrl キーが押されている場合は処理を抜ける IF KeyDown(keyControl!) then RETURN 0 IF Sign(IntHigh(wParam)) > 0 THEN // 上スクロール時 ll_scroll = SB_LINEUP ELSE // 下スクロール時 ll_scroll = SB_LINEDOWN END IF // 指定行数分スクロール FOR li_loop = 1 to li_line Send(Handle(THIS), WM_VSCROLL, ll_scroll, 0) NEXT // イベントの処理を止める(二重でスクロール処理が発生するを防ぐため) message.processed = true END IF
なお、ドロップダウンリストボックスおよびドロップダウンデータウィンドウのリストのスクロールに対する回避策はありません。スクロールバーによる操作などで対応するか、PowerBuilder 2019 R3 以降にバージョンアップしてください。