如何将主菜单放在工具条上像word的菜单那样? (50分)

  • 主题发起人 主题发起人 唐僧肉
  • 开始时间 开始时间

唐僧肉

Unregistered / Unconfirmed
GUEST, unregistred user!
如何将主菜单放在工具条上像word的菜单那样?
 
你要在你写控件的时候留下接口啊!然后在网页程序中调用,这不是一个能用的方法吗?
 
能不能再详细些,有几种写接口的方法呢?
 
toolbar上加TToolButton,TToolButton.DropdownMenu := PopupMenu,TToolButton.Style := tbsDropDown
 
楼上的兄:
你说的是带下拉功能的按钮,而不是菜单!
而且toolbar也不能像word那样随意拖动!
 
可以拖动,只是不能象word那样变化
 
真的不行
 
ToolBar.Menu属性设为MainMenu即可!
 
阿弥陀佛!竟然出现了两个一样的菜单!上下在一起,咋办呢?
 
找第三方控件吧!
 
delphi 窑洞http://www.51delphi.com/delphi/有个控件DevExpress ExpressBar很好用,可实现上述菜单功能
 
下面是DELPHI 他们自己做的一个菜单工具栏:
================================================================
{*******************************************************}
{ }
{ Implements a TToolbar descendant that has a Menu to }
{ make IDE like Toolbar menus very easy. This works }
{ only in Delphi 4.0 }
{ }
{ Copyright (c) 1995,98 Inprise Corporation }
{ }
{*******************************************************}

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.
 
强烈建议使用Dev Express公司的DEVEXPRESSBAR,非常好用。
去 www.51delphi.com 下载。
我也可以给你发送一个使用该控件开发的界面图,或参见我以前的帖子:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1835204
 
要实现你所要的效果,你可以这样做:
1.放一个CoolBar
2.将一个ToolBar放在CoolBar里
3.放一个Menu并设置菜单项
4.将ToolBar的Menu属性设置为(3)中添加的Menu
5.将Menu的AutoMerge设为True(这样就不会出现上下两个菜单)
6.欣赏效果(建议将ToolBar的Flat属性设为True,这样比较好看)
:)
 
多谢诸位帮忙!
 

Similar threads

回复
0
查看
816
不得闲
D
回复
0
查看
755
DelphiTeacher的专栏
D
D
回复
0
查看
763
DelphiTeacher的专栏
D
D
回复
0
查看
779
DelphiTeacher的专栏
D
后退
顶部