唉,这段时间快疯了,总是碰到一些很诡异的问题,这次又有了:拖了一个OleContainer在Form上,然后改变它的Color属性为clBlack,无效?运行一下,还是那个灰色背景...  又试着添了一个按钮,在按钮处理程序中加了改变OleContainer的Color的代码,运行后,还是无效? 我看到了恶作剧之神在狞笑...

解决方案 »

  1.   

    给你说明了吧,Ole对象的原理是,在非激活状态是请求服务器给你一张图片,在激活状态是请求服务器在相应区域绘制窗体并响应事件。
    所以,非激活状态OleContainer中的背景是Word给它的一张图片,激活状态是Word把窗体给塞到了OleContainer中。
    楼主是否还想改它的Color属性?
      

  2.   

    按照楼上的说法就是说非激活状态的背景是有word决定的?如果真是这样的话就算改了也达不到我的本来目的了...
    不过在网上找了很久,最后google到一个国外的Delphi论坛上是这样说的:继承TOleContainer类,然后把类的一个Paint的方法重写下就可以了,但是照着弄了还是搞不定,大家可以参考下:http://www.devsuperpage.com/main.asp?F=Articles/LangCatArt.asp&Lang=1&Cat=28
    另外,我给Mastering Delphi7的作者Marco Cantu发了个mail,告诉他这个问题,他居然回信说他好久没用OLE这个类了,恐怕帮不了我,也不知道是不是自己被鄙视了...
      

  3.   

    实验证明,我的想法确实是错的,的确在Paint方法中加上Canvas.FillRect(CR);就可以让它在非激活状态下改变背景色了
      

  4.   

    可以吗?我也在OleCtnrs单元里面在DrawEdge(Canvas.Handle, CR, EDGE_SUNKEN, Flags or BF_MIDDLE);
     后面加了Canvas.FillRect(CR);,然后重新编译运行还是不能改变啊?
      

  5.   

    刚才又测试了一下,是可以的,但是好像是只有这一行有文字才会在container里出现背景色,如果页面只有一行文字,那么就只会有这一行所在的位置有黑色背景...
      

  6.   

    OleContainer有个属性Ctl3D
    把它的值设为False就可以了。