Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.doc
Скачиваний:
17
Добавлен:
14.02.2015
Размер:
641.54 Кб
Скачать

Урок 5. Работа с кнопками

Кнопка, наверное, является самым распространенным элементом пользовательского интерфейса. В C++Builder'е существует несколько видов кнопок, которые мы сейчас и рассмотрим.

Самая простая кнопка - это, естественно, компонент Button:

С ней, вобщем-то, ничего интересного нет. Кнопка как кнопка, и мы, скорей всего, рассматриваем ее здесь для полноты. Как добавлять обработчик для щелчка на ней, мы рассмотрели на уроке 1. На этом уроке давайте посмотрим, как сделать, чтобы кнопка оставалась всегда с правого края формы при изменении расмеров последней. Для этого нам надо у свойства Anchorsпоменять два подсвойства - подсвойствоakLeftустановить вfalse, аakRight- вtrue:

Все, теперь при изменении размеров формы кнопка останется прилепленной у правого края.

Следующий вид кнопки - это BitBtn. Этот компонент расположен на вкладкеAdditionalПалитры компонентов:

Эта кпопка представляет из себя кнопку с картинками, причем картинку вы можете использовать как свою, так и предопределенную (для значений OK,Cancel,Noи других).

Для использования одной из стандартных картикок вы должны задать свойство Kind. Примеры возможных значений для этого свойства -bkCancel,bkNo,bkAbort. Вот так, например, будет выглядеть наша кнопка со свойствомKindравнымbkAbort:

Обратите внимание, что надпись на кнопке (свойство Caption) при этом автоматически установилось вAbort(но его, разумеется, можно поменять).

Если же мы хотим задать нашу картинку для кнопки, то свойство Kindмы устанавливаем вbkCustom(значение по умолчанию), а нуждую картинку загружаем в свойствеGlyph.После этого наша кнопка может выглядеть так:

За то, как наша картинка расположена относительно надписи на кнопке, отвечает свойсто Layout. Возможные значения для него -blGlyphLeft(по умолчанию),blGlyphRight,blGlyphBottomиblGlyphTop.

Урок 6. Компонент ActionList

Компонент ActionListрасположен на вкладкеStandardПалитры компонентов:

Основное его предназначение - это хранение в одном месте некоторых действий, которые должны выполняться тем или иным способом. Как правило, одно и тоже вы можете сделать разными способами - через пункт меню, нажатием на кнопку и тому подобное. При этом ваше действие может быть, скажем, временно недоступно - и в этом случае вы хотите, чтобы соответствующий пункт меню и соответствующая кнопка были недоступны. Так вот, если действие одно, а способов его выполнения много, то и надо использовать компонент ActionList. В этом случае обработчик пишется только в одном месте, и если вам, скажем, надо отключить возможность выполнения этого действия во всех местах или во всех местах изменить его название (например, соStartнаStop), то вам не придется изменять много мест в вашем коде - достаточно только внести изменения в соответствующее действие дляActionList'а.

Посмотрим на примере, как это делается. Разместите на форме компонент MainMenu, обычную кнопку и компонетActionList. Свойствоnameоставьте для всех компонентов без изменений. Для меню создайте одно меню верхнего уровня с заголовкомActionsи в нем одно подменю (для этого просто щелкните на компонентеMainMenu1 на нашей форме).

Теперь добавим для компонента ActionList1 действие. Для этого сделайте на нем двойной щелчок. Появится окноEditingForm1->ActionList1 специального редактора. Нажмите в нем на кнопкуNewAction. В правой части появится новое действиеAction1:

Сделайте двойной щелчок на Action1 для перехлда в окно кода. В полученной заготовке добавьте следующую строку:

void __fastcall TForm1::Action1Execute(TObject *Sender)

{

ShowMessage("Некоторое действие");

}

Таким образом нашим действием просто будет появление MessageBox'а.

Теперь припишем наше действие к подпункту меню и кнопке. Для этого надо просто задать для них свойство Action(т. е. выбрать из ниспадающего спискаAction1 - оно там будет одно):

Это надо сделать как для кнопки, так и для пункта меню.

Можно запустить программу и проверить - при выборе нашего пункта меню и нажатии на кнопке должен появиться MessageBoxс надписью "Некоторое действие".

Теперь посмотрим, как мы можем вносить одновременные изменения во все компоненты, связанные с нашим действием Action1. Для этого снова переходим в редактор дляActionList1 (для чего сделайте на расположенном на форме компонетеActionList1 двойной щелчок), выделяем наше действиеAction1 и в Инспекторе объектов на вкладкеEventsделаем двойной щелчок наOnUpdate:

В появившуюся заготовку для кода внесите следующие строки:

void __fastcall TForm1::Action1Update(TObject *Sender)

{

if(b){

((TAction *)Sender)->Caption = "New caption";

((TAction *)Sender)->Enabled=false;

}

}

Что мы тут делаем? В зависимости от значения некоторой переменнойb(которую мы еще добавим) мы меняем у нашего действия заголовок на "Newcaption" и делаем его отключенным.

Объявление переменной bдобавьте в заголовочный файл нашей формы:

class TForm1 : public TForm

{

...

public:

boolb; //Userdeclarations

...

Осталось еще где-то вызывать обновление нашего Action1. Например, это можно сделать при нажатии на вторую кнопку. Добавьте на форму вторую кнопку и в ее обработчик внесите следующий код:

void __fastcall TForm1::Button2Click(TObject *Sender)

{

b=true;

//Обновляем Action1

ActionList1->Actions[0]->Update();

}

После запуска программы и нажатии на вторую кнопку и у пункта меню, и у первой кнопки одновременно поменяется заголовок и они станут недоступны:

С этим уроком все!