Урок 11 - Знакомство с компонентами (часть 2/12)
Продолжаем знакомство с компонентами. Открываем наш предыдущий проект и начинаем модернизировать калькулятор, как я и обещал.
Кидаем на форму компонент ListBox. Он находится на вкладке Standard правее компонента RadioButton.
У компонента ListBox есть свойство Items, если его открыть, то появляется окошко для редактирования строк.
Например если написать 1 в первой строке и 2 во второй, то в 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
Компилируем и проверяем работу меню. У меня всё отлично, все работает и компилируется без ошибок.
Кнопку Выход (в меню) я думаю вы "оживите" сами. По этому сразу переходим к кнопке О программе. Когда мы нажмем на эту кнопку, у нас вылезет окошко с информацией о программе и его авторе. Для этого создадим вторую форму. Создается она очень легко, нажатием на кнопку New Form в главном окне Delphi.
Далее кидаем на вторую форму компонент Label и пишем в него информацию о программе. Кстати, у лейбла есть очень хорошее свойство WordWrap, которое позволяет переносить слова на новую строку, если они не влезают в ширину.
После того, как мы оформили вторую форму, ее надо показать пользователю, когда он нажмет на кнопку О программе в главном меню.
Переходим к первой форме, нажатием на закладку соответствующего юнита в окне редактора кода (Unit1 - первая форма, Unit2 - вторая форма).
Открыть вторую форму можно двумя способами:
- Первый способ - это когда можно спокойно перемещаться между формами, то есть, если мы открыли вторую форму, то мы можем переключится на первую и поработать в ней.
Form2.Show;
- Второй способ - это когда мы не можем переключится на первую форму, если открыта вторая.
Form2.ShowModal;
Это окно предлагает добавить вторую форму в юнит первой. Нажмите кнопку "Yes". Добавить можно было вручную, дописав в Uses слово Unit2, но зачем, если delphi это может сделать за нас? :)
Идем далее и теперь мы сделаем контекстное меню, оно будет появляться, когда мы нажмем на форму правой кнопкой мыши. Кидаем на форму компонент PopupMenu (он находится на вкладке Standard), кликаем по нему 2 раза и настраиваем его вот так:
Теперь выделяем первую форму и в свойстве 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 | |
Чтоб научиться создавать разные меню!
|
-
Вообще не понял, как «оживить» кнопку «О программе»