怎么在TOOLBAR里制作菜单?(50分)

  • 主题发起人 主题发起人 小亚delphi
  • 开始时间 开始时间
ToolBar里的按钮属性里有一个DropDownMenu属性,给它赋个Menu就行了
 
用menuitem关联popmenu的item。
 
我也想做这样的菜单,就想DELPHI自己的菜单一样,MENU和TOOLBAR重叠在一起.
二位大师,可不可以详细一点,我这样做了,但是菜单的下拉内容没了.
先在谢谢了.
 
ToolBar里的Speedbutton按钮属性里有一个DropDownMenu属性,给它赋个Menu就
行了,但这个Menu必需为TpopupMenu,并把Toolbar的Flat属性设为True,则和Mainmenu差不多.
>>cxl_chao
把主窗体的Menu属性清空,主窗体的菜单不就没有了吗?
 
详细的过程如下:

前提是必须在Delphi4或5下

1.New Application
2.建立MainMenu
3.将Form的Menu属性清空
4.在CoolBar上建一个ToolBar(也可不要CoolBar)
5.ToolBar的属性改动如下:
AutoSize : True;
Flat : True;
EdgeBorders: []
ShowCaptions : True;
6.在ToolBar上建立与主菜单项数相等的ToolButton,每个Button的属性如下:
Grouped : true;
MenuItem : 指向主菜单的MenuItem

大概如此,好象没忘什么。
 
还有BUTTON的AUTOSIZE:=TRUE
:-)
 
我有个DEMO,需要着请 e-mail
hunterzhang@etang.com
 
小亚delphi: 给你发了例子.
 
小亚delphi: 给你发了补充说明.
 
menubar.zip
类型:免费VCL构件 包含源代码
大小:1KB
适合:DELPHI 4.0/3.0
说明:可以将菜单放到ControlBar上的构件,就像Ofices 97的菜单一样

http://grwy.online.ha.cn/snowstar/download_vcl/face/menubar.zip
 

// only for delphi4,5

unit MenuBar;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ToolWin, ComCtrls, Menus;

type
TMenuBar = class(TToolBar)
private
FMenu: TMainMenu;
procedure SetMenu(const Value: TMainMenu);
protected
procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
public
constructor Create(AOwner: TComponent); override;
published
property EdgeBorders default [];
property Menu: TMainMenu read FMenu write SetMenu;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Samples', [TMenuBar]);
end;

{ TMenuBar }

constructor TMenuBar.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Flat := True;
ShowCaptions := True;
EdgeBorders := [];
ControlStyle := [csCaptureMouse, csClickEvents,
csDoubleClicks, csMenuEvents, csSetCaption];
end;

procedure TMenuBar.GetChildren(Proc: TGetChildProc; Root: TComponent);
begin
end;

procedure TMenuBar.SetMenu(const Value: TMainMenu);
var
i: Integer;
Button: TToolButton;
begin
if FMenu = Value then exit;
if Assigned(FMenu) then
for i := ButtonCount - 1 downto 0 do
Buttons.Free;
FMenu := Value;
if not Assigned(FMenu) then exit;
for i := ButtonCount to FMenu.Items.Count - 1 do
begin
Button := TToolButton.Create(Self);
try
Button.AutoSize := True;
Button.Grouped := True;
Button.Parent := Self;
Buttons.MenuItem := FMenu.Items;
except
Button.Free;
raise;
end;
end;
{ Copy attributes from each menu item }
for i := 0 to FMenu.Items.Count - 1 do
Buttons.MenuItem := FMenu.Items;
end;

end.
 
接受答案了.
 
后退
顶部