2010-02-04 40 views
6

是否可以在TMemo,TListbox等標準控件的滾動條上繪製?是否可以在滾動條上繪製?

我需要的是在滾動條上繪製一些基本的形狀,我試圖避免從stratch實現整個滾動的東西。任何指針? TIA!

回答

9

確實有可能,您可能需要查看WM_NCPAINT消息,這是WM_PAINT消息的非客戶端區域對應版本。這不是一件容易的事情,但是因爲你不打算整個繪製滾動條,所以它可能更直接。

進一步您可能會發現this article [1]The Code Project有趣的代碼是在C++和未格式化完全好,但它應該給一些想法,以一個如何實現滾動條的ownerdrawing。

Screenshot from project at The Code Project
來自前面提到的TCP項目的屏幕截圖。

除了第一個項目,你可能會發現this project [2]有趣,它也擁有滾動條,我知道你只想繪製滾動條頂部,但我的賭注是,這也會幫助你,它包括源代碼也是如此。

Screenshot from Cool Scrollbar project http://www.catch22.net/img/coolscroll02.gif
Cool Scrollbar項目的屏幕截圖。

它可能有助於檢查VCL源代碼以檢索滾動條按鈕位置等信息。代碼可以在forms.pas文件中找到,至少這是我的簡要內容搜索。希望這可以有任何幫助。祝你好運。

[1] http://www.codeproject.com/KB/dialog/skinscrollbar.aspx
[2] http://www.catch22.net/tuts/coolscroll

+0

太棒了!謝謝。 – 2010-02-05 01:23:10

1

聽起來你可以創建一個定製的控制(從TMemo或任何導出)。你可以overridePaint程序的那個控制描述here

我不知道這是否允許您在滾動條上繪製,但希望它可以幫助您創建自定義控件。

EDIT 托米的答案和我的一個combonation:Here是一個例子(儘管更復雜的一個位),它使用WindowProc方法中一個自定義的控制來處理消息。如果您創建控件,則可以處理WM_NCPAINT消息。另外here是一些關於Delphi中Windows消息處理的更多信息。

相關問題