精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>控件开发和使用>>菜单>>创建一个类似于Win98开始菜单的弹出式菜单

主题:创建一个类似于Win98开始菜单的弹出式菜单
发信人: lihai155(天琴)
整理人: teleme(2000-12-29 11:22:45), 站内信件
1.新建一个PopupMenu1.设置OwnerDraw:=True;
2.添加一个菜单项m1.设置m1.Caption:='';
  m1.Enabled:=False;
3.添加一些你需要的菜单项m2,m3,m4,…….
  其中设置m2.Break:=mbBreak;
4.在m1的DrawItem中:
procedure TForm1.m1DrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; Selected: Boolean);
var
  i:word;
  dy,y:real;
  lf:TLogFont;
  tf:TFont;
begin
  //画渐进色背景
  dy:=(ARect.Bottom - ARect.Top)/256;
  y:=0;
  for i:=255 downto 0 do
  begin
    Acanvas.brush.color:=RGB(255-i,255-i,255);
    Acanvas.fillrect(rect(0,round(y),ARect.Right - ARect.Left,round(y+dy)));
    y:=y+dy;
  end;
  //写字
  With ACanvas do
    Begin
      Brush.Style:=bsClear;
      Font.Name:='宋体';
      Font.Size:=12;
      Font.Color:=clred;
      tf:=TFont.Create;
      tf.Assign(Font);
      GetObject(tf.Handle,sizeof(lf),@lf);
      lf.lfEscapement:=900;
      tf.Handle:=CreateFontIndirect(lf);
      Font.Assign(tf);
      tf.Free;
      TextOut(ARect.Left +2,ARect.Bottom -2,'弹出菜单');
    End;
end;
5.在m1的MeasureItem中:
procedure TForm1.m1MeasureItem(Sender: TObject; ACanvas: TCanvas;
  var Width, Height: Integer);
begin
/////////
  Width:= 10;
  Height:= (PopupMenu1.Items.Count - 1) * 19;
end;
//有什么改进意见欢迎回复,谢谢!



----
问彩云何处飞,愿成风永追随。
有奇缘能相聚,死也无悔。
我柔情深似海,你痴心可问天。
誓相守长缱绻,岁岁年年。

[关闭][返回]