![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
(Калькулятор с одним edit -ом). Как сделать, чтобы в место ошибки overflow на пример было showmessage('Слишком большое число!');
|
|
#2
|
||||
|
||||
|
Код:
try
...
except
on E: EException do
ShowMessage('Слишком большое число');
end; |
|
#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
|
||||
|
||||
|
Какая жесть. Этот код можно сильно сократить.
|
|
#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
|
||||
|
||||
|
Одна тема - один вопрос.
|