Delphi
Delphi

Delphi

Суббота, 28 Мая 2011 16:41

Создание калькулятора на языке Delphi

Автор

1 урок «Разработка интерфейса программы»

Эту статью я взял с сайта:Фестеваля педагогических идей".

Автор статьи: Панов Сергей Ивановичучитель физики и информатики.

Оглавлени:1урок<<Разработка интерфейса программы.>>

2урок<<Написание процедур выполнения арефметических действий.>>

3урок<<Написание процедур вычесления основных функций.>>

4-5уроки<<Написание процедур работы с меню.>>

Задание. Разработать интерфейс программы «Стандартный калькулятор»

Необходимые объекты:

MainMenu – создание меню программы
Label – надпись
Edit – поле для ввода и вывода
BitBtn – кнопка (настраивается цвет надписи на кнопке в отличие от Button)
Image – вставка изображения

Разработка интерфейса.

1. Создать форму.

Свойства формы.
Name:              kalkul 
Caption:           Калькулятор
Color:              цвет по желанию
BorderIcons:    biMaximize – False, остальное True.

2. Разместить на форме объект Edit.  Свойства:  Name : Edit1,   Text – пустая строка.

3. Разместить на форме соответствующее число кнопок.

– цифры от 0 до 9, 
– знаки арифметических операций,
– знак «=»
– знаки функций (корень, синус, косинус и т.д.)


Объект – кнопка BitBtn.

Свойства: 
Name – можно оставить по умолчанию
Caption – соответствующее выполняемой функции название
Font – шрифт и цвет шрифта по желанию

4. Поместить на форму изображение (если нужно), настроить цвет формы, шрифт, сделать соответствующие надписи на форме (если нужно).

Примерный вид интерфейса программы


2 урок «Написание процедур выполнения арифметических операций»

I. Написать процедуры ввода чисел. Для этого щелкнуть два раза по кнопке «1» (объект BitBtn1) и ввести следующий код:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
edit1.Text:=edit1.Text+'1'
end;

Аналогично написать процедуры ввода остальных цифр и символа «,»

II. Создать процедуру очистки поля Edit1, кнопка «С» (объект BitBtn22)

procedure TForm1.BitBtn22Click(Sender: TObject);
begin
edit1.Clear
end;

III. Создать процедуры обработки нажатий кнопок «+», «», «/», «*» и «=».  Для этого необходимо сначала разобрать с учащимися алгоритм работы с калькулятором:

  1. Ввести число в поле Edit1. При этом в поле Edit1 число будет представлено как текстовая строка.
  2. Нажать кнопку «+». В процедуре обработки этой кнопки необходимо выполнить следующие действия:
    • преобразовать эту строку в число с помощью функции StrToFloat;
    • сохранить это число в переменной X;
    • сохранить в переменной, например, kod код этой операции;
    • очистить поле Edit1.
  3. Ввести второе число в поле Edit1.
  4. Нажать кнопку «=».В процедуре обработки этой кнопки необходимо выполнить следующие действия:
    • преобразовать эту строку в число с помощью функции StrToFloat;
    • сохранить это число в переменной Y;
    • в зависимости от кода операции, сохраненной в переменной kod, выполнить арифметическую операцию, например, z:=x+y;
    • преобразовать число, находящееся в переменной Z, в текст с помощью функции  FloatToStr и вывести в поле Edit1.

IV. Что необходимо для реализации этого алгоритма?

1. Описать переменные X, Y, Z, kod. Описывать переменные будем в основной программе, модуле Unit, чтобы переменные могли действовать в любой процедуре (глобальные переменные).

var
Form1 : TForm1;
kod : char;
x, y, z : real;

2. Создать процедуры обработки нажатий кнопок «+», «», «/», «*»

Например,

procedure TForm1.BitBtn17Click(Sender: TObject);
begin
x:= strtofloat(edit1.text);
kod := ‘+’;
edit1.Clear;
end;

Но что будет, если мы в поле Edit1 ничего не введем и нажмем кнопку «+»? Возникнет ошибка и программа завершится. Чтобы избежать этого надо проверить имеется ли в поле Edit1символы? И в зависимости от этого условия продолжить выполнять процедуру или вернуться к вводу данных. Следовательно, мы должны использовать алгоритмическую структуру «Ветвление».

Изучить с учащимися правила записи ветвления на языке Delphi.

Изменненая процедура обработки нажатия кнопки «+»

procedureTForm1.BitBtn17Click(Sender: TObject);
begin
ifedit1.Text<>'' thenx:=strtofloat(edit1.text); 
kod := ‘+’;
edit1.Clear;
end;

Аналогично создатьпроцедуры обработки нажатий кнопок «», «/», «*»

3. Создать процедуру обработки нажатия кнопки «=». В этой процедуре необходимо в зависимости от значения переменной kod выполнять четыре разных операции. Такая структура называется «Множественное ветвление» или «Выбор».

Изучить с учащимися правила записи структуры «Выбор» на языке Delphi.

procedure TForm1.BitBtn19Click(Sender: TObject);                       кнопка «=»
begin
if edit1.Text<>'' then  y:=strtofloat(edit1.text);        впеременную y кладем edit1.text
case kod of
'+': z:=x+y;
'-': z:=x-y
'*': z:=x*y;
'/': z:=x/y
end ;
edit1.Text:=floattostr(z)          вывод в поле Edit1 значение переменной  z
end;

3 урок «Написание процедур вычисления основных функций»

I. Создать процедуры вычисления функции «X в степени Y». Для этого необходимо:

1. Изучить тему «Циклы на языке Delphi».

2. Создать процедуру обработки нажатия кнопки «X в степени Y».

procedure TForm1.BitBtn24Click(Sender: TObject);
begin
x:= strtofloat(edit1.text);
kod := ‘^’;
edit1.Clear;
end;

3. Добавить в процедуру нажатия кнопки «=» следующий код

vark, y1:integer; /y1 – степень в которую возводим число x/
…                            /k– счетчик цикла/
'^': begin
y1:=strtoint( edit1.Text); 
edit1.clear;

z :=1;
for k:=1 to y1 do
begin
z:=z*x
end
end

II. Создать процедуры вычисления остальных функций. При вычислении тригонометрических функций учесть, что компьютер работает с радианной мерой углов.
Например, процедура вычисления квадратного корня

procedure TForm1.BitBtn26Click(Sender: TObject);  кнопка «корень»
begin
x:=strtofloat( edit1.Text);
edit1.clear;
z:=sqrt(x);
edit1.Text:=floattostr(z)
end;

Процедура вычисления функции sin

procedure TForm1.BitBtn11Click(Sender: TObject);   кнопка «sin»
begin
x:=strtofloat(edit1.Text);
x:=(x*3.14)/180;
edit1.Clear;
z:=sin(x);
edit1.Text:=floattostr(z)
end;

4–5  урок. «Написание процедур работы с меню»

У любой программы имеется система меню, которая позволяет выполнять разные сервисные функции.  Создадим для нашего калькулятора меню, которое будет состоять, например, из следующий пунктов: «Файл», «Правка», «Справка». Для этого: поместить на форму объект MainMenu (в любое место формы, этот объект будет невидим при выполнении)

  • Два раза щелкнуть левой кнопкой мыши по этому объекту на форме.
  • Выделить в появившейся форме пунктирное поле и в инспекторе  объектов в свойство Caption ввести «Файл».
  • Аналогично создать пункты меню «Правка» и  «О программе».
  • В меню «Файл» создать пункт «Выход», а в «Правка» - пункты «Копировать» и «Вставить».
  • Закрыть форму создания меню.

procedure TForm1.N2Click(Sender: TObject);
begin
close
end;
procedure TForm1.N4Click(Sender: TObject);
begin
Edit1.CopyToClipboard;        / копироватьвбуферобмена/
end;

procedure TForm1.N5Click(Sender: TObject);
begin
Edit1.PasteFromClipboard;            /вставить из буфера обмена/
end;

Создание меню

Для создания справки создадим еще одну форму с именем Form2, на которой можно разместить справочные сведения и информацию об авторах программы. Для размещения текста можно воспользоваться объектом  Memo, который представляет из себя почти готовый текстовый редактор, и объектом Image для размещения графики и фотографий. Для открытия формы воспользуемся командой Form2.ShowModal.

Процедура открытия формы «Справка»

procedure TForm1.N8Click(Sender: TObject);
begin
Form2.ShowModal          Открытие формы «Справка»
end;


Скоро добавлю сюда ссылку на скачивание собственновво калькулятора.

Форум Последние темы форума

Нет сообщений для показа

Миничат помощь - на форуме!

Последнее сообщение: 8 часов, 17 минут назад
  • avatar
    Masamune : And yes - you're right about that girl.
  • avatar
    Masamune : *this
  • avatar
    Masamune : I was talking about thus: «link»
  • avatar
    breezae : Masamune-sama, what you mean? I said that it is horrible to meet that girl... so what are you talking about?
  • avatar
    breezae : хосспати... это ж надо, по собственному желанию в калеки записаться... куда катиться молодёж?
  • avatar
    Allerent : А я не купил вие чудо нету денег =( , и да Джеймс это жутко обидно. Вот я долбанную термодинамику здаю , а вот физры нет ибо есть знакомства у предков в МинЗдраве (Городском естественно)
  • avatar
    James : Полтора часа назад начался бета-тест The Secret World и у меня есть ключ. Но, увы, вместо того, чтобы посмотреть на эту игру, мне приходится учить материал к самому абсурдному явлению в школе - теоретическому зачёту по физкультуре. Обидно...
  • avatar
    AnnTenna : блиин ничего не понимаю(
  • avatar
    Masamune : «link»
  • avatar
    Agckuu_Coceg : Screw the rules, I have money.
  • avatar
    Masamune : You know the rules and so do I
  • avatar
    Masamune : We're no strangers to love
  • avatar
    breezae : God bless the one, who will meet this girl face-to-face on a dark small street...
  • avatar
    Masamune : Now THAT's what I call "tsundere": «link»
  • avatar
    sando : «link»
  • avatar
    Allerent : О боги хаоса , ещё одно недоразумение в смертном теле. Кряк скачать нет?
  • avatar
    MJuice : Скажите код активации RPG Maker VX!!!
  • avatar
    AnnTenna : после нескольких зависаний удалось все-таки запостить на главную
  • avatar
    AnnTenna : отбой, голосование закончилось))
  • avatar
    AnnTenna : Нароод, голосуйте, сегодня последний день! Ваш голос может стать решающим! «link»
  • avatar
    breezae : Boring, huh? It is always boring here...
  • avatar
    Masamune : О! Так сегодня, оказывается, "День Фрилансера"... Впервые слышу. Что ж... поздравляю что ли всех фрилансеров. Freelance FTW!
  • avatar
    Masamune : Gee... It sure is boooring around here...
  • avatar
    Allerent : О нихнал тогда оставлю как есть.
  • avatar
    Agckuu_Coceg : Особенно в играх.
  • avatar
    Agckuu_Coceg : Волна вампиромании прошла несколько лет назад, вместе с манией на зомби.
  • avatar
    Allerent : тавить? Сейчас же волна вампиромании , и боюсь меня могут не так понять , он же не вампир, а маг крови.
  • avatar
    Allerent : Блин только сейчас понял что по скиллам , внешнему виду и двум формам Алекс вампир а не асура .... Кровь пьёт , летучих мышей сумонит , имеет хуман и анхуман форму ,а по причине того что он задрот и девственница ещё и солнце не особо переносит. По вашему что то менять или так и ос
  • avatar
    Allerent : TilesetMaker такая удобная прога , а я даже и не знад о существовании оной.
  • avatar
    Allerent : Да ничего страшного , зато я в Питере кроме каналов ещё цирк и штук 7000 - 7500 клоунов увидел (прозел на семинар AmWey).
  • avatar
    AnnTenna : поздно ты, конкурс уже на стадию голосования перешел..
  • avatar
    marenight : С возвращением! И - с праздником!
  • avatar
    Allerent : Всех с прошедшим великим днём , моя вернулся.
  • avatar
    marenight : Сижу и думаю - делать демоверсию мне пока рано, но - нужно что бы кто-то оцекнил удаётся ли в достаточной мере выдерживать стиль текста...
  • avatar
    James : Если кто не заметил - у нас там голосование в конкурсе злодеев идёт. Настоятельно рекомендую ознакомиться и проголосовать, а то как-то совсем глухо...
  • avatar
    BERUDA : sando: большое спасибо за подсказку)
  • avatar
    misha : как я понял это счётчик коментариев которые ты оставляешь к картинекам в галерее файлам в архиве и коментарии к новостям с главной страници
  • avatar
    LarryCS : мм, а что это такое, справа Меню автора. И тама "У вас 2 опубликованных комментариев"?
  • avatar
    AnnTenna : УРААА!
  • avatar
    misha : ВСЕХ С 9 МАЯ
  • avatar
    sando : BERUDA, находим materialbase (верхняя панель, tools) жмем импорт (вставляем нужную графику, в вашем случае баттлер, четвертая строка сверху), закрываем, заходим в database, enemies и меняем у нужного монстра графику (либо change maximum и добавить монстра к уже существующим).
  • avatar
    BERUDA : Очень прошу!Т_Т Подскажите, как поставить импортированных мною врагов в битву((? Ибо ставятся только стандартные((( Maker XP v.1.04
  • avatar
    ryoyuyalex : Выложил кавер на КапКома! Зацените плиз, нароооод! =)
  • avatar
    Agckuu_Coceg : ...си будут применять новый эффект.
  • avatar
    Agckuu_Coceg : Хотя, теоретически можно даже обходиться одним айтемом и коммон ивентом, который при использовании применяет созданный эффект на пользователе, но в этом случае необходимо ограничить ношение созданного айтема до одного - потому что иначе все созданные айтемы при перезапи
  • avatar
    Agckuu_Coceg : Nope. Я эти эффекты использую как что-то вроде зелий, только их нельзя носить и выпивать по дороге - они активируются сразу при создании. Иначе бы мне пришлось создавать несколько тысяч айтемов, а кому это надо...
  • avatar
    Allerent : Agckuu_Coceg зачем тебе столько эффектов? Для брони и оружия что ли?
  • avatar
    Agckuu_Coceg : Про блокираторы и визуальное оформление я молчу ввиду того, что это делается по дефолту.
  • avatar
    Agckuu_Coceg : Общее влияние трёх копмонентов на одну из шести статистических переменных колеблется от +100 до -50, в зависимости от выбранного набора. Каждый из наборов влияет на три-четыре из этих переменных, на каждую своим образом.
  • avatar
    Agckuu_Coceg : Учитывая тот факт, что второй ряд идентичен первому, у меня получается (24*12*2)-1 различных эффектов из (24*12^2)-1 различных наборов чисел.

Только зарегистрированные пользователи могут отправлять сообщения.