[delphi-users:4928] DBGridの縦スクロールボタンの動作について

248 views
Skip to first unread message

Hirao

unread,
Jun 24, 2018, 9:09:41 PM6/24/18
to "delphi-users@freeml.com"
HIRAOです。

Delphi7 まだ使ってます・・・

DBGridでデータを表示したときに縦のスクロールバーが自動で表示されます。
このとき、▲▼ボタンのクリックでスクロールできますが、
初回は▼ボタンクリックでDBGridに表示している行の最下位へ移動します。
これを1行ずつの移動にしたいのです。
↑↓キーと同じ動作です。

どのようにすればよいでしょうか?


MLホームページ: https://www.freeml.com/delphi-users

----------------------------------------------------------------------
無料ゲームから本格的に楽しめるゲームまで、
インストール不要でスグに遊べます♪
今すぐ遊ぶ ⇒
http://user.gesoten.com/cid/m/378?z=0&g=0
------------------------------------------------------[freeml byGMO]--

あなたの街のチラシがいつでも無料で見放題!
チラシをクリックしてチラシが拡大されたらポイントゲット♪
まずはかんたん登録♪ -ポイントタウン-
https://www.pointtown.com/ptu/rd.cgi?cid=8912
----------------------------------------------------------------------

Fukushi

unread,
Jun 25, 2018, 2:26:17 AM6/25/18
to delphi...@freeml.com
HIRAOさん、こんにちは。福士と申します。

> Delphi7 まだ使ってます・・・

いまさらですね(とはいえDelphiを買うと使える過去のバージョンには
未だDelphi 7が入っていますので…)。

> DBGridでデータを表示したときに縦のスクロールバーが自動で表示されます。
> このとき、▲▼ボタンのクリックでスクロールできますが、
> 初回は▼ボタンクリックでDBGridに表示している行の最下位へ移動します。
> これを1行ずつの移動にしたいのです。
> ↑↓キーと同じ動作です。

TDBGridにそのような機能はないので、TDBGridを派生して縦方向の
スクロールが発生したときのメッセージ処理を捕まえて上下矢印キーに
置き換えてしまう、というのはどうでしょう。

簡単に済ますならTDBGridを配置したユニットでこんな感じにします。

interface

....

type
TDBGrid = class(DBGrids.TDBGrid)
private
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
end;


TForm1 = class(TForm)
DBGrid1: TDBGrid; // フォームに配置したTDBGridコンポーネント
...


implementation

....

procedure TDBGrid.WMVScroll(var Message: TWMVScroll);
begin
with Message do
begin
case ScrollCode of
SB_LINEUP:
begin
Perform(WM_KEYDOWN,VK_UP,0);
Result := 1;
Exit;
end;

SB_LINEDOWN:
begin
Perform(WM_KEYDOWN,VK_DOWN,0);
Result := 1;
Exit;
end;
end;
end;
inherited;
end;

とりあえず手元のDelphi 2007ではそれっぽく動作しました。
TDBGridがいろんなところに配置されているのならちゃんと派生
コンポーネントを作ったほうがいいと思います。

参考にしてください。

---
東洋テクニカルシステム株式会社 システム開発部 福士 光
Hikaru Fukushi (Toyo Technical System Inc.)
mailto:fuk...@tts-inc.co.jp


MLホームページ: https://www.freeml.com/delphi-users

----------------------------------------------------------------------
freemlを運営するGMOメディア株式会社では、
2019年新卒採用の募集をしております。
【募集職種】エンジニア職/Webデザイナー職
説明会も開催中!下記よりアクセスしてください。
https://www.gmo.media/recruit/?utm_medium=freeml&utm_source=freeml

Hirao

unread,
Jun 25, 2018, 3:15:39 AM6/25/18
to delphi...@freeml.com
福士さん、HIRAOです。

うまくいきました。
教えていただいたコードは大切に使わせていただきます。
ありがとうございました。
>__________ ESET Endpoint Antivirus からの情報, 検出エンジンのバージョン
>17607 (20180625) __________
>
>このメッセージは ESET Endpoint Antivirus によって検査済みです。
>
>http://canon-its.jp
>



MLホームページ: https://www.freeml.com/delphi-users

----------------------------------------------------------------------
無料ゲームから本格的に楽しめるゲームまで、
インストール不要でスグに遊べます♪
今すぐ遊ぶ ⇒
http://user.gesoten.com/cid/m/378?z=0&g=0
Reply all
Reply to author
Forward
0 new messages