Давайте сделаем для начала простейший калькулятор. Создадим два эдитбокса, тип переменной выберем "Плавающее" - это числовая переменная с возможностью ввода чисел с запятой (не забывайте, что в Америке и западных странах вместо запятой используется точка!). В поле "К переменной" нужно указать имя получаемой из эдитбокса переменной. В верхнем окне указывается имя строковой переменной, а в нижнем - числовой. Нас интересует нижнее поле, где мы введем имя x1. Во втором эдитбоксе укажем имя x2. Это будут два числа, которые нужно будет складывать, вычитать и т.д.
Ещё создадим простой текстовый объект и дадим ему имя "Результат". В этот текстовый объект будем выводить результаты вычислений. Под все три созданных текстовых объекта подложим прямоугольники с утопленной границей.
Теперь сделаем четыре длинные кнопки с названиями "Сложить", "Вычесть", "Умножить" и "Разделить". Начнем с кнопки "Сложить". Первое, что мы должны сделать - сложить x1 и x2 и записать это в переменную, например, y. То есть просто написать строку:
Теперь нужно вывести полученное значение в текстовый объект "Результат" с помощью команды LoadText(). Однако эта команда "понимает" только строковые переменные, а у нас имеется числовая. Для перевода числовой переменной в строковую в программе есть функция CHAR(). А для обратного преобразования - функция VAL().
В итоге скрипт для кнопки "Сложить" получится таким:
Для остальных трех кнопок скрипты будут отличаться только знаком математического действия в первой строке скрипта. Так что можно его скопировать и вставить, с небольшим исправлением, в другие кнопки.
Осталось сделать только кнопку "Сброс". В её скрипте нужно создать пустую строковую переменную и командой LoadText() загрузить её во все три текстовых объекта. Сделайте это сами.
Теперь насладитесь работой калькулятора! Запустите и проверьте его работу (для тех, кто ничего не понял :-( - есть возможность взять готовый проект).
Владимир Степанов из Красноярска спрашивал, как сделать, чтобы запущенный проект работал определенное время, например 5 минут, а потом закрывался.
Средствами ММВ сделать это очень даже просто. Причем есть по крайней мере два пути: первый - использовать системное время компьютера, и второй - создать собственный счетчик в программе.
Второй путь гораздо проще. 5 минут - это 300 секунд. Значит, нам нужно создать счетчик, задав его начальное значение, равное 300, и каждую секунду уменьшать это значение на единицу. И всё время сравнивать его значение с нулем. Когда оно станет равно нулю, дать команду Exit().
Создаем строковую переменную i и задаем её значение в старте первой страницы проекта:
Там же, в скрипте первой страницы, нужно сразу запустить скрипт, который будет отсчитывать и контролировать время:
А вот и сам этот скрипт:
Поскольку значение ScriptTimer выбрано равным 1000, то значение i будет уменьшаться на единицу один раз в секунду.
Это уже будет работать. Но давайте представим, что мы хотим уведомлять пользователя, сколько времени осталось до конца работы программы. И выводить ему это время в минутах и секундах. Значит, нам придется преобразовать общее время, заданное в секундах, в минуты и секунды.
Для этого введем две числовых переменных - min и sec. Число минут можно узнать, если общее число секунд разделить на 60:
Однако это число будет содержать целую и дробную части. Нас же интересует только целое число минут. И в ММВ есть такая функция, позволяющая выделить из числа только целую часть. Это функция INT(). Поэтому далее пишем:
А теперь можно рассчитать и секунды. Для этого из общего количества секунд надо вычесть число минут, умноженное на 60:
Теперь надо получить две строковые переменные, которые можно будет выводить для отображения в программе:
Впоследствие вы заметите, что когда число секунд станет меньше 10, оно будет выводиться как 9, 8, 7 и т.д. А хотелось бы, чтобы это значение выводилось как 09, 08, 07 и т.д. Это нетрудно сделать. Введем в скрипт следующее условие:
И точно такие же для всех однозначных чисел. Теперь осталось только вывести переменные min$ и sec$ в какой-нибудь текстовый объект. Можно сделать для этих значений пару окошек в программе, а можно и просто вывести на экран всю информацию одной строкой. Так и поступим. Создадим переменную text$ и запишем ее значение:
И дадим команду вывода ее куда-нибудь на окно приложения (в текстовый объект Text):
Поскольку в конце скрипта у нас имеется запись ScriptTimer("Script","1000"), содержание текстового объекта Text будет обновляться каждую секунду. Что нам и требуется.
Ну и в конце скрипта ставим условие, что если i=0, то программа завершает работу. Можно еще вывести сообщение об этом. А целиком скрипт Timer будет выглядеть так:
Проект с этим примером можно взять в готовом виде отсюда.
Например, вы делаете прайс-лист для вашей фирмы (эко на что замахнулся! взял бы Excel, что ли... А то на ММВ). С картинками, ценами, может быть даже с поиском, всё так красиво. И хотите сделать страничку "Расчет цены", где учитывались бы скидки, рассчитывался бы процент по кредиту, первоначальный взнос, ежемесячные выплаты. И всё автоматически. Удобно? Бесспорно. Трудно? Вряд ли. Давайте попробуем.
Очевидно, что мы должны создать пять объектов вводимого текста. В первый пользователь будет вводить цену, во второй - скидку, в третий - кредитную ставку, в четвертый - количество месяцев кредита, и в пятый - первоначальный взнос (это разумно, ведь покупатель может заплатить сразу и 10 процентов стоимости, и 50). Создадим четыре эдитбокса, а получаемые из них числовые переменные назовём соответственно "цена", "скидка", "ставка", "месяцы" и "аванс". Да, да, вот так прямо по-русски, чтобы нам не запутаться и чтобы понятнее было. Всё будет работать, но в своих проектах старайтесь все-таки давать все имена по-английски. Кстати, там же задайте и имена строковых переменных, получаемых из этих эдитбоксов - такие же, только со знаком $ в конце. Они нам потом пригодятся.
Не забудьте подложить под эдитбоксы утопленные прямоугольники, для красоты.
Ниже давайте нарисуем еще пять утопленных прямоугольников - это будут окошки для вывода рассчитанной информации. Почему пять, ведь достаточно только знать сумму ежемесячного платежа? Нет, клиенту любопытно знать всё - и какая цена будет со скидкой, и процент, который ему придется выплатить по кредиту, и итоговую цену. Так что не будем лишать клиента этого удовольствия, тем более что все эти результаты нам все равно придется вычислять.
Итак, глаза боятся - руки делают. Для вывода результатов нам эдитбоксы не нужны - достаточно простых текстовых объектов. Сделаем их в каждом окне, всего пять штук. Я назвал эти объекты так: "цена2" - для вывода цены с учетом скидки, "накрутка" - процент по кредиту в рублях, "итого" - общая цена с учетом кредитной накрутки, "осталось" - сумма, которую клиенту осталось выплатить после внесения первоначального взноса, и "платеж" - размер ежемесячных выплат.
Уф-ф... Еще две кнопки нужны. Внизу. Одна - "Вычислить", и вторая "Сброс". Давайте создадим две простые кнопки и сразу нарисуем в проекте два скрипта (пока пустых) с названиями Calculate и Reset. А кнопкам назначим выполнение этих скриптов. Которой какой скрипт, и так ясно.
Вот, всё готово для работы :))) Теперь начинаем написание скрипта Calculate. Рассчитываем величины, которые будут выводиться в нижние пять окон:
Эта часть скрипта пояснения не требует. Далее из числовых переменных создаем строковые (выводить ведь можно только их):
И выводим эти значения:
В принципе это всё. Уже можно считать. Но желательно предусмотреть еще некоторые мелочи. Например, если скидки на товар нет, то в это окно могут не ввести значение. Поэтому в начале скрипта лучше добавить вот что:
И тогда в этом случае в поле будет автоматически подставляться ноль, он же будет учитываться и в расчетах. То же самое можно сделать и для поля кредитной ставки (если будет беспроцентный кредит и цифру в поле не введут):
Если пользователь, специально или случайно, введет в какое-нибудь поле отрицательное число, расчеты естественно будут неверными. Значит, надо запретить ему вводить отрицательные числа. Давайте сделаем так. В свойствах всех пяти эдитбоксов в поле "При замене текста выполнять следующий скрипт" напишем имя скрипта - "Нельзя". А теперь сделаем это скрипт "Нельзя". Вот условие для переменной цена$ (ведь при вводе в это окно мы получаем сразу две переменных - числовую "цена" и строковую "цена$"):
То есть если будет введен минус, сразу выскочит сообщение "Нельзя!", и окно эдитбокса очистится. Точно так же напишите еще четыре условия для остальных четырех переменных. Строго говоря, пользователь сможет сначала вписать число, а затем приписать ему минус в начале, и наш скрипт не сможет ему это запретить. Но и это можно обойти, если немного подумать (предоставляю сделать это вам самим).
Вы можете предусмотреть еще кучу маленьких, но приятных мелочей - например, при вводе суммы первого взноса, превышающей итоговую цену товара, выводить сообщение "Вы что, собираетесь заплатить чаевые?" И даже указать эту сумму. А что, неплохая идея! Я так увлекся, что решил помочь вам написать такой сценарий. Его надо поместить в скрипт Calculate перед последними пятью строками вывода текстовых объектов. Вот этот сценарий:
Словом, простор для творчества! Больше идей и подсказок давать не буду. Осталось лишь написать сценарий для кнопки "Сброс". Он очень простой и никаких пояснений не требует:
Готовый, так сказать, к употреблению файл проекта можно, в принципе, и скачать. Берите люди, пользуйтесь, но учитесь всё делать сами. Для этого мы здесь и стараемся.