Delphi实用代码:自绘Windows XP风格菜单

http://www.sina.com.cn 2004年08月27日 10:32  太平洋电脑网

  这是以前写的代码,自绘XP风格的菜单,硬盘坏了后以为没了,最后写的一个软件要自定义风格,“翻箱倒柜”的终于在我可爱的古董机^_^上找到了一个应用的例子。

   把主菜单作以下调整:

  OnMeasureItem指向MeasureMainItem、

  OnAdvancedDrawItem指向DrawMainItem,

  子菜单的OnMeasureItem指向MeasureSubItem、

  OnAdvancedDrawItem指向DrawSubItem,

  调整颜色或使用默认颜色即可达到效果

  //调整主菜单项尺寸

  procedure MeasureMainItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer);

  begin

  Width := Width + 6;

  Height := Height + 2;

  end;

  //调整子菜单项尺寸

  procedure MeasureSubItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer);

  begin

  Width := Width + 20;

  Height := Height + 2;

  end;

  //绘制主菜单内容

  procedure DrawMainItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState);

  const

  MainMenuBackColor : TColor = $DEEDEF;

  MainMenuBorderColor : TColor = $DEEDEF;

  MainMenuSelectedBackColor : TColor = $DFA988;

  MainMenuSelectedBorderColor: TColor = $C08000;

  MainMenuHotLightBackColor : TColor = $DEEDEF;

  MainMenuHotLightBorderColor: TColor = $800080;

  MainMenuGrayedBackColor : TColor = $DEEDEF;

  var

  BrushColor, PenColor: TColor;

  TextRect: TRECT;

  begin

  if odGrayed in State then

  begin

  BrushColor := MainMenuGrayedBackColor;

  PenColor := MainMenuGrayedBackColor;

  end

  else

  if odHotLight in State then

  begin //鼠标划过

  BrushColor := MainMenuHotLightBackColor;

  PenColor := MainMenuHotLightBorderColor;

  end

    文章来源:CSDN

发表评论 _COUNT_条
Powered By Google
不支持Flash
·城市对话改革30年 ·新浪城市同心联动 ·诚招合作伙伴 ·企业邮箱畅通无阻
不支持Flash