Перейти к содержанию

Задачка на делфи, калькулятор


Рекомендуемые сообщения

Ребят подскажите нубу как сделать...короче делаю калькулятор в делфи, и нужно чтобы в форме (компонент edit) при запуске не вводились символы с клавиатуры, только цифры и знак запятой!

Второе, как сделать чтобы знак запятой в калькуляторе, не выводился в форме edit больше одного раза.

( procedure TForm1.BitBtn11Click(Sender: TObject);

begin

if (new = false) then

Edit1.Text := Edit1.Text + ','

else

Edit1.Text := '0,';

new := false;

end;)

Третье - как сделать обработчик событий, если человек делит число на ноль..

Прошу прощения за тупые вопросы, логика в мозгах напрочь вынесена(

Добавлено спустя 6 минут 22 секунды:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, Math, jpeg, ExtCtrls, ActnList, XPMan;

type

TForm1 = class(TForm)

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

BitBtn4: TBitBtn;

BitBtn5: TBitBtn;

BitBtn6: TBitBtn;

BitBtn7: TBitBtn;

BitBtn8: TBitBtn;

BitBtn9: TBitBtn;

BitBtn10: TBitBtn;

BitBtn11: TBitBtn;

BitBtn12: TBitBtn;

BitBtn13: TBitBtn;

BitBtn14: TBitBtn;

BitBtn15: TBitBtn;

BitBtn16: TBitBtn;

Edit1: TEdit;

BitBtn17: TBitBtn;

BitBtn27: TBitBtn;

Image1: TImage;

XPManifest1: TXPManifest;

procedure BitBtn29Click(Sender: TObject);

procedure BitBtn27Click(Sender: TObject);

procedure BitBtn22Click(Sender: TObject);

procedure BitBtn23Click(Sender: TObject);

procedure BitBtn21Click(Sender: TObject);

procedure BitBtn19Click(Sender: TObject);

procedure BitBtn20Click(Sender: TObject);

procedure BitBtn18Click(Sender: TObject);

procedure BitBtn24Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure BitBtn10Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure BitBtn4Click(Sender: TObject);

procedure BitBtn5Click(Sender: TObject);

procedure BitBtn6Click(Sender: TObject);

procedure BitBtn7Click(Sender: TObject);

procedure BitBtn8Click(Sender: TObject);

procedure BitBtn9Click(Sender: TObject);

procedure BitBtn11Click(Sender: TObject);

procedure BitBtn13Click(Sender: TObject);

procedure BitBtn14Click(Sender: TObject);

procedure BitBtn15Click(Sender: TObject);

procedure BitBtn16Click(Sender: TObject);

procedure BitBtn25Click(Sender: TObject);

procedure BitBtn28Click(Sender: TObject);

procedure BitBtn12Click(Sender: TObject);

procedure BitBtn17Click(Sender: TObject);

procedure BitBtn26Click(Sender: TObject);

procedure BitBtn31Click(Sender: TObject);

procedure BitBtn32Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

x: real;

memory: real;

z: real;

deistv: byte;

new: boolean;

implementation

{$R *.dfm}

procedure figure(s: string);

begin

if (new = true) or (Form1.Edit1.Text = '0') then

Form1.Edit1.Text := s

else

Form1.Edit1.Text := Form1.Edit1.Text + s;

new := false;

end;

procedure TForm1.BitBtn29Click(Sender: TObject);

begin

Close;

end;

procedure TForm1.BitBtn27Click(Sender: TObject);

begin

Edit1.Text := '0';

end;

procedure TForm1.BitBtn22Click(Sender: TObject);

begin

Edit1.Text := FloatToStr(ArcSin(StrToFloat(Edit1.Text)));

new := true;

end;

procedure TForm1.BitBtn23Click(Sender: TObject);

begin

Edit1.Text := FloatToStr(ArcCos(StrToFloat(Edit1.Text)));

new := true;

end;

procedure TForm1.BitBtn21Click(Sender: TObject);

begin

Edit1.Text := FloatToStr(ArcTan(StrToFloat(Edit1.Text)));

new := true;

end;

procedure TForm1.BitBtn19Click(Sender: TObject);

begin

Edit1.Text := FloatToStr(Sin(StrToFloat(Edit1.Text)));

new := true;

end;

procedure TForm1.BitBtn20Click(Sender: TObject);

begin

Edit1.Text := FloatToStr(Cos(StrToFloat(Edit1.Text)));

new := true;

end;

procedure TForm1.BitBtn18Click(Sender: TObject);

begin

Edit1.Text := FloatToStr(Tan(StrToFloat(Edit1.Text)));

new := true;

end;

procedure TForm1.BitBtn24Click(Sender: TObject);

begin

memory := StrToFloat(Edit1.Text);

new := true;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

new := false;

deistv := 0;

memory := 0;

end;

procedure TForm1.BitBtn10Click(Sender: TObject);

begin

figure('0');

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

figure('1');

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

figure('2');

end;

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

figure('3');

end;

procedure TForm1.BitBtn4Click(Sender: TObject);

begin

figure('4');

end;

procedure TForm1.BitBtn5Click(Sender: TObject);

begin

figure('5');

end;

procedure TForm1.BitBtn6Click(Sender: TObject);

begin

figure('6');

end;

procedure TForm1.BitBtn7Click(Sender: TObject);

begin

figure('7');

end;

procedure TForm1.BitBtn8Click(Sender: TObject);

begin

figure('8');

end;

procedure TForm1.BitBtn9Click(Sender: TObject);

begin

figure('9');

end;

procedure TForm1.BitBtn11Click(Sender: TObject);

begin

if (new = false) then

Edit1.Text := Edit1.Text + ','

else

Edit1.Text := '0,';

new := false;

end;

procedure TForm1.BitBtn13Click(Sender: TObject);

begin

new := true;

deistv := 1;

z := StrToFloat(Edit1.Text);

end;

procedure TForm1.BitBtn14Click(Sender: TObject);

begin

new := true;

deistv := 2;

z := StrToFloat(Edit1.Text);

end;

procedure TForm1.BitBtn15Click(Sender: TObject);

begin

new := true;

deistv := 3;

z := StrToFloat(Edit1.Text);

end;

procedure TForm1.BitBtn16Click(Sender: TObject);

begin

new := true;

deistv := 4;

z := StrToFloat(Edit1.Text);

end;

procedure TForm1.BitBtn25Click(Sender: TObject);

begin

new := true;

deistv := 5;

z := StrToFloat(Edit1.Text);

end;

procedure TForm1.BitBtn28Click(Sender: TObject);

begin

Edit1.Text := FloatToStr(memory);

end;

procedure TForm1.BitBtn12Click(Sender: TObject);

begin

x := StrToFloat(Edit1.Text);

case deistv of

1: Edit1.Text := FloatToStr(z + x);

2: Edit1.Text := FloatToStr(z - x);

3: Edit1.Text := FloatToStr(z * x);

4: Edit1.Text := FloatToStr(z / x);

5: Edit1.Text := FloatToStr(Power(z, x));

end;

new := true;

end;

procedure TForm1.BitBtn17Click(Sender: TObject);

begin

Edit1.Text := FloatToStr(Sqrt(StrToFloat(Edit1.Text)));

new := true;

end;

procedure TForm1.BitBtn26Click(Sender: TObject);

begin

Edit1.Text := FloatToStr(1 / (StrToFloat(Edit1.Text)));

new := true;

end;

procedure TForm1.BitBtn31Click(Sender: TObject);

begin

Edit1.Text := FloatToStr(ArcCot(StrToFloat(Edit1.Text)));

new := true;

end;

procedure TForm1.BitBtn32Click(Sender: TObject);

begin

Edit1.Text := FloatToStr(Cot(StrToFloat(Edit1.Text)));

new := true;

end;

end.

Ссылка на комментарий

Событие OnKeypress

if ((Key >= '0') and (Key <= '9')) then begin end
else if (Key='.') then begin end
else Key := ' ';

Что делать с пробелами - незнаю, если его убрать будет ругаться на несовместимость типов.

Оригинал на C++

void __fastcall TForm1::LabeledEdit2KeyPress(TObject *Sender, char &Key)
{
if ((Key >= '0') && (Key <= '9')) {}
else if (Key == VK_RETURN) {Form1->Button1Click(Form1);}
else if (Key == VK_BACK) {}
else if (Key == VK_ESCAPE) {Form1->Button2Click(Form1);}
else Key = 0;
}

Деление на ноль - нашел знак деления, записал число после знака в переменную, если число равно нулю - вывод ошибки и т.д.

Ссылка на комментарий

Так, сейчас буду думать!) Спасибо за инфу! Я правда не все понял, но сейчас постараюсь разобраться...с делением на ноль я сделаю, а вот ввод символов с клавиатуры как...

Ссылка на комментарий

Для проверки вхождения символа в строку используй функцию Pos.

Присвоение Key нулевого символа (Key := #0) оставляет строку Edit'а без изменений.

Кстати, для определения символа-разделителя целой и дробной частей используй константу DecimalSeparator (модуль SysUtils).

Ссылка на комментарий

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...