Меню. Как много в этом слове...

Меню. Как много в этом слове...

Почти в любой программе есть меню. И у нас оно тоже будет.
Меню создается на объектах типа 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.


Опубликовал admin
5 Май, Понедельник 2003г.



Программирование для чайников.