Урок 11 - Знакомство с компонентами (часть 2/12)

   Продолжаем знакомство с компонентами. Открываем наш предыдущий проект и начинаем модернизировать калькулятор, как я и обещал.

Кидаем на форму компонент ListBox. Он находится на вкладке Standard правее компонента RadioButton. У компонента ListBox есть свойство Items, если его открыть, то появляется окошко для редактирования строк. Например если написать 1 в первой строке и 2 во второй, то в ListBox сразу появятся эти строки.

Items


Редактор


ListBox


Теперь откройте свойство Items еще раз и сотрите всё, что написали в окошке редактирования строк.

После краткого знакомства с компонентом ListBox, нужно его задействовать в нашем калькуляторе. ListBox будет выполнять функцию лога (журнала), он будет записывать результат в новую строку каждый раз, когда будет нажата кнопка "Посчитать".

Чтобы это осуществить, переходим в процедуру Button1Click и пишем код в самом конце:
ListBox1.Items.Add(Label1.Caption);
То есть, когда пользователь нажмет на кнопку, после всех вычеслений добавляется новая строка с содержимым лейбла в самый конец компонента ListBox.

Теперь добавим возможность пользователю отключить ведение лога. Для этого добавьте на форму компонент CheckBox. Он находится на вкладке Standard левее компонента RadioButton. CheckBox схож с компонентом RadioButton, только при выделении ставится галочка, а не кружок. Если мы поместим на форме четыре компонента CheckBox, то поставить галочку можно на всех, что нельзя сделать с RadioButton. В этом и есть вся разница этих компонентов.

Изменим свойство Caption у CheckBox на Вести лог и теперь научим его управлять логом. Для этого нужно написать условие: если галочка стоит, то записывать результат в лог, если галочка не стоит, то соответственно не записывать.
if (CheckBox1.Checked = True) Then
ListBox1.Items.Add(Label1.Caption);
Вот и готово, скомпилируйте и проверьте!

Нашей программе еще не хватает главного меню, которое вы можете наблюдать во многих программах и даже в самом Delphi.

Кидаем на форму компонент MainMenu (он находится на вкладке Standard) и кликаем по нему 2 раза. Должно появится окошко редактирования меню.

Редактор меню


Теперь переходим в Object Inspector, меняем свойство Caption на Файл и нажимаем клавишу Enter. Мы сразу можем видеть, как появилось меню в нашей программе.

Меню


Теперь нажимаем на Файл в редакторе меню и выделяем прямоугольник ниже.

Меню


Сейчас опять переходим в свойство Caption, изменяем его на Посчитать и кликаем Enter. Снова кликаем на прямоугольник ниже и переименовываем его на Выход. Далее кликаем на прямоугольник правее от Файл и изменяем у него Caption на Помощь. Теперь нажимаем на Помощь в редакторе меню, выделяем прямоугольник ниже и меняем свойство Caption на О программе.
Таким образом, мы создали простейшее меню, но оно пока не работает.

В редакторе кода выделяем кнопку (тот же прямоугольник) Посчитать и переходим в Object Inspector на вкладку Events. Выделяем событие OnClick и теперь у нас есть 2 пути:
  • Создать процедуру N2Click (N2 - это имя кнопки в меню) и скопировать в нее весь код, который мы написали в процедуре Button1Click

  • Поступить по умному и ничего не копировать, а просто указать Delphi, что нужно выполнить процедуру Button1Click по клику на кнопке в меню N2
Я выбираю второй вариант, думаю вы тоже. Нажимаем на стрелочку и выбираем из выпадающего списка процедуру Button1Click.

Выпадающий список


Компилируем и проверяем работу меню. У меня всё отлично, все работает и компилируется без ошибок.

Кнопку Выход (в меню) я думаю вы "оживите" сами. По этому сразу переходим к кнопке О программе. Когда мы нажмем на эту кнопку, у нас вылезет окошко с информацией о программе и его авторе. Для этого создадим вторую форму. Создается она очень легко, нажатием на кнопку New Form в главном окне Delphi.

New Form


Далее кидаем на вторую форму компонент Label и пишем в него информацию о программе. Кстати, у лейбла есть очень хорошее свойство WordWrap, которое позволяет переносить слова на новую строку, если они не влезают в ширину.

Form2


После того, как мы оформили вторую форму, ее надо показать пользователю, когда он нажмет на кнопку О программе в главном меню.
Переходим к первой форме, нажатием на закладку соответствующего юнита в окне редактора кода (Unit1 - первая форма, Unit2 - вторая форма).

Закладки


Открыть вторую форму можно двумя способами:
  • Первый способ - это когда можно спокойно перемещаться между формами, то есть, если мы открыли вторую форму, то мы можем переключится на первую и поработать в ней.
    Form2.Show;
    
  • Второй способ - это когда мы не можем переключится на первую форму, если открыта вторая.
    Form2.ShowModal;
    
Создаем у кнопки О программе событие OnClick и пишем туда код, в зависимости от того, что вы выбрали. Если вы сейчас скомпилируете программу, то при компиляции откроется окно:

Окошко


Это окно предлагает добавить вторую форму в юнит первой. Нажмите кнопку "Yes". Добавить можно было вручную, дописав в Uses слово Unit2, но зачем, если delphi это может сделать за нас? :)

Идем далее и теперь мы сделаем контекстное меню, оно будет появляться, когда мы нажмем на форму правой кнопкой мыши. Кидаем на форму компонент PopupMenu (он находится на вкладке Standard), кликаем по нему 2 раза и настраиваем его вот так:

PopupMenu


Теперь выделяем первую форму и в свойстве PopupMenu выбираем наш компонент PopupMenu1. Сейчас осталось "оживить" кнопки в контекстном меню. Я надеюсь, что вы с этим справитесь сами. На этом я завершаю этот урок и прошу вас сохранить проект. Если что-то не понятно, пишите в комментарии, обязательно постараюсь помочь!

Ну вот и всё! Удачи!
Встретимся в следующем уроке!




Добавил(а): Programer Дата: 2012-08-31
А когда выйдет урок №12?



Добавил(а): Admin Дата: 2012-09-09
Скоро.



Добавил(а): Pirogkov007 Дата: 2013-05-20
Не получается "оживить" контекстное меню. На его пункты я события назначил, но меню не работает(вообще не открывается).



Добавил(а): delfiSkin Дата: 2013-05-20
меня кнопки посчитать вообще открывать не надо,только сделать так,как там написано,а что бы оживить *выход* надо два раза нажать на него и в появившемся окошке между бегин и энд вписать halt;



Добавил(а): delfiSkin Дата: 2013-05-20
меню* кнопки



Добавил(а): delfiSkin Дата: 2013-05-20
добавил PopupMenu но при нажатии правой кнопки по форме ничего не происходит



Добавил(а): delfiSkin Дата: 2013-05-20
пирожков,я думал ты спрашиваешь про другое меню,обознался.



Добавил(а): delfiSkin Дата: 2013-05-20
на 13 уроке случайно при нажатие на форму нашел свойство Popupmenu ,изменил,теперь все работает так же было написано и здесь *Теперь выделяем первую форму и в свойстве PopupMenu выбираем наш компонент PopupMenu1* но я тогда подумал это надо искать в свойствах popupmenu..



Добавил(а): CrossF1re5 Дата: 2013-09-05
у меня не получается оживить кнопку N2!Делал все как сказано,но всё равно не компилируется...



Добавил(а): Denismen Дата: 2013-09-27
Хороший урок для начинающих.



Добавил(а): belogod Дата: 2014-07-21
Спасибо большое. Благодаря коментам, понял как довести до ума кнопку - Выход(спасибо - delfiSkin).



Добавил(а): ortmaer Дата: 2016-08-05
У меня не работает возможность отключения лога. Я код: if (CheckBox1.Checked = True) Then ListBox1.Items.Add(Label1.Caption); Вставил в CheckBox1 через caption. Галочку что ставь, что не ставь - лог все равно идет. А если код вставить в кнопку как обычно, то там вообще двойной лог при каждом действии происходит. Вопрос: куда вставлять код то надо?



Добавил(а): ortmaer Дата: 2016-08-05
И зачем мы добавили это поперменюя? У нас же есть одно меню. На фига два то?



Добавил(а): MrFox Дата: 2017-01-15
Чтоб научиться создавать разные меню!


  1. Danil
    Danil 2 years ago
    Вообще не понял, как «оживить» кнопку «О программе»
Отменить.