Показать сообщение отдельно
  #9  
Старый 14.03.2013, 04:34
Аватар для BBBCat
BBBCat BBBCat вне форума
Новичок
 
Регистрация: 10.03.2013
Сообщения: 73
Репутация: 10
По умолчанию

Вот как и обещал:
Кнопка '=':
Код:
procedure TForm1.BitBtn18Click(Sender: TObject);
begin
if edit1.Text<>'' then b:=strtofloat (edit1.Text);
case c of
 '+':edit1.Text:=floattostr(a+b);
 '-':edit1.Text:=floattostr(a-b);
 '*':edit1.Text:=floattostr(a*b);
 '/':begin
 if b<>0 then
 edit1.Text:=floattostr(a/b) else
 form3.Show;
    end;
 '^': edit1.Text:=floattostr(Power(a,b)); // это я добавил
 end;
end;
Кнопка '%':
Код:
procedure TForm1.BitBtn34Click(Sender: TObject);
begin
if edit1.Text<>'' then b:=strtofloat (edit1.Text);
case c of
 '+':edit1.Text:=floattostr(a*(1+b/100));
 '-':edit1.Text:=floattostr(a*(1-b/100));
 '*':edit1.Text:=floattostr(a*b/100);
 end; // case c of
end; // procedure TForm1.BitBtn34Click(Sender: TObject)
Кнопка 'x^y':
Код:
procedure TForm1.BitBtn35Click(Sender: TObject);
begin
if edit1.Text<>'' then a:=strtofloat(edit1.Text);
c:='^';
edit1.Clear;
end; // procedure TForm1.BitBtn35Click(Sender: TObject)
Кнопка '%' работает как ты и написал, т.е. через '+', '-', '*'. Кнопка 'x^y' - набираешь число x, потом '^', потом число y, потом '='. Метод для кнопки '=' лучше не копировать, а добавить из него только одну строчку, которую я обозначил. Для работы функции 'Power(a,b)' в секцию 'uses' допиши 'Math'. Сами кнопки на форму уж прикрутишь как-нибудь И неплохо бы сделать в программе проверку на Overflow/Underflow. Больше ни в чём не разбирался, так что если тебе никто тут не указал на ошибки, это ещё не значит, что их нет. Кстати загляни в модуль 'Math', там много полезного для калькулятора.

И ещё: для чего в функции 'BitBtn**MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer)' такая конструкция 'if bitbtn20.Font.Color<>$004080FF then bitbtn**.Font.Color:=$004080FF' если ты уж по-любому решил присвоить цвету значение '$004080FF'? Лишний 'if' - дополнительные ресурсы, в данном случае неоправданные. К тому же не надо плодить функции для каждой кнопки. Одна из прелестей подпрограмм заключается в том, что повторяющийся код можно написать один раз, а потом вызывать его из разных мест. Из вышесказанного следует, что событию 'OnMouseMove' КАЖДОЙ кнопки нужно указать только ОДИН метод(см. ниже), а остальные поудалять. Самому же легче будет по программе лазить.
Код:
procedure TForm1.BitBtnMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  TBitBtn(Sender).Font.Color:=$004080FF;
end;
И я так и не понял, почему используется TBitBtn, а не TButton? В данной реализации они ничем не отличались бы, а вот вредный препод может докопаться. Хотя сейчас уже поздняк метаться.
Ответить с цитированием