Форум: "Прочее";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
ВнизКаким же должен быть калькулятор ? Найти похожие ветки
← →
Нуб (2007-03-13 16:22) [0]Вообщем :), дописал я свое детище-калькулятище , кто хочет может юзать бесплатно, код корявый , но за то почти все работает , спервого взгляда :), прошу сильно не ругать , если кто-то что то допишет, гив ит ту ми плиз :)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TCalc = class(TForm)
btnSeven: TButton;
btnEight: TButton;
btnNine: TButton;
btnFour: TButton;
btnFive: TButton;
btnSix: TButton;
btnOne: TButton;
btnTwo: TButton;
btnThree: TButton;
btnZero: TButton;
btnPlus: TButton;
btnMinus: TButton;
btnEqual: TButton;
Edit1: TEdit;
Memo1: TMemo;
btnCancel: TButton;
Label1: TLabel;
btnMultiply: TButton;
Button1: TButton;
btnDivide: TButton;
btnBackspace: TButton;
Label2: TLabel;
procedure FormShow(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure onbtnClick(Sender : TObject); // on click 0..9
function btnName(Sender: TObject) : TButton; // return name of the button
procedure onSummaMinusClick (Sender : TObject); // 1,+,34 res = 35; 32,-,12 res = 20
procedure btnEqualClick(Sender: TObject);
function summaminus(str1: String; str2: String; str3: String) : string;
procedure Button1Click(Sender: TObject);
procedure ErrorMessage;
procedure btnBackspaceClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Calc: TCalc;
bolequal : boolean;
bolclick : Boolean;
bolonSummaMinusClick : boolean;
error : boolean;
backspace : boolean;
implementation
{$R *.dfm}
//******************************************************************************** ***
procedure TCalc.onbtnClick(Sender : TObject);
var btn : TButton;
begin
bolclick := true;
backspace := false;
if bolonSummaMinusClick then begin
Edit1.Text := "";
bolonSummaMinusClick := false;
end;
btn := btnName(Sender);
if (Sender as TButton) = btnZero then begin
if Trim(Edit1.Text) = "0" then
Edit1.Text := "0"
else begin
Edit1.Text := Edit1.Text + "0";
Label1.Caption := Label1.Caption + "0";
end;
end else
if (Sender as TButton) = btn then begin
if Edit1.Text <> "0" then begin
Edit1.Text := Edit1.Text + btn.Caption;
Label1.Caption := Label1.Caption + btn.Caption;
end
else begin Edit1.Text := btn.Caption;
Label1.Caption := Label1.Caption + btn.Caption;
end;
end;
end;
//******************************************************************************** ***
function TCalc.btnName(Sender: TObject) : TButton; // return name of the button
begin
if (Sender as TButton) = btnOne then result := btnOne else
if (Sender as TButton) = btnTwo then result := btnTwo else
if (Sender as TButton) = btnThree then result := btnThree else
if (Sender as TButton) = btnFour then result := btnFour else
if (Sender as TButton) = btnFive then result := btnFive else
if (Sender as TButton) = btnSix then result := btnSix else
if (Sender as TButton) = btnSeven then result := btnSeven else
if (Sender as TButton) = btnEight then result := btnEight else
if (Sender as TButton) = btnNine then result := btnNine else
if (Sender as TButton) = btnPlus then result := btnPlus else // for result on onSummaMinusClick
if (Sender as TButton) = btnMinus then result := btnMinus else
if (Sender as TButton) = btnMultiply then result := btnMultiply else
if (Sender as TButton) = btnDivide then result := btnDivide
else result := nil ;
end;
//******************************************************************************** ***
procedure TCalc.onSummaMinusClick (Sender : TObject);
var btn : TButton;
begin
backspace := false;
if bolclick <> true then exit;
if bolequal then begin // if click on equal button then clear memo1 for new enter;
memo1.Clear;
bolequal := false;
end;
bolonSummaMinusClick := true; // on click "+" or "-"
btn := btnName(Sender); // vnosim v memo zna4eniya 1+2+56+223-4566 i t.d.
if (Sender as TButton) = btn then begin
// if Edit1.Text <> "0" then begin
Memo1.Lines.Add(Trim(Edit1.Text)); // add number to memo
if (Sender as TButton) = btnPlus then begin
if Memo1.Lines.Strings[Memo1.Lines.Count-1] = "" then Memo1.Lines.Strings[Memo1.Lines.Count-1] := "+" else
Memo1.Lines.Add("+");
Label1.Caption := Label1.Caption + "+";
bolclick := false;
end
else if (Sender as TButton) = btnMinus then begin
if Memo1.Lines.Strings[Memo1.Lines.Count-1] = "" then Memo1.Lines.Strings[Memo1.Lines.Count-1] := "-" else
Memo1.Lines.Add("-");
Label1.Caption := Label1.Caption + "-";
bolclick := false;
end
else if (Sender as TButton) = btnMultiply then begin
if Memo1.Lines.Strings[Memo1.Lines.Count-1] = "" then Memo1.Lines.Strings[Memo1.Lines.Count-1] := "*" else
Memo1.Lines.Add("*");
Label1.Caption := Label1.Caption + "*";
bolclick := false;
end
else begin
if Memo1.Lines.Strings[Memo1.Lines.Count-1] = "" then Memo1.Lines.Strings[Memo1.Lines.Count-1] := "/" else
Memo1.Lines.Add("/");
Label1.Caption := Label1.Caption + "/";
bolclick := false;
end;
end;
// end;
end;
//********************************************************
........
← →
Нуб (2007-03-13 16:23) [1]
//******************************************************************************** ***
procedure TCalc.FormShow(Sender: TObject);
begin
Edit1.Text := IntToStr(0);
bolequal := false;
bolonSummaMinusClick := false;
end;
//******************************************************************************** ***
procedure TCalc.btnEqualClick(Sender: TObject); // click on "="
var i, n: integer;
line: array of string;
kol : integer; // koli4estvo vseh operaciy
summa : double;
begin
error := false;
kol := 0;
summa := 0;
n := 3;
if (memo1.Lines.Count = 0) or (bolequal) then exit;
// if Edit1.Text <> "0" then begin
Memo1.Lines.Add(Trim(Edit1.Text));
// end
// else Memo1.Lines.Delete(Memo1.Lines.Count-1); // delete last "+" or "-" or "*"
SetLength(line,Memo1.Lines.Count); // length of massiv
for i:=0 to Memo1.Lines.Count-1 do begin
line[i] := Memo1.Lines.Strings[i];
if (line[i] = "+") or (line[i] = "-") or (line[i] = "*") or (line[i] = "/") then kol := kol + 1; // kol operation
end;
try
summa := StrToFloat(summaminus(line[0],line[1],line[2])); // first operation
except
on E : Exception do ErrorMessage;
end;
for i:=1 to kol-1 do begin
try
summa := StrToFloat(summaminus(FloatToStr(summa),line[n],line[n+1])); // summa(0,2),3,4 ; summa(0,2,4),5,6; summa(0,2,4,6) gde 1,3,5 - "+" ili "-"
except
on E : Exception do ErrorMessage;
end;
n := n + 2; // 3,5,7 danie v memo 0,1,2,3,4,5,6,7,8,9
end;
if error <> true then begin // if ne bilo divide on zero
Label1.Caption := Label1.Caption + " = " + FloatToStr(summa);
Edit1.Text := FloatToStr(summa);
Memo1.Clear;
Memo1.Lines.Strings[0] := FloatToStr(summa);
end; // end if
bolequal := true;
// btnEqual.Enabled := false;
end;
//******************************************************************************** ***
function TCalc.summaminus(str1: String; str2: String; str3: String) : string; // 1,+,34 res = 35; 32,-,12 res = 20
var d: Double;
begin
if str2 = "+" then result := FloatToStr(StrToFloat(str1) + StrToFloat(str3))
else if str2 = "-" then result := FloatToStr(StrToFloat(str1) - StrToFloat(str3))
else if str2 = "*" then result := FloatToStr(StrToFloat(str1) * StrToFloat(str3))
else result := FloatToStr(StrToFloat(str1) / StrToFloat(str3));
end; // end function
//******************************************************************************** ***
procedure TCalc.btnCancelClick(Sender: TObject); // o4istka vsego calculyatora
begin
Memo1.Clear;
Edit1.Text := "0";
Label1.Caption := "";
end;
//******************************************************************************** ***
procedure TCalc.Button1Click(Sender: TObject);
begin
if bolclick <> true then exit;
if (Label1.Caption = "") and (Edit1.Text = "0") then begin // dlya vvoda 1-go 4isla vvida 0,43545
Edit1.Text := "0,";
Label1.Caption := Label1.Caption + "0,";
end else begin // end dlya vvoda 1-go 4isla vvida 0,43545
Edit1.Text := Edit1.Text + ",";
Label1.Caption := Label1.Caption + ",";
end;
bolclick := false;
end;
procedure TCalc.ErrorMessage;
begin
ShowMessage("Äåëåíèå íà íîëü íå äîïóñòèìî");
Memo1.Clear;
Edit1.Text := "0";
Label1.Caption := "";
error := true;
end;
procedure TCalc.btnBackspaceClick(Sender: TObject);
var
Buffer, Buffer2: PChar;
begin
if (Edit1.Text = "") and (Label1.Caption = "") then begin
Memo1.Clear;
exit;
end;
if (Edit1.Text = "") and (backspace = false) then begin
Memo1.Lines.Delete(memo1.Lines.Count-1); // delete from memo "+" or "-" or "*" or "/"
GetMem(Buffer2,Length(Label1.Caption)); // bilo 80+
StrLCopy(Buffer2, PChar(Label1.Caption),Length(Label1.Caption)-1 );
Label1.Caption := Buffer2; // stalo 80
FreeMem(Buffer2);
backspace := true;
exit;
end;
if backspace = true then exit;
GetMem(Buffer2,Length(Label1.Caption));
StrLCopy(Buffer2, PChar(Label1.Caption),Length(Label1.Caption)-1 );
Label1.Caption := Buffer2;
GetMem(Buffer,Length(Edit1.Text));
StrLCopy(Buffer, PChar(Edit1.Text),Length(Edit1.Text)-1 );
Edit1.Text := Buffer;
FreeMem(Buffer);
FreeMem(Buffer2);
end;
end.
← →
Kolan © (2007-03-13 16:25) [2]Ну ни нафиг код сюда постить? Выложи скриншоты, описания, программу. Скриншоты лично я люблю смотреть...
← →
Сергей М. © (2007-03-13 16:27) [3]
> дописал я
Аминь !
← →
Сергей М. © (2007-03-13 16:29) [4]
> function TCalc.btnName(Sender: TObject) : TButton;
> // return name of the button
С каких пор и с какого перепугу тип TButton стал "именем кнопки" ?
← →
Нуб (2007-03-13 16:36) [5]
> Сергей М. ©
ну подумаешь, думал одно писал другое :)
← →
Сергей М. © (2007-03-13 16:38) [6]
> подумаешь, думал одно писал другое :)
>
Вот поэтому все в Державе и хреново - думают одно, пишут другое, говорят третье, делают (если вообще делают) четвертое))
← →
Нуб (2007-03-13 16:49) [7]
> Сергей М. ©
поэтому надо жить в своей Державе, потому что эта Держава нас правильно не оценит и не возлюбит )
← →
alles © (2007-03-13 16:59) [8]Edit1.Text := IntToStr(0);
мощь :)
← →
Нуб (2007-03-13 17:00) [9]
> alles ©
та не говори :)
← →
ASoft (2007-03-13 18:00) [10]
> но за то почти все работает , спервого взгляда
это такой калькулятор... для торговли :)
> Каким же должен быть калькулятор ?
Легким, инженерным, красивым, на аккумуляторах и в футляре... но сойдет и в мобиле ;)
------ сорри за офтопик
← →
Knight © (2007-03-13 18:52) [11]Калькулятор должен висеть за краем экрана и выскакивать оттуда по одному движению мыши... и так же легко безо всяких меню преобразовываться в инженерный и обратно в обычный :)
← →
eXPell © (2007-03-13 18:57) [12]
> Knight © (13.03.07 18:52) [11]
очень рекомендую numLock Calculator. не помню уже с каких пор юзаю - просто отличный.
по теме: смысл сделанного автором "зверя"?
← →
Knight © (2007-03-13 19:10) [13]
> [12] eXPell © (13.03.07 18:57)
Прикольно... спасибо :)
← →
eXPell © (2007-03-13 19:29) [14]
> Knight © (13.03.07 19:10) [13]
Это вообще, имхо, "Звери" - Prokon и SunCalculator.
Что б от темы не уходить в оффтоп:
автор посмотри эти калькуляторы, и сделай подобное, вот тогда огромное тебе РЕСПЕКТ. Думаю многие тебе подобное скажут.
ЗЫ. больше не будет офф-ов. сорри.
← →
Servelat © (2007-03-13 19:52) [15]Чем эта конструкция
if (Sender as TButton) = btnOne then result := btnOne else
if (Sender as TButton) = btnTwo then result := btnTwo else
if (Sender as TButton) = btnThree then result := btnThree else
if (Sender as TButton) = btnFour then result := btnFour else
...
лучше обычнойResult := (Sender as TButton);
Или вы из Индии? (=
Дальше вообще волшебство какое-то:btn := btnName(Sender);
if (Sender as TButton) = btn then begin
и при каком спрашивается стечении обстоятельств условие не выполнится? Дальше смотреть не стал, кидать компоненты на форму и компилировать смысла не вижу. Автору совет учить теорию.
← →
Чапаев © (2007-03-13 20:22) [16]> [15] Servelat © (13.03.07 19:52)
Лучше бы до них через RTTI добираться! ))
← →
Anatoly Podgoretsky © (2007-03-13 21:01) [17]> Нуб (13.03.2007 16:22:00) [0]
Тяжелым
← →
ASoft (2007-03-14 04:14) [18]
> Anatoly Podgoretsky © (13.03.07 21:01) [17]
>Тяжелым
что б по голове и наверняка :)
ps: Servelat ©, привет! давненько тебя не видно было!..
← →
ТЮзер (в нете через паяльник) (2007-03-14 05:59) [19]Очень удобный калькулятор - качаешь Delphi, кидаешь на форму кучу кнопарей, называешь их как надо, компилируешь, и почти все работает. Возможно даже с первого раза!
← →
Yanis © (2007-03-14 09:45) [20]Так это ж в чистом виде программа с открытым исходным кодом. Нуна на SF выкладывать :)
← →
StriderMan © (2007-03-14 09:47) [21]
> Сергей М. © (13.03.07 16:38) [6]
> Вот поэтому все в Державе и хреново - думают одно, пишут
> другое, говорят третье, делают (если вообще делают) четвертое))
... и вообще, весь этот горький катаклизм, который я здесь наблюдаю... (с) Скрипач
← →
ПЛОВ © (2007-03-14 10:17) [22]офтоп... Как-то видел в магазине калькулятор с USB шнурком. Хороший калькулятор, программируемый, почти как мой старый МК-61, коим пользуюсь до сих пор. Правда на упаковке ничего не сказано о назначении шнурка. Наверное, просто обычное питалово, наподобии всяких там USB-бритв/ламп/вентиляторов. Интересно, мож кто-нить встречал в продаже подобный девайс с возможностью обмена данными/командами с компом?
← →
wicked © (2007-03-14 10:18) [23]
> Каким же должен быть калькулятор ?
напомнило:<ZartWork> холодильнику тормоза не нужны
<ZartWork> он должен быть быстрым как гепард, порхать как бабочка и жалить как пчела
<ZartWork> хм....
<ZartWork> *задумавшись* о чем это я?
http://bash.org.ru/quote.php?num=19 :)
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.04 c