您的位置:程序门 -> c++ builder -> vcl组件使用和开发



如何在tscrollbox上的某个固定位置画图?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何在tscrollbox上的某个固定位置画图?[已结贴,结贴人:thinboyxp]
发表于:2007-12-04 11:38:37 楼主
我的form上有个alclient的tscrollbox,里面有个tpaintbox是我用来画图的,现在我想实现这种效果:在scrollbox的左上画一系列的状态标识图片,而当scrollbox内有大图片(出现滚动条的时候),不管滚动到什么位置都始终在左上角,请问如何实现这种效果?
发表于:2007-12-04 11:52:551楼 得分:20
放一个浮动的tpanel(+timage)在tscrollbox的左上角位置(在上面不是在里面)。
发表于:2007-12-04 12:01:022楼 得分:0
可这样tpanel的不透明性会挡住后面的paintbox的部分图
发表于:2007-12-04 12:32:103楼 得分:10
到老妖网站下个imageen组件不是更方便,何必要自己做
发表于:2007-12-04 12:49:314楼 得分:70
用tscrollbox的clientorigin属性,它指出tscrollbox左上角的坐标位置。注意是屏幕坐标,必要时用screentoclient转换。
发表于:2007-12-04 13:17:565楼 得分:0
回复   waiting4you:
    没看到tscrollbox有clientorigin这个属性啊。
回复   ydlchina:
    程序已经做完了,paintbox和gdiplus实现的绘图操作,现在只是要加上这么个功能,提示用户当前的绘图状态。

==========================================================================================
我可以根据滚动条等取到当前左上点在paintbox上的坐标,这样直接在paintbox上画位置是没错,但如果用户拖动滚动条的时候,会出现残像...好像因为开了滚动条的tracking,而这样滚动的时候貌似只更新新出现的部分,所以留下了残像,要是能解决这个滚动残像问题也可以。
发表于:2007-12-04 14:10:366楼 得分:0
你的是什么版本呀,clientorigin是twincontrol的一个只读属性[bcb6]
发表于:2007-12-04 14:38:327楼 得分:0
2007
不过就算你这样取了的话也会出现残像的问题吧?在拖动滚动条的时候。
发表于:2007-12-04 16:17:288楼 得分:0
你可以重载tscrollbox的wm_vscroll,wm_hscroll消息
发表于:2007-12-04 17:03:209楼 得分:0
能详细一点么?
是截到wm_vscroll,wm_hscroll就repaint整个paintbox?
发表于:2007-12-05 09:57:5210楼 得分:0
差不多,通过设置tscrollbox的windowproc属性来截获wm_vscroll,wm_hscroll消息,然后直接调用tscrollbox的invalidate(),这样并不会占用很大的资源。


快速检索

最新资讯
热门点击