如何在菜单的左边加一个长方形的图片,就像WINDOWS的开始菜单? 建议你用XPBarMenu这个控件,绝对推荐。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那里有这个控件啊?它不是DELPHI的内部控件吧? CoolMenus Prowww.cooldev.com 不是,你在相关的delphi网站上搜一下,具体地址我忘了,肯定有的。。完全可以解决你的问题,而且很cool................... CoolMenus Prowww.cooldev.com没有XPBarMenu好用(个人之见) xpmenu kingron.myetang.com由下载! 菜单项里有bitmap这个属性呀!直接就可以加图标 首先利用图像软件建立一个长条型的位图文件(你可以根据你的需要设定图像的高宽比,在我的图像中是10:1)。在Delphi中建立一个新的工程,在Form1中加入一个TImage控件,将控件的AutoSize属性设置为True。然后在Form1中加入一个TMainMenu控件,将它的OwnerDraw属性设置为True(这一点很重要,否则程序无法实现)在该TMainMenu下加入6个TMenuItem对象(鼠标右健点击TMainMenu控件,然后点击弹出菜单的Menu Designer 项,就可以在设计窗口中添加菜单条了),将它们的Name属性分别设置为 Caption1、Caption2、…、Caption6。 unit OwnerMenu;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, ExtCtrls, StdCtrls, ImgList;type TForm1 = class(TForm) MainMenu1: TMainMenu; Main1: TMenuItem; Caption1: TMenuItem; Caption2: TMenuItem; Caption3: TMenuItem; Caption4: TMenuItem; Caption5: TMenuItem; Caption6: TMenuItem; Image1: TImage; procedure Caption1MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); procedure Caption2MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); procedure Caption3MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); procedure Caption4MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); procedure Caption5MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); procedure Caption6MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); procedure Caption1DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); procedure Caption2DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); procedure Caption3DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); procedure Caption4DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); procedure Caption5DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); procedure Caption6DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); private { Private declarations } public procedure DrawItem(Sender: TMenuItem; ACanvas: TCanvas;ARect: TRect; Selected: Boolean;strOUt:String); { Public declarations } end; var Form1: TForm1; i,iH,Ind,iW,iRate:Integer; rTemp:TRect; iG1,iG2:Integer; implementation {$R *.DFM} procedure TForm1.DrawItem(Sender: TMenuItem; ACanvas: TCanvas;ARect: TRect; Selected: Boolean;strOut:String); var j:Integer; begin i:=ARect.Bottom -ARect.Top; //获得贴图的高度和宽度 Ind:=Sender.MenuIndex; iH:=Round(Image1.Height/6*Ind); //获得贴图位置 //将Image上相应位置的位图复制到菜单上 StretchBlt(ACanvas.Handle,ARect.Left,ARect.Top,iW,i,Image1.Canvas.Handle,0,iH, Image1.Width,Round(Image1.Height/6),SRCCOPY); if Selected then begin //该菜单项被选中 ACanvas.Font.Color := clWhite; rTemp:=ARect; rTemp.Left := rTemp.left+iW; iG1:=Round((rTemp.Right - rTemp.Left)/10); rTemp.Right := rTemp.Left +iG1; for j:= 0 to 9 do begin //通过循环设置色彩渐变效果 ACanvas.Brush.Color := RGB(0,0,j*25); ACanvas.FillRect(rTemp); rTemp.Left := rTemp.Left +iG1; rTemp.Right := rTemp.Left +iG1; end; end else begin //该菜单项没有被选中 ACanvas.Brush.Color := cl3DLight; //设置背景色为浅灰 rTemp:=ARect; rTemp.Left := rTemp.left+iW; ACanvas.FillRect(rTemp); ACanvas.Font.Color := clBlack; end; //设置Canvas的画笔填充模式为透明 ACanvas.Brush.Style:=bsClear; //在菜单上输出文字 ACanvas.TextOut(ARect.Left+iW+5,ARect.Top,strOut); end; procedure TForm1.Caption1MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); begin //在OnMeasureItem事件中改变菜单的宽度和高度,下面5个程序同 //改变菜单的宽度和高度以容纳文本 Height:=ACanvas.TextHeight('Caption1')+5; Width:=ACanvas.TextWidth('Caption1')+5; iRate:=Round(Image1.Height/(Height*6)); iW:=Round(Image1.Width /iRate); Width:=Width+iW; //根据计算改变菜单宽度以容纳附加的文本 end; procedure TForm1.Caption2MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); begin Height:=ACanvas.TextHeight('Caption1')+5; Width:=ACanvas.TextWidth('Caption1')+5; iRate:=Round(Image1.Height/(Height*6)); iW:=Round(Image1.Width /iRate); Width:=Width+iW; end; procedure TForm1.Caption3MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); begin Height:=ACanvas.TextHeight('Caption1')+5; Width:=ACanvas.TextWidth('Caption1')+5; iRate:=Round(Image1.Height/(Height*6)); iW:=Round(Image1.Width /iRate); Width:=Width+iW; end; procedure TForm1.Caption4MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); begin Height:=ACanvas.TextHeight('Caption1')+5; Width:=ACanvas.TextWidth('Caption1')+5; iRate:=Round(Image1.Height/(Height*6)); iW:=Round(Image1.Width /iRate); Width:=Width+iW; end; procedure TForm1.Caption5MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); begin Height:=ACanvas.TextHeight('Caption1')+5; Width:=ACanvas.TextWidth('Caption1')+5; iRate:=Round(Image1.Height/(Height*6)); iW:=Round(Image1.Width /iRate); Width:=Width+iW; end; procedure TForm1.Caption6MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); begin Height:=ACanvas.TextHeight('Caption1')+5; Width:=ACanvas.TextWidth('Caption1')+5; iRate:=Round(Image1.Height/(Height*6)); iW:=Round(Image1.Width /iRate); Width:=Width+iW; end; procedure TForm1.Caption1DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); begin DrawItem(TMenuItem(Sender),ACanvas,ARect,Selected,'Caption1'); end; procedure TForm1.Caption2DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); begin DrawItem(TMenuItem(Sender),ACanvas,ARect,Selected,'Caption2'); end; procedure TForm1.Caption3DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); begin DrawItem(TMenuItem(Sender),ACanvas,ARect,Selected,'Caption3'); end; procedure TForm1.Caption4DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); begin DrawItem(TMenuItem(Sender),ACanvas,ARect,Selected,'Caption4'); end; procedure TForm1.Caption5DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); begin DrawItem(TMenuItem(Sender),ACanvas,ARect,Selected,'Caption5'); end; procedure TForm1.Caption6DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); begin DrawItem(TMenuItem(Sender),ACanvas,ARect,Selected,'Caption6'); end; end. dephi中怎么在表格中设置超链接 Winsock使用的问题请大家帮忙 提示找不到组件的.dcu文件 如何将图片文件插入到EXECL文件中的某一个Cells中?急..... 如何在指定的字符串中查找双引号?在线 怎樣通過代碼關閉另外一個應用程序 下载不了 关于WebBrowsers控件的问题 在delphi和bcb中怎么使用已有的com组件? 在DELPHI中,ADO与BDE有何区别? 有没有dbtreecombox控件。 用于主从关系结构的组合框 郁闷哪!散分!!
www.cooldev.com
www.cooldev.com没有XPBarMenu好用(个人之见)
unit OwnerMenu;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, ExtCtrls, StdCtrls, ImgList;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Main1: TMenuItem;
Caption1: TMenuItem;
Caption2: TMenuItem;
Caption3: TMenuItem;
Caption4: TMenuItem;
Caption5: TMenuItem;
Caption6: TMenuItem;
Image1: TImage;
procedure Caption1MeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
procedure Caption2MeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
procedure Caption3MeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
procedure Caption4MeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
procedure Caption5MeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
procedure Caption6MeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
procedure Caption1DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
procedure Caption2DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
procedure Caption3DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
procedure Caption4DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
procedure Caption5DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
procedure Caption6DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
private
{ Private declarations }
public
procedure DrawItem(Sender: TMenuItem; ACanvas: TCanvas;ARect: TRect;
Selected: Boolean;strOUt:String);
{ Public declarations }
end;
var
Form1: TForm1;
i,iH,Ind,iW,iRate:Integer;
rTemp:TRect;
iG1,iG2:Integer;
implementation
{$R *.DFM}
procedure TForm1.DrawItem(Sender: TMenuItem; ACanvas: TCanvas;ARect: TRect;
Selected: Boolean;strOut:String);
var
j:Integer;
begin
i:=ARect.Bottom -ARect.Top; //获得贴图的高度和宽度
Ind:=Sender.MenuIndex;
iH:=Round(Image1.Height/6*Ind); //获得贴图位置
//将Image上相应位置的位图复制到菜单上
StretchBlt(ACanvas.Handle,ARect.Left,ARect.Top,iW,i,Image1.Canvas.Handle,0,iH,
Image1.Width,Round(Image1.Height/6),SRCCOPY);
if Selected then begin //该菜单项被选中
ACanvas.Font.Color := clWhite;
rTemp:=ARect;
rTemp.Left := rTemp.left+iW;
iG1:=Round((rTemp.Right - rTemp.Left)/10);
rTemp.Right := rTemp.Left +iG1;
for j:= 0 to 9 do begin //通过循环设置色彩渐变效果
ACanvas.Brush.Color := RGB(0,0,j*25);
ACanvas.FillRect(rTemp);
rTemp.Left := rTemp.Left +iG1;
rTemp.Right := rTemp.Left +iG1;
end;
end
else begin //该菜单项没有被选中
ACanvas.Brush.Color := cl3DLight; //设置背景色为浅灰
rTemp:=ARect;
rTemp.Left := rTemp.left+iW;
ACanvas.FillRect(rTemp);
ACanvas.Font.Color := clBlack;
end;
//设置Canvas的画笔填充模式为透明
ACanvas.Brush.Style:=bsClear;
//在菜单上输出文字
ACanvas.TextOut(ARect.Left+iW+5,ARect.Top,strOut);
end;
procedure TForm1.Caption1MeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
begin
//在OnMeasureItem事件中改变菜单的宽度和高度,下面5个程序同
//改变菜单的宽度和高度以容纳文本
Height:=ACanvas.TextHeight('Caption1')+5;
Width:=ACanvas.TextWidth('Caption1')+5;
iRate:=Round(Image1.Height/(Height*6));
iW:=Round(Image1.Width /iRate);
Width:=Width+iW; //根据计算改变菜单宽度以容纳附加的文本
end;
procedure TForm1.Caption2MeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
begin
Height:=ACanvas.TextHeight('Caption1')+5;
Width:=ACanvas.TextWidth('Caption1')+5;
iRate:=Round(Image1.Height/(Height*6));
iW:=Round(Image1.Width /iRate);
Width:=Width+iW;
end;
procedure TForm1.Caption3MeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
begin
Height:=ACanvas.TextHeight('Caption1')+5;
Width:=ACanvas.TextWidth('Caption1')+5;
iRate:=Round(Image1.Height/(Height*6));
iW:=Round(Image1.Width /iRate);
Width:=Width+iW;
end;
procedure TForm1.Caption4MeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
begin
Height:=ACanvas.TextHeight('Caption1')+5;
Width:=ACanvas.TextWidth('Caption1')+5;
iRate:=Round(Image1.Height/(Height*6));
iW:=Round(Image1.Width /iRate);
Width:=Width+iW;
end;
procedure TForm1.Caption5MeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
begin
Height:=ACanvas.TextHeight('Caption1')+5;
Width:=ACanvas.TextWidth('Caption1')+5;
iRate:=Round(Image1.Height/(Height*6));
iW:=Round(Image1.Width /iRate);
Width:=Width+iW;
end;
procedure TForm1.Caption6MeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
begin
Height:=ACanvas.TextHeight('Caption1')+5;
Width:=ACanvas.TextWidth('Caption1')+5;
iRate:=Round(Image1.Height/(Height*6));
iW:=Round(Image1.Width /iRate);
Width:=Width+iW;
end;
procedure TForm1.Caption1DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
begin
DrawItem(TMenuItem(Sender),ACanvas,ARect,Selected,'Caption1');
end;
procedure TForm1.Caption2DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
begin
DrawItem(TMenuItem(Sender),ACanvas,ARect,Selected,'Caption2');
end;
procedure TForm1.Caption3DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
begin
DrawItem(TMenuItem(Sender),ACanvas,ARect,Selected,'Caption3');
end;
procedure TForm1.Caption4DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
begin
DrawItem(TMenuItem(Sender),ACanvas,ARect,Selected,'Caption4');
end;
procedure TForm1.Caption5DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
begin
DrawItem(TMenuItem(Sender),ACanvas,ARect,Selected,'Caption5');
end;
procedure TForm1.Caption6DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
begin
DrawItem(TMenuItem(Sender),ACanvas,ARect,Selected,'Caption6');
end;
end.