是否可以在滚动条上绘画?

时间:2010-02-04 14:00:50

标签: delphi winapi scrollbar

是否可以在标准控件的滚动条上绘画,如TMemo,TListbox等。?

我需要的是在滚动条上绘制一些基本形状,我试图避免从stratch实现整个滚动的东西。有什么指针吗? TIA!

2 个答案:

答案 0 :(得分:10)

确实有可能,您可能需要查看WM_NCPAINT消息,这是WM_PAINT消息的非客户区对应版本。这不是一件容易的事,但是因为你不打算自己完成整个滚动条的绘制,所以它可能更直接。

您可能会发现this article [1]来自The Code Project的更多信息,代码是使用C ++编写的,并且格式不完全,但是它应该对如何有所了解实现滚动条的所有权。

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

答案 1 :(得分:1)

听起来你可以创建一个自定义控件(从TMemo或其他东西派生)。您可以按here所述override该控件的Paint程序进行操作。

我不知道是否允许您在滚动条上绘图,但希望它可以帮助您创建自定义控件。

修改的 Tommy的答案和我的答案的结合:Here是一个使用WindowProc方法处理自定义控件中的消息的示例(尽管有点复杂)。如果您创建了一个控件,则可以处理WM_NCPAINT消息。另外here是关于Delphi中Windows消息处理的更多信息。