|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Избежание overflow
(Калькулятор с одним edit -ом). Как сделать, чтобы в место ошибки overflow на пример было showmessage('Слишком большое число!');
|
#2
|
||||
|
||||
Код:
try ... except on E: EException do ShowMessage('Слишком большое число'); end; — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
|||
|
|||
Непонял как
|
#4
|
||||
|
||||
можно сделать так же как в калькуляторе с 2-мя Edit'ами: переопределить обработчик OnException у Application. когда Exception == EOverflow выводить свое сообщение:
Код:
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } procedure ExceptionEvent(Sender: TObject; E: Exception); ... procedure TForm1.ExceptionEvent(Sender: TObject; E: Exception); begin if E is EOverflow then ShowMessage('Слишком большое число!') else ShowMessage(E.Message); end; procedure TForm1.FormCreate(Sender: TObject); var d: Double; begin Application.OnException:=ExceptionEvent; d:=9.9; while true do d:=d*d; end; Пишу программы за еду. __________________ |
#5
|
|||
|
|||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Menus, Buttons, XPMan, Math; type TForm1 = class(TForm) Edit1: TEdit; ... private { Private declarations } public { Public declarations } end; var Form1: TForm1; x,y,z,MS,Mp,Mm:real; p,k,l,d,i,j,t,h:integer; a,b: real; str: string; c: char; implementation uses Unit2,Unit3,Unit4; {$R *.dfm} procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); //wasd begin If (key in['-']) then edit1.text:=''; if not (key in['0'..'9','-',',',#8]) then key:=#0; end; procedure TForm1.Edit1Change(Sender: TObject); // ,, var h,i,n: integer; str: string; begin str:=''; for h:=1 to Length(Edit1.Text) do case Edit1.Text[h] of '0'..'9', '-', ',', 'E', 'e' ,#8: str:= str + Edit1.Text[h]; end; { case } Edit1.Text:= str; Edit1.SelStart:= Length(Edit1.Text); n:=pos(',',edit1.text); for i:=n+1 to length(edit1.text) do if edit1.text[i]=',' then edit1.clear; n:=pos('-',edit1.text); for i:=n+1 to length(edit1.text) do if edit1.text[i]='-' then edit1.clear; end; procedure TForm1.N2Click(Sender: TObject); //ìì âûõîä begin close; end; procedure TForm1.Copy1Click(Sender: TObject);//pì êîïèðîâàòü begin edit1.CopyToClipboard; end; procedure TForm1.Paste1Click(Sender: TObject); //pm âñòàâèòü begin edit1.PasteFromClipboard; end; procedure TForm1.RadioButton2Click(Sender: TObject); // èíæåíåðíûé begin if RadioButton2.Checked then edit1.Width:=329; Form1.Height:=299; Form1.Width:=398; end; procedure TForm1.FormCreate(Sender: TObject); // ôèêñàöèÿ ôîðìû begin Form1.Height:=297; Form1.Width:=204; ms:=0; x:=0; z:=0; y:=0; k:=0; p:=0; d:=0; Mp:=0; Mm:=0; end; procedure TForm1.RadioButton1Click(Sender: TObject); //îáû÷íûé begin if RadioButton1.Checked then edit1.Width:=185; Form1.Height:=297; Form1.Width:=204; end; procedure TForm1.N5Click(Sender: TObject); //mm copy begin edit1.CopyToClipboard; end; procedure TForm1.N6Click(Sender: TObject); //mm paste begin edit1.PasteFromClipboard; end; procedure TForm1.N1Click(Sender: TObject);// îòêðûòèå ôîðìû 2 begin form2.Show; end; procedure TForm1.BitBtn20Click(Sender: TObject); begin edit1.Text:=edit1.Text+'0'; end; procedure TForm1.BitBtn8Click(Sender: TObject); begin edit1.Text:=edit1.Text+'1'; end; procedure TForm1.BitBtn21Click(Sender: TObject); begin edit1.Text:=edit1.Text+'2'; end; procedure TForm1.BitBtn7Click(Sender: TObject); begin edit1.Text:=edit1.Text+'3'; end; procedure TForm1.BitBtn6Click(Sender: TObject); begin edit1.Text:=edit1.Text+'4'; end; procedure TForm1.BitBtn10Click(Sender: TObject); begin edit1.Text:=edit1.Text+'5'; end; procedure TForm1.BitBtn12Click(Sender: TObject); begin edit1.Text:=edit1.Text+'6'; end; procedure TForm1.BitBtn16Click(Sender: TObject); begin edit1.Text:=edit1.Text+'7'; end; procedure TForm1.BitBtn15Click(Sender: TObject); begin edit1.Text:=edit1.Text+'8'; end; procedure TForm1.BitBtn14Click(Sender: TObject); begin edit1.Text:=edit1.Text+'9'; end; procedure TForm1.BitBtn19Click(Sender: TObject); begin edit1.Text:=edit1.Text+','; end; procedure TForm1.BitBtn4Click(Sender: TObject); var s: string; begin s:=edit1.Text; delete(s, length (s),1); edit1.Text:=s; memo1.Text:=''; end; procedure TForm1.BitBtn5Click(Sender: TObject); begin edit1.Text:=''; memo1.Text:=''; end; procedure TForm1.BitBtn1Click(Sender: TObject); var k:double; begin memo1.Text:=edit1.Text; If TryStrToFloat(edit1.text,k) then edit1.text:=FloatTostr(-k);//'+/-' end; procedure TForm1.BitBtn3Click(Sender: TObject); begin if edit1.Text<>'' then a:=strtofloat(edit1.Text); c:='+'; edit1.Clear; end; procedure TForm1.BitBtn11Click(Sender: TObject); begin if edit1.Text<>'' then a:=strtofloat(edit1.Text); c:='-'; edit1.Clear; end; procedure TForm1.BitBtn13Click(Sender: TObject); begin if edit1.Text<>'' then a:=strtofloat(edit1.Text); c:='*'; edit1.Clear; end; procedure TForm1.BitBtn17Click(Sender: TObject); begin if edit1.Text<>'' then a:=strtofloat(edit1.Text); c:='/'; edit1.Clear; end; procedure TForm1.BitBtn18Click(Sender: TObject); begin memo1.Text:=edit1.Text; if edit1.Text<>'' then b:=strtofloat (edit1.Text); case c of 'x':edit1.Text:=floattostr(power(a,b)); '+':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; end; end; procedure TForm1.BitBtn2Click(Sender: TObject); begin memo1.Text:=edit1.Text; edit1.Text:=floattostr(pi); end; procedure TForm1.BitBtn9Click(Sender: TObject); var e: real; begin memo1.Text:=edit1.Text; e:=2.718281828459; edit1.Text:=floattostr(e); end; procedure TForm1.BitBtn25Click(Sender: TObject); begin memo1.Text:=edit1.Text; if Edit1.Text = '' then exit; t:=strtoint(edit1.Text); y:=1; for i:=1 to t do y:=y*i; edit1.Text:=floattostr(y); end; procedure TForm1.BitBtn33Click(Sender: TObject); begin if Edit1.Text = '' then exit; ms:=strtofloat(edit1.Text); panel1.Caption:='M'; end; procedure TForm1.BitBtn27Click(Sender: TObject); begin memo1.Text:=edit1.Text; if Edit1.Text = '' then exit; x:=strtofloat(Edit1.Text); y:=sqr(x); edit1.Text:=floattostr(y); end; procedure TForm1.BitBtn28Click(Sender: TObject); begin memo1.Text:=edit1.Text; if Edit1.Text = '' then exit; x:=strtofloat(edit1.Text); y:=sqr(x)*x; edit1.Text:=floattostr(y); end; procedure TForm1.BitBtn34Click(Sender: TObject); begin memo1.Text:=edit1.Text; if edit1.Text<>'' then a:=strtofloat(edit1.Text); c:='x'; edit1.Clear; end; procedure TForm1.BitBtn29Click(Sender: TObject); begin MS:=0; panel1.Caption:=''; end; procedure TForm1.BitBtn32Click(Sender: TObject); begin edit1.Text:=floattostr(MS); end; procedure TForm1.BitBtn31Click(Sender: TObject); begin if Edit1.Text = '' then exit; panel1.Caption:='M'; MS:=MS+strtofloat(edit1.Text); end; procedure TForm1.BitBtn30Click(Sender: TObject); begin if Edit1.Text = '' then exit; panel1.Caption:='M'; MS:=MS-strtofloat(edit1.Text); end; procedure TForm1.BitBtn24Click(Sender: TObject); begin memo1.Text:=edit1.Text; if Edit1.Text = '' then exit; x:=strtofloat(edit1.Text); y:=sin(x); edit1.Text:=floattostr(y); end; procedure TForm1.BitBtn22Click(Sender: TObject); begin memo1.Text:=edit1.Text; if Edit1.Text = '' then exit; if Edit1.Text = '0' then exit; x:=strtofloat(edit1.Text); y:=1/x; edit1.Text:=floattostr(y); end; procedure TForm1.BitBtn23Click(Sender: TObject); begin memo1.Text:=edit1.Text; if Edit1.Text = '' then exit; x:=strtofloat(edit1.Text); y:=sin(x)/cos(x); edit1.Text:=floattostr(y); end; procedure TForm1.BitBtn26Click(Sender: TObject); begin memo1.Text:=edit1.Text; if Edit1.Text = '' then exit; x:=strtofloat(edit1.Text); y:=cos(x); edit1.Text:=floattostr(y); end; procedure TForm1.BitBtn35Click(Sender: TObject); begin memo1.Text:=edit1.Text; 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; end; procedure TForm1.BitBtn36Click(Sender: TObject); begin memo1.Text:=edit1.Text; if Edit1.Text = '' then exit; x:=strtofloat(edit1.Text); y:=cosh(x); edit1.Text:=floattostr(y); end; procedure TForm1.BitBtn37Click(Sender: TObject); begin memo1.Text:=edit1.Text; if Edit1.Text = '' then exit; x:=strtofloat(edit1.Text); y:=sinh(x); edit1.Text:=floattostr(y); end; procedure TForm1.BitBtn38Click(Sender: TObject); begin memo1.Text:=edit1.Text; if Edit1.Text = '' then exit; x:=strtofloat(edit1.Text); y:=sinh(x)/cosh(x); edit1.Text:=floattostr(y); end; end. |
#6
|
||||
|
||||
Какая жесть. Этот код можно сильно сократить.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#7
|
||||
|
||||
Оффтоп:
Цитата:
По теме: Для начала, замените процедуры кликов кнопок "0".."9" и "," на одну такую Код:
procedure TForm1.BitBtn20Click(Sender: TObject); begin Edit1.Text:= Edit1.Text + (Sender as TBitButton).Caption; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#8
|
|||
|
|||
Код:
procedure TForm1.BitBtn20Click(Sender: TObject); begin Edit1.Text:= Edit1.Text + (Sender as TBitButton).Caption; end; Вот этот пошел Код:
procedure TForm1.BitBtn20Click(Sender: TObject); begin Edit1.Text:= Edit1.Text + (Sender as TBitBitbtn).Caption; end; |
#9
|
||||
|
||||
имхо, тема пошла в сторону допишите за меня...
OmG killer, что тебе не ясно в 4-ом сообщении? это вариант работает без переделки остального кода, чего и достаточно по теме. Пишу программы за еду. __________________ |
#10
|
|||
|
|||
При первом запуске ошибка .
При повторном запуске сразу появляется окошко (Слишком большое число) как сделать чтобы оно не появлялось при запуске? после нажатия ок появляется калькулятор уже работающий как нужно. |
#11
|
||||
|
||||
Одна тема - один вопрос.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |