Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.04.2013, 19:31
OmG killer OmG killer вне форума
Прохожий
 
Регистрация: 13.03.2013
Сообщения: 23
Репутация: 10
По умолчанию Избежание overflow

(Калькулятор с одним edit -ом). Как сделать, чтобы в место ошибки overflow на пример было showmessage('Слишком большое число!');
  #2  
Старый 03.04.2013, 20:19
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Код:
try
...
except
  on E: EException do
    ShowMessage('Слишком большое число');
end;
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
  #3  
Старый 03.04.2013, 20:50
OmG killer OmG killer вне форума
Прохожий
 
Регистрация: 13.03.2013
Сообщения: 23
Репутация: 10
По умолчанию

Непонял как
  #4  
Старый 03.04.2013, 21:03
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

можно сделать так же как в калькуляторе с 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  
Старый 03.04.2013, 21:20
OmG killer OmG killer вне форума
Прохожий
 
Регистрация: 13.03.2013
Сообщения: 23
Репутация: 10
По умолчанию

Код:
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  
Старый 03.04.2013, 22:01
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Какая жесть. Этот код можно сильно сократить.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
  #7  
Старый 04.04.2013, 00:30
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Оффтоп:
Цитата:
Сообщение от M.A.D.M.A.N.
...код можно сильно сократить.
Да не то слово, сильно - очень сильно

По теме:
Для начала, замените процедуры кликов кнопок "0".."9" и "," на одну такую
Код:
procedure TForm1.BitBtn20Click(Sender: TObject);
begin
Edit1.Text:= Edit1.Text + (Sender as TBitButton).Caption;
end;
и присвойте её им всем. На кнопках надеюсь, только эти символы и есть.
  #8  
Старый 04.04.2013, 07:41
OmG killer OmG killer вне форума
Прохожий
 
Регистрация: 13.03.2013
Сообщения: 23
Репутация: 10
По умолчанию

Код:
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  
Старый 04.04.2013, 08:29
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Радость

имхо, тема пошла в сторону допишите за меня...
OmG killer, что тебе не ясно в 4-ом сообщении?
это вариант работает без переделки остального кода, чего и достаточно по теме.
__________________
Пишу программы за еду.
__________________
  #10  
Старый 04.04.2013, 12:44
OmG killer OmG killer вне форума
Прохожий
 
Регистрация: 13.03.2013
Сообщения: 23
Репутация: 10
По умолчанию

При первом запуске ошибка .
При повторном запуске сразу появляется окошко (Слишком большое число) как сделать чтобы оно не появлялось при запуске?
после нажатия ок появляется калькулятор уже работающий как нужно.
Изображения
Тип файла: png Безымянный.png (134.1 Кбайт, 3 просмотров)
  #11  
Старый 04.04.2013, 13:47
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Одна тема - один вопрос.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter