Калькулятор

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

senator
Сообщения: 23
Зарегистрирован: 08 ноя 2004, 19:35
Откуда: Almaty
Контактная информация:

Здравсвтуйте! Начал писать свой калькулятор и столкнулся с такой проблемой:

Код: Выделить всё

var
  Form1: TForm1;
  input_1: string; // первое значение edMain
  input_2: string; // второе значение edMain
  temp_1: real; // сюда записываем input_1
  temp_2: real; // сюда записываем input_2
  result: real; // итоговый результат

...

// Функция очищения  edMain после нажатия кнопоко '+', '-', '*' или '/'
procedure TForm1.btPlusClick(Sender: TObject);
begin
  input_1 := edMain.Text;  // Присваиваем переменной input_one значение edMain
  temp_1 := StrToFloat(input_1); // переделываем в Float
  edMain.Text := '';  // И очищаем поле

...


procedure TForm1.btEqualsClick(Sender: TObject);
begin
  if ( btPlus.??????)
end;
Какое буленовское свойство можно использовать для проверки, нажата ли кнопка BtPlus? Или, можно в процедуре TForm1.btPlusClick прописать все дейсвтия и потом просто по нажатии кнопки = (BtEquals) вызвать эту процедуру? И если можно, то как выглядит вызов процедуры? Заранее спасибо.
Я знаю, что ничего не знаю. Но остальные не знают даже этого
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Cкажи лучше какие компоненты используешь на форме :) а мы попробуем тебе предложить варианты решения твоей проги
senator
Сообщения: 23
Зарегистрирован: 08 ноя 2004, 19:35
Откуда: Almaty
Контактная информация:

Код: Выделить всё


type
   TForm1 = class(TForm)
   edMain: TEdit;
   btNule: TButton;
   btOne: TButton;
   btTwo: TButton;
   btThree: TButton;
   btFour: TButton;
   btFive: TButton;
   btSix: TButton;
   btSeven: TButton;
   btEight: TButton;
   btNine: TButton;
   btPlus: TButton;
   btMinus: TButton;
   btMultiplie: TButton; // кнопка умножения
   btDivide: TButton;
   btReset: TButton; // кнопка сброса
Все переменные я указал ранее. Заранее спасибо
Я знаю, что ничего не знаю. Но остальные не знают даже этого
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Тогда я не совсем пойму с чем ты делаешь эти дествия? Нужно как минимум два числа, где они у тебя храняться? в одном edMain: TEdit? Тогда ты их должен выделить из компонента и присвоить двум переменным с которыми будешь делать действия
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Все, я врубился что у тебя :) Значит я тебе сюда предложу мой способ решения, нам понадобиться еще одна кнопка '=' btResult:
На кнопки 0,1,2...,9 делаем на OnClick в свойствах следующий обработчик

Код: Выделить всё

 edMain.text:=edMain.text+'1'
'2','3'...'9' соответственно на каждую кнопку 2,3...9. Далее, добавим три глобальных переменных в программе, sum,sum2,myflag. На кнопку btMultiplie делаем на событие OnClick следующее:

Код: Выделить всё

if edmain.text<>'' then
sum:=StrToInt(edmain.Text);
edmain.Text:='';
myflag:=1;
Потом у самого edmain на собитии OnChange делаем следующее:

Код: Выделить всё

if edmain.text<>'' then
sum2:=strtoint(edmain.text);
Ну и на кнопку btResult на событие onclick следующее:

Код: Выделить всё

case myflag of
1: edmain.Text:=IntToStr(sum+sum2);
2: edmain.Text:=IntToStr(sum-sum2);
end;
вот, на кнопку '-' присваиваешь переменной myflag:=2;
и т.д. Все елементарно
senator
Сообщения: 23
Зарегистрирован: 08 ноя 2004, 19:35
Откуда: Almaty
Контактная информация:

Dr.Grizzly писал(а):Тогда я не совсем пойму с чем ты делаешь эти дествия? Нужно как минимум два числа, где они у тебя храняться? в одном edMain: TEdit? Тогда ты их должен выделить из компонента и присвоить двум переменным с которыми будешь делать действия
Я извеняюсь, конечно, но в первом сообщения я описал все. Из поля edMain сначала записывается в input_1, а потом input_2. Потом эти стринговые переменные переделываются в Float и записываются в temp_1 и temp_2. И, наконец, в переменную result: real; записываются результаты вычеслении. Но я не знаю как проверить, была ли нажата кнопка btPlus
Я знаю, что ничего не знаю. Но остальные не знают даже этого
senator
Сообщения: 23
Зарегистрирован: 08 ноя 2004, 19:35
Откуда: Almaty
Контактная информация:

Dr.Grizzly, спасибо большое. Работает. Я еще подумаю как сделать точку, а если не получится, то свяжусь с Вами, ок???
Я знаю, что ничего не знаю. Но остальные не знают даже этого
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Коллеги! Это изврат - делать эмулятор калькулятора с кнопками... на компе! :)

Надо делать формульные калькуляторы. Уверяю Вас, это гораздо интереснее. Для синтаксического разбора можно применять деревья, конечные автоматы и множество других алгоритмических решений!

Я, например, сделал себе калькулятор, который прямо в процессе ввода интерпретирует список выражений, разделенных ";".

В выражениях поддерживаются функции, переменные, операнды в разных системах счисления и т.п.

Если интересно, могу закинуть исходник класса, который все это делает.
senator
Сообщения: 23
Зарегистрирован: 08 ноя 2004, 19:35
Откуда: Almaty
Контактная информация:

Я конечно понимаю, что формальные калькуляторы - это очень даже хорошо, куча алгоритмов, но для человека, который практически только начал учить Дельфи и обычный нужно поделать. Тем более, что в процессе создания обычного калькулятора я усвоил для себя несколько важных понятии
Я знаю, что ничего не знаю. Но остальные не знают даже этого
OTELLO
Сообщения: 59
Зарегистрирован: 11 дек 2004, 11:52
Откуда: Питеррр
Контактная информация:

Naeel Maqsudov мне как раз интересно, я сейчас подобным занимаюсь, я бы не отказался посмотреть, если есть возможность кинь плз на otello_mail@mail.ru

Заранее спасибки =)[/url]
Ответить