回答
這很好,但可能會違反你的問題的限制。
在該單元的interface
部分含有該TListView
(現有的TForm
聲明)使用的形式,添加
type
TListView = class(ComCtrls.TListView)
protected
procedure WndProc(var Message: TMessage); override;
end;
然後,在同一單元中的implementation
部分中,定義
procedure TListView.WndProc(var Message: TMessage);
begin
inherited;
case Message.Msg of
WM_HSCROLL, WM_VSCROLL: beep;
end;
end;
這個把戲有多安全/合法? Delphi會期望控件是不同的TListView嗎? (例如,表單設計師使用已註冊的控件工作,但這不是) – himself 2013-10-18 10:19:19
或者,如果你想陷入垂直滾動事件,你可以使用它。代碼幾乎與安德烈亞斯發佈的相同...
type
TListView = class(ComCtrls.TListView)
protected
procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
end;
procedure TListView.WMVScroll(var Message: TWMVScroll);
begin
inherited;
Beep;
end;
所有的答案都很好:-),但我不會創建新的孩子的類。 感謝大家的幫助:-)!
我的決心:我使用的組件(在Delphi 7)ApplicationEvents我檢查滾動條位置(GetScrollPos(ListView.Handle,SB_VERT))的變化。
'Application.OnIdle'? – 2011-03-29 21:35:49
我不知道,OnIdle有什麼功能,但它工作。 – Nanik 2011-03-29 21:37:02
其他解決方案要好得多。您只需將代碼包含在具有此組件的表單中。它被稱爲插入器。你爲什麼害怕分類?這是一件非常正常的事情。每次事件出現在消息隊列中時調用GetScrollPos都是浪費的。 – 2011-03-29 21:37:12
您可以在不編寫後代類的情況下創建窗口的子類,當您希望更改後的行爲成爲一次性需求時,這很有用。編寫一個TWndMethod
函數,如Andreas's answer,但是將其寫入任何你想要的類,比如擁有列表視圖的表單。將其分配給列表視圖控件的WindowProc
屬性。在此之前,請存儲該屬性的先前值,以便將所有其他消息推遲到該值。
type
TNanikForm = class(TForm)
ListView: TListView;
private
FPrevListViewProc: TWndMethod;
procedure ListViewWndProc(var Msg: TMessage);
public
procedure Loaded; override;
end;
procedure TNanikForm.ListViewWndProc(var Msg: TMessage);
begin
case Msg.Message of
wm_VScroll: ;
else FPrevListViewProc(Msg);
end;
end;
procedure TNanikForm.Loaded;
begin
inherited;
FPrevListViewProc := ListView.WindowProc;
ListView.WindowProc := ListViewWndProc;
end;
我準備發佈一個幾乎相同的答案,這使得只是相同的觀點。但是,我發現只聽WM_VSCROLL是不夠的。這適用於滾動條的操作,但如果使用鼠標滾輪或鍵盤導航,則不會觸發。我已經查看了看起來會有所幫助的LVN_ENDSCROLL通知消息,但是我無法讓我的代碼捕獲這些消息。 – 2011-03-29 22:32:41
其實我越看越越絕望!也許OnMessage破解畢竟是最不可惡的! – 2011-03-29 22:37:04
@David,通知消息被髮送給控件的* parent *。然後,德爾福的父母在添加一個值「cm_Base」後,將通知重新發送給指定的孩子。常用信息的名稱上有一個「C」前綴。嘗試捕捉'cm_Notify'而不是'wm_Notify'。 – 2011-03-29 22:55:37
- 1. TListView和鼠標滾輪滾動
- 2. 複選框不在TListView組件中滾動
- 3. jQuery - 滾動事件
- 4. RichTextFx滾動事件
- 5. tableheaderview滾動事件
- 6. VB.net textbox滾動條滾動事件
- 7. 鼠標滾動事件
- 8. 事件向下滾動
- 9. 鉻觸發滾動事件
- 10. UITableView的滾動事件
- 11. Viewpager滾動結束事件
- 12. iphone上的滾動事件
- 13. DataGridView滾動事件(和ScrollEventType.EndScroll)
- 14. touchstart事件停止滾動
- 15. jQuery滾動事件行爲
- 16. 按金額滾動事件?
- 17. 表視圖滾動事件
- 18. 在AngularJS中滾動事件
- 19. onclick滾動事件 - 語法?
- 20. 鼠標滾動事件
- 21. 鼠標滾動事件
- 22. Ionic 2滾動事件
- 23. 角度4滾動事件
- 24. 檢測滾動事件(pdfnet)
- 25. 加速滾輪滾動事件
- 26. 如何區分滾動條點擊事件和滾動條拖動事件?
- 27. 綁定滾動事件到動態DIV?
- 28. 滾動事件上的Anychart動畫
- 29. 表格自動滾動,點擊事件
- 30. JavaFX TextArea滾動條移動事件
我不明白這個問題。 – 2011-03-29 20:48:33
@David Heffernan:是的,就是這樣。 – Nanik 2011-03-29 20:52:20
您需要監聽WM_VSCROLL。 – 2011-03-29 20:56:42