将TMainMenu或者TPopupmenu的OwnerDraw属性设为True。就可以了。

解决方案 »

  1.   

    小妹再问一个弱智问题,
    ownerdraw属性  +
    onMeasureItem
    onDrawItem
    一般用来做什么?这2个事件的触发顺序及用法可以简单介绍一下吗?我增加了showmessage后一运行就死机?
    谢啦!
      

  2.   

    onDrawItem是给你自己画菜单用的~~~怎么那么多小妹?
      

  3.   

    在OnDraw事件中最好不要写ShowMessage,会引起死循环的。
      

  4.   

    呵呵~~TO:chechy(chechy)你怎么知道我的头发都快要掉光了??哈哈~~
      

  5.   

    TO: nicho(妮可) ~~小妹当然好了~~:)~~欢迎~~~
    是呀!!OnDraw是时时触发的~~~~
      

  6.   

    onMeasureItem是用来在自己画菜单时之前测定每一项的高度,你可通过给参数“Height”赋值以达到目的。但是这时的自画风格应该设为:DrawVarialble(可能是这样写的吧,意思是“可变的”)。这两个事件都在菜单重画时触发,但首先是onMeasureItem事件,然后是onDrawItem
    事件。
      

  7.   

    呵呵~~是呀!!
    可以在onMeasureItem里面设定菜单的高度~~
    在OnDraw里面设定菜单的字体以及颜色等等~~使之与高度相匹配~~
    这样好看一些~~:)
      

  8.   

    OnMeasureItem是要设定需要画的菜单的长和宽。通常是不用写的,除非你想让菜单折行。
    OnDrawItem才是经常要处理的。基本上在这里写代码。
    最简单的代码就是
    DrawText(Canvas.Handle, PChar((Sender as TMenuItem).Caption), -1, ARect, DT_LEFT or DT_VCENTER);
      

  9.   

    TO: nicho(妮可) ~~~小妹~~chechy(chechy) 可是很厉害的~~你可以拜他为师呀~~
      

  10.   

    在OnDrawItem中写ShowMessage,实际上又诱发MenuItem重绘,重新触发OnDrawItem。这样引起死循环。
      

  11.   

    真的啊,chechy(chechy) ,我刚开始学习delphi,这么笨的徒弟你肯收吗?
    要什么拜师礼吗?:)
      

  12.   

    tikkypeng(千两狂死郎)你就不要客气了,收了这个徒弟吧。你水平也不错啊!
      

  13.   

    拜见tikkypeng,chechy两位师伯!