Перемещаемые панели и меню в стиле MS (Docking)

 Для демонстрации понадобилась кнопка, по нажатии которой будет выводиться положение TToolBar. Для события, связанного с нажатием кнопки, пишем код, пред­ставленный в листинге:

 

procedure TForml.ButtonlClick(Sender: TObj ect); var

r:TRect; begin

if ToolBarl.HostDockSiteoControlBarl then

begin

GetWindowRect(ToolBar1.Handle, R);

Application.MessageBox(PChar(IntToStr(r.Left) +' -- '+IntToStr(r.Top)),

'MM' ,IDOK) ;

end;

end;

В первой строке происходит проверка, лежит ли TooiBari на controlBar1 с помощью конструкции:

ToolBar1.HostDockSiteoControlBar1

Если лежит, то получить положение TooiBar1 очень просто. Для этого нужно узнать всего ЛИШЬ ToolBar1.Left И ToolBar1.Top.

Если TooiBari не лежит на компоненте controiBari (TooiBari выглядит как от­дельное окно), то задача усложняется. Вам придется вызывать GetwindowRect, что­бы получить реальное положение TooiBari на экране. В качестве первого парамет­ра вы должны передать указатель на TooiBari, а второй — это переменная типа TRect, в которую запишется реальное положение окна. Для удобства мы выводим ЭТИ значения В окне сообщения Application.MessageBox.

 

Все это делается для наглядности. Теперь можно запустить программу и пере­местить ToolBar1 на экране. Каждый раз, когда вы будете нажимать кнопку, про­грамма будет выводить окно сообщения и показывать вам реальное положение ToolBar1.

Для события onshow напишите:

 

procedure TForm1.ForraShow(Sender: TObj ect);

begin

TooiBar1.ManualDock(nil,nil,alNone);

TooiBar1.ManualFloat(Bounds(100, 500, ToolBar1.UndockWidth, ToolBarl.UndockHeight));

end;

 

Строка TooiBari.ManualDock заставляет переместить TooiBari на новый компо­нент. В качестве первого параметра указывается указатель на компонент или окно, к которому мы хотим прикрепить TooiBari. Пусть требуется, чтобы после загрузки TooiBari превратился в отдельное окно, поэтому для первого параметра указывает­ся nil. Значение второго параметра можно оставить nil. Он означает компонент внутри компонента, указанного в качестве первого параметра, на который мы хо­тим поместить TooiBari. Третий параметр — выравнивание.

 

С помощью TooiBari.ManualFloat двигается TooiBari внутри нового компо­нента. Новый компонент nil, т. е. окно, поэтому двигается TooiBari по окну. Мо­жет, не совсем понятно? Попробуйте запустить пример и поработать с ним, тогда все встанет на свои места.

 

И еще ToolBar l.UndockWidth И TooiBari .UndockHeight возвращают размер компонента TooiBari, когда он выглядит как окно, а не лежит на ControiBari.

Когда вы будете использовать это в своей программе, для сохранения положе­ния TooiBari вам надо будет написать для события Onciose следующий код:

 

var r:TRect;

begin

if TooiBar1 .HostDockSiteoControlBarl then begin

GetwindowRect(TooiBari.Handle, R);

Здесь надо сохранить в реестре R.Left и R.Top.

А также признак, что TooiBari не лежит на ControiBari

end else begin

Здесь надо сохранить в реестре ToolBarl.Left и ToolBar1.Top.

А также признак, что ToolBarl лежит на ControlBarl end; end;

На запуск программы (по событию onshow) вы должны написать код:

procedure TFormi.FormShow(Sender: TObj ect);

begin

Прочитать положение ToolBarl. ControlBarl то Begin

ToolBarl.Left:Сохраненная левая позиция

ToolBarl.Topt:Сохраненная верхняя позиция End; Иначе begin

ToolBarl.ManualDock(nil,nil,alNone);

ToolBarl.ManualFloat(Bounds(Сохраненная левая позиция,Сохраненная правая позиция, ToolBarl.UndockWidth,ToolBar1.UndockHeight)); 

End; end;

Как видите, подводные камни есть. Но все же ничего очень сложного нет. Теперь мы сделаем меню в стиле MS. Для этого есть два способа, и сейчас рас­смотрим самый простой из Перемещаемые панели и меню в стиле MS (Docking)них. Поместите на форму еще один ToolBar и устано­вите его свойство showcaption в true. Соз­дадим на нем две кнопки и назовем их File и Edit. Теперь установим компонент MainMenu и сделаем его таким, как показано на рис. 11.44. Пункт меню Not visible сделаем невидимым (СВОЙСТВО Visible = false). В этом случае все меню будет подключено к форме, но будет невидимо. Для чего это делается, ведь можно было использовать PopupMenu? А потому что при использова­нии PopupMenu приходится мучиться с кла­вишами быстрого вызова, а в этом способе они подключаются автоматически вместе с главным меню.

 

Чтобы создать подменю для меню File, нужно щелкнуть по нему правой кноп­кой мыши и выбрать Create Submenu или нажать клавиши <Ctrl>+<—?>.

Теперь кнопке File в свойстве Menuitem ставим Filei (имя пункта меню), а кнопке Edit ставим Editl. И последнее, обеим кнопкам нужно установить свойство Grouped В true.

У каждой кнопки панели инструментов надо установить в свойстве Grouped зна­чение true, чтобы переход между ними был упрощенным. Если этого не сделать, то, открыв меню File, вы сможете перейти в другое меню только по щелчку мыши.

 

Но это не единственный способ создания меню. Можно создать полноценное главное меню. Потом просто убрать его из свойства главной формы Menu и указать у созданной вами пустой панели (без всяких кнопок) в таком же свойстве Menu. С одной стороны, это проще, но будет тяжело контролировать такое меню, когда у вас большой проект. Когда у вас указано меню для главной формы, то горячие клавиши автоматически начинают работать. Если свойство Menu главной формы очистить, то горячие клавиши придется устанавливать вручную.

dle

Помоги проекту! Расскажи друзьям об этом сайте: