Вот как и обещал:
Кнопка '=':
Код:
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? В данной реализации они ничем не отличались бы, а вот вредный препод может докопаться. Хотя сейчас уже поздняк метаться.