SOS:如何建立类似DELPHI中ToolBar的浮动工具条(50分)

  • 主题发起人 主题发起人 Puff
  • 开始时间 开始时间
P

Puff

Unregistered / Unconfirmed
GUEST, unregistred user!
本人刚开始DELPHI,现问一基础问题:
我想建立一工具条,要求可以拖动、改变形状,而且工具条里面
不是BUTTON,而是可以弹出类似MAINMENU的多级菜单,请问应选用
哪个控件,相应属性该如何设置
 
1.放一个coolbar
2.放一个toolbar到coolbar上
3.放一个ImageList,添加图标
4.放一个popupmenu,添加若干菜单项
4.在toolbar上点右键
5.选new toolbutton
6.选toolbutton1
7.设置toolbutton1.style=tbsDropDown,
8.设置toolbutton1.menuitem.
9.toolbar.flat:=true;
10.coolbar.docksite:=true;
11.toolbar.dragkind:=dkdock;
运行
 
请问ImageList与 PopupMenu 是直接放到ToolBar上吗?
另外,我在toolbar上点右键,怎么没有"NEW TOOLBUTTON"选项?
不好意思,再麻烦一下!
 
imagelist和popupmenu随便仍在哪里。
“new toolbutton"="new button"
 
照着做,我建议可以给分了。
 
demos下有利子程序,拿出来看看,分析分析
 
补充:
toolbar1.dragmode:=dmAutomatic;
toolbar1.imagelist:=imagelist1;
coolbar1.docksite:=true
 
我增加一点,inprise公司有个控件MenuBar.pas可以直接放在coolbar上,再添加
MainMenu,设置MenuBar的Menu为MainMenu,form1的menu为空,就可以做出Delphi
一样的菜单,不过要想更好的效果,建议使用AM2000,
MenuBar.pas 源码如下:
{*******************************************************}
{ }
{ 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.

 
To Hexi:ToolButton怎么没有Flat属性呀,是我的delphi不行还是有错误?
To www:好像ToolBar不能够用toolbar1.dragmode:=dmAutomatic;用了会有错误

不过Hexi的方法是又简单又好用的,呵呵,看到大家奋勇回答me也想问个问题,如
何像delphi5一样吧菜单也做成这种样式,而且可以把这种bar或者是panel拉出来
使他单独成为一个窗体呀?我出100分不够可以再加

其实也Hexi就是用CoolBar的Bands来做的,他拖入了ToolBar就是自动产生了Bands

我的具体方法是
1、放置CoolBar
2、双击CoolBar,并且新建两个Bands
3、放置两个ToolBar,并且把两个Bands的Control指向ToolBar(就可以满足第一
个问题了随意改变形状和尺寸)
其实在Delphi5中可以不必处理后面的拖动以及靠挂

后面的则可以直接用PopupMenu的Popup事件呼出,不知道对不对呀,来晚了,没的
分了
 
用Popup模仿我来不及做了,哪位大侠出手做一个
 
要不用TB97加AM2000做菜单,超酷!!!!
 
Flat是在ToolBar中。
 
多人接受答案了。
 
后退
顶部