Урок 6 - Меню - как много в этом слове
Ведущий раздела KOL и MCK: Анатолий aka XVeL
Автор: Борис Моренко
WEB-сайт: http://kol.mastak.ru
Полную версию библиотеки KOL и MCK можно скачать здесь.
Почти в любой программе есть меню. И у нас оно тоже будет. Меню
создается на объектах типа pMenu
function NewMenu( AParent: PControl; FirstCmd: Integer; const Template: array of PChar; aOnMenuItem: TOnMenuItem ): PMenu;
В AParent вы указываете к чему будет принадлежать меню. Если вы
указали форму, то для нее это будет главное меню.
Template - это массив, состоящий из пунктов меню. В этих пунктах
могут встречаться специальные символы. Вот их список:
Символ |
Значение |
& |
подчеркивает следующий символ |
+ |
галочка в меню |
- |
разделитель между пунктами меню |
( |
начало подменю |
) |
конец подменю |
Через aOnMenuItem указывается процедура, обрабатывающая
выбранный пункт меню.
Описание некоторых свойств меню
Свойство |
Описание |
ItemChecked[idx:integer]:boolean |
Ставит/убирает галочку на пункт меню с индексом
idx |
RadioCheck(idx:integer) |
Ставит радио-галочку на один из пунктов меню |
Popup(x,y:integer); |
Вызывает меню на экран в позиции x,y |
ItemText[idx:integer]:string |
Текст пункта меню с индексом idx |
ItemEnabled[idx:integer]:boolean |
Включает/выключает пункт меню с индексом idx |
ItemVisible[idx:integer]:boolean |
Показывать/не показывать пункт меню с индексом
idx |
Давайте добавим в наш редактор пару пунктов меню:
program Primer;
uses
Windows,
messages,
KOL;
{$R *.RES}
var
Form,
PanTools,
REdit,
butOpen,
butSave : PControl;
mainMenu : pMenu;
Dialog : pOpenSaveDialog;
procedure clikButOpenSave( Dummy : Pointer; Sender : PControl );
var
title : string;
begin
if sender = butOpen then
begin
Dialog.title := 'Открыть';
Dialog.OpenDialog := TRUE;
REdit.Clear;
end
else
begin
Dialog.title := 'Сохранить как...';
Dialog.OpenDialog := FALSE;
end;
if Dialog.Execute then
if sender = butOpen then
REdit.RE_LoadFromFile(Dialog.Filename, reText, false)
else
REdit.RE_SaveToFile(Dialog.Filename, reText, false);
form.StatusText[0] := PChar(Dialog.Filename);
end;
procedure ProcessingMenu ( Dummy : Pointer; Sender : pMenu; Item : Integer );
//обработка пунктов меню
begin
case Item of
1: begin {NEW}
REdit.Clear;
form.StatusText[0] := '';
end;
2: clikButOpenSave(nil, butOpen); {Open}
3: clikButOpenSave(nil, butSave); {Save As}
4: Applet.Close; {Exit}
end;{case}
end;
begin
form := NewForm( Applet, 'Редактор' );
panTools := NewPanel( Form, esRaised ).SetAlign( caTop );
panTools.Height := 35 ;
REdit := NewRichEdit( Form, [] ).SetAlign(caClient);
butOpen := NewButton( panTools, 'Open' ).SetSize(50, 25);
butSave := NewButton( panTools, 'Save as' ).SetSize(60, 25).PlaceRight;
Dialog := NewOpenSaveDialog( '', '', [] );
mainMenu := NewMenu(Form, 0,
[
'File',
'(',
'New',
'Open',
'Save As..',
'-',
'&Exit',
')'
],
TOnMenuItem( MakeMethod( nil, @ProcessingMenu ))
);
butOpen.OnClick := TOnEvent( MakeMethod( nil, @clikButOpenSave ));
butSave.OnClick := TOnEvent( MakeMethod( nil, @clikButOpenSave ));
Run( Form );
end.
Результат:
|