Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Главное меню [D7, XP]


koss ©   (2008-01-15 12:43:00) 

Добрый день,подскажите пожалуйста каким образом можно разместить главное меню программы на ControlBar'е, чтобы его можно  было перемещать, как панели инструментов.


Palladin   (2008-01-16 15:48:00) [1]

повторяю, у TToolBar уже есть свойство Menu


koss   (2008-01-16 15:42:00) [2]

Вот нашел такую штуку:

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[i].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[i].MenuItem := FMenu.Items[i];
   except
     Button.Free;
     raise;
   end;
 end;
 { Copy attributes from each menu item }
 for i := 0 to FMenu.Items.Count - 1 do
   Buttons[i].MenuItem := FMenu.Items[i];
end;

end.

В принципе работает, может есть способ проще, чем создание отдельного компонента?


ANTPro   (2008-01-15 19:34:00) [3]

Пробовал в гугле набирать TMainMenu+TCoolBar ?


Palladin   (2008-01-15 17:03:00) [4]

да


koss   (2008-01-15 17:01:00) [5]

Возможно повесить TMainMenu на ToolBar?


Palladin   (2008-01-15 16:57:00) [6]

искать компонент в сети или писать свой


koss   (2008-01-15 16:52:00) [7]

А как же быть? Если меня не устраивает TActionMainMenuBar, мне необходимо "повесить" TMainMenu


Palladin   (2008-01-15 13:19:00) [8]

Band'ы таскаются по TCoolBar, именно на него ты и должен повесить TActionMainMenuBar, что бы таскать естественно, а за примером идти не далеко, в MSOffice давно уже таскается


koss   (2008-01-15 13:10:00) [9]

to Apollon:
Стандартный Explorer, может я ошибаюсь не ControlBar,a ToolBar


Palladin   (2008-01-15 13:07:00) [10]


> [1] Apollon ©   (15.01.08 13:06)

привет из каменного века? :)


Apollon   (2008-01-15 13:06:00) [11]

А где ты такое видел?


Palladin   (2008-01-15 13:06:00) [12]

лучше с этим не связываться, но если очень хочется секса, то положи на форму TActionMainMenuBar, TActionManager. распиши все свои акшины и перетащи мышкой на ActionMainMenuBar1


Наверх

Титульная страница Поиск, карта сайта Написать письмо