Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.07;
Скачать: CL | DM;

Вниз

Определить, в поле edit число или нечто другое   Найти похожие ветки 

 
Lionzi ©   (2003-06-21 09:47) [0]

Помогите пожалуста, кто может!
ситуация следующая:
есть два стандартных поля Edit, если в них введен текст, то надо просто подставить слова рядом, а если число, то проссумировать, как сложить или проссумировать я разобрался, а вот как определить что введено в поле? у меня не получаеться.
тут как я понимаю идет ветвление:
if Edit1 = текст, then Edit3:=edit1+edit2 else ... // ну и т.д.
осталось только определить являеться ли знак введенный в поле edit1 буквой или цифрой.
еще пробовал через try..except все равно ругаеться,

procedure TForm1.Button1Click(Sender: TObject);
try
edit3.Text:=intToStr(StrToInt(edit1.Text)+strtoint(edit2.Text));
except
edit3.Text:=edit1.Text+edit2.Text;
end;

Заренее благодарен, Lionzi.


 
jel ©   (2003-06-21 09:52) [1]

А если так?

procedure TForm1.Button1Click(Sender: TObject);
begin
try
edit3.Text:=intToStr(StrToInt(edit1.Text)+strtoint(edit2.Text));
except
edit3.Text:=edit1.Text+edit2.Text;
end;
end;


 
ЮЮ ©   (2003-06-21 09:54) [2]

>еще пробовал через try..except все равно ругаеться
не обращай внимание, жми F9 :-)
а если хочешь без ругани, используй функцию Val


 
Palladin ©   (2003-06-21 09:56) [3]

вот еще как вариант...

function IsNumber(s:string):boolean;
var
Num,Code:integer;
begin
val(s,Num,Code);
result:=Code<>0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if IsNumber(Edit1.Text) and IsNumber(Edit2.Text)
then edit3.Text:=intToStr(StrToInt(edit1.Text)+strtoint(edit2.Text))
else edit3.Text:=edit1.Text+edit2.Text;
end;

надеюсь ты не вводишь сумашедшие числа, знакомест этак в 30...


 
Семен Сорокин ©   (2003-06-21 10:05) [4]

StrToIntDef


 
Palladin ©   (2003-06-21 10:13) [5]


> Семен Сорокин © (21.06.03 10:05)

что StrToIntDef?


 
Lionzi ©   (2003-06-21 10:13) [6]

Спасибо за ответы, но в первом случае выдает все ту-же ошибку,
Project Project1 exe raised exception class EConvertError wilh message "sdf" is nol a valid integer value" Process slopped Use Slep or Run to continue
А во втором случае спотыкаеться на

var
Num,Code:integer;
begin
val(s,Num,Code);
result:=Code<>0;
end;

Слове begin.
Может сможете помочь?


 
Palladin ©   (2003-06-21 10:14) [7]

врешь, не может он там спотыкатся!
ты все правильно воспроизвел? и заголовок функции?


 
Семен Сорокин ©   (2003-06-21 10:16) [8]

Palladin © (21.06.03 10:13)
StrToIntDef - функция из sysutils.pas:
function StrToIntDef(const S: string; Default: Integer): Integer;
var
E: Integer;
begin
Val(S, Result, E);
if E <> 0 then Result := Default;
end;


 
Lionzi ©   (2003-06-21 10:18) [9]

Palladin: не воспроизвел, а нагло скопировал...


 
jel ©   (2003-06-21 10:23) [10]

Ты либо exe готовый запускай НЕ из среды, либо отключи обработку дельфийских исключений в среде и никаких сообщений выдаваться не будет.


 
Lionzi ©   (2003-06-21 10:35) [11]

jel:
запустил сам exe выдает: " "fg"is not a valid integer value. "

All: Остальные варианты не проходять.

Попробую привести свой код целиком, может это поможет решить данную проблему?

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
try
edit3.Text:=intToStr(StrToInt(edit1.Text)+strtoint(edit2.Text));
except
edit3.Text:=edit1.Text+edit2.Text;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close
end;

end.


 
Palladin ©   (2003-06-21 10:39) [12]


> Семен Сорокин © (21.06.03 10:16)

читай внимательней условия задачи


 
jel ©   (2003-06-21 10:40) [13]

Мистика - твой код скопированный в проект у меня работает "на ура" D6 Win98SE


 
Lionzi ©   (2003-06-21 10:42) [14]

jel: складывает цыфры он нормально, а вот если писать буквы, то сразу выдает ошибку. (5 delphi)


 
Семен Сорокин ©   (2003-06-21 10:45) [15]

Palladin © (21.06.03 10:39)
procedure TForm1.Button1Click(Sender: TObject);
begin
if StrToIntDef(Edit1.Text, -1) = -1 then
Edit3.Text := Edit1.Text + Edit2.Text
end;

При условии конечно что полдьзователь не введет -1 :))
или использовать другую ф-ю оттуда же:
TryStrToInt:

procedure TForm1.Button1Click(Sender: TObject);
begin
if not TryStrToIntDef(Edit1.Text) then
Edit3.Text := Edit1.Text + Edit2.Text
end;


 
Семен Сорокин ©   (2003-06-21 10:46) [16]

сорри:

procedure TForm1.Button1Click(Sender: TObject);
begin
if not TryStrToInt(Edit1.Text) then
Edit3.Text := Edit1.Text + Edit2.Text
end;


 
Palladin ©   (2003-06-21 10:51) [17]

ну это другое дело, только у TryStrToInt два параметра...


 
Семен Сорокин ©   (2003-06-21 10:53) [18]

Palladin © (21.06.03 10:51)
тоже верно :))
поспешишь - других насмешишь


 
Anatoly Podgoretsky ©   (2003-06-21 10:55) [19]

А нет такой функции в Д5


 
Lionzi ©   (2003-06-21 11:01) [20]

Спасибо всем, у меня прошел код предложенный Семеном Сорокиным
procedure TForm1.Button1Click(Sender: TObject);
begin
if StrToIntDef(Edit1.Text, -1) = -1 then
Edit3.Text := Edit1.Text + Edit2.Text
else
edit3.Text:=intToStr(StrToInt(edit1.Text)+strtoint(edit2.Text));
end;

с дабовлением строки else Спасибо, всем кто не пожалел времени и участвовал в этой дисскуссии.


 
Palladin ©   (2003-06-21 11:06) [21]

ну вот :)
ЯХДР


 
app ©   (2003-06-21 11:24) [22]

Да уж из системы исчисления на за что ни про что, просто незаулуженно исключили -1. За что же ты так ее, математику?


 
Lionzi ©   (2003-06-21 11:32) [23]

Дорогой app,
еслу у вас есть другие предложения, то я с удовольствием их выслушаю! подскажите пожалуста как еще можно выбраться из моего лабиринта, ниже привожу сам текст задания:
На форме разместить три текстовых поля Edit, и кнопку Button1. При нажатии на кнопку значение полей Edit1 и Edit2 должны складываться, если они содержат числа, и сливаться, если содержать произвольные строки.

Заранее благодарен.


 
Anatoly Podgoretsky ©   (2003-06-21 11:35) [24]

Все предложения написаны выше, по заданию - задание решено не верноЮ число -1 ПРАВИЛЬНОЕ и его можно складывать!!!
Одно из наиболее правильных решений try except end
Поэтому если предподаватель проверит на граничных числах, то ты получишь уверенную двойуц.


 
Lionzi ©   (2003-06-21 11:39) [25]

А если он на try except end ругаеться?
Project Project1 exe raised exception class EConvertError wilh message "sdf" is nol a valid integer value" Process slopped Use Slep or Run to continue


 
Palladin ©   (2003-06-21 11:43) [26]

ты отдельно запусти, не из среды, и будет тебе счастье


 
Семен Сорокин ©   (2003-06-21 11:46) [27]

Даааа, ну и дискуссию развели.
2app
про -1 я говорил :))
тут предложили уже множество вариантов решения задачи, осталось только выбрать


 
Юрий Федоров ©   (2003-06-21 11:49) [28]

>>А если он на try except end ругаеться?
Ругается только под отладчиком, эта опция может быть отключена, см. меню Tools -> Debugger Options - > Stop on Exceptions


 
Anatoly Podgoretsky ©   (2003-06-21 11:59) [29]

Срочно за книжки


 
circul ©   (2003-06-21 12:02) [30]

Решение такой задачи занимает не более 5 минут(с кодированием).
Нужно только подумать немного.

function isInt(const aSrc: String): Boolean;
var
i: Integer;
begin
Result := False;
for i := 1 to Length(aSrc) do
begin
if i=1 then
begin
if not (aSrc[i] in ["0".."9","-","+"]) then Exit;
end
else
begin
if not (aSrc[i] in ["0".."9"]) then Exit;
end;
end;
Result := True;
end;


Вызов:

if isInt(Edit1.Text) and isInt(Edit2.Text)
then Edit3.Text := IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text))
else Edit3.Text := Edit1.Text + Edit2.Text;


 
Palladin ©   (2003-06-21 12:08) [31]

мастера расслабляются в субботу я смотрю


> circul © (21.06.03 12:02)

твое решение не корректно, по уже высказаной мной выше причине

а если
Edit1.text:="123456789012345678901234567890"
Edit1.text:="98765432109876543210987654321"


 
circul ©   (2003-06-21 12:13) [32]

>Palladin © (21.06.03 12:08)

Это уже дело техники-))
try
if isInt(Edit1.Text) and isInt(Edit2.Text)
then Edit3.Text := IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text))
else Edit3.Text := Edit1.Text + Edit2.Text;
except
ShowMessage("Какого лешего такие числа вводите?");
end


 
Юрий Федоров ©   (2003-06-21 12:18) [33]

>>circul ©
Ну а если все равно использовать try except, зачем тогда огород городить ?


 
circul ©   (2003-06-21 12:29) [34]

Ну а если все равно использовать try except, зачем тогда огород городить ?

Это не огород, а логичное и простое решение, независимое от версии Delphi.


 
Lionzi ©   (2003-06-21 12:44) [35]

Все равно не понимаю, посмотрите пожалуста, что я не так написал
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

function isInt(const aSrc: String): Boolean;
var
Form1: TForm1;
i: Integer;
implementation

{$R *.DFM}

begin
Result := False;
for i := 1 to Length(aSrc) do
begin
if i=1 then
begin
if not (aSrc[i] in ["0".."9","-","+"]) then Exit;
end
else
begin
if not (aSrc[i] in ["0".."9"]) then Exit;
end;
end;
Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
try
if isInt(Edit1.Text) and isInt(Edit2.Text)
then Edit3.Text := IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text))
else Edit3.Text := Edit1.Text + Edit2.Text;
except
ShowMessage("Какого лешего такие числа вводите?");
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
close
end;

end.


 
Юрий Федоров ©   (2003-06-21 12:52) [36]

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

function isInt(const aSrc: String): Boolean;
var
Form1: TForm1;
implementation

{$R *.DFM}

function isInt(const aSrc: String): Boolean;
i: Integer;

begin
Result := False;
for i := 1 to Length(aSrc) do
begin
if i=1 then
begin
if not (aSrc[i] in ["0".."9","-","+"]) then Exit;
end
else
begin
if not (aSrc[i] in ["0".."9"]) then Exit;
end;
end;
Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
try
if isInt(Edit1.Text) and isInt(Edit2.Text)
then Edit3.Text := IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text))
else Edit3.Text := Edit1.Text + Edit2.Text;
except
ShowMessage("Какого лешего такие числа вводите?");
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
close
end;

end.


Хотя мой тебе совет - реализуй IsInt так :
function isInt(const aSrc: String): Boolean;
begin
try
StrToInt(aSrc);
Result:=true
except
Result:=false;
end
end;


 
Palladin ©   (2003-06-21 12:53) [37]

одного end не хватает...
ищи сам где


 
Palladin ©   (2003-06-21 12:55) [38]

о боже :) я увидел заголовок...
это просто кошмар
трижды прав Anatoly Podgoretsky © (21.06.03 11:59)!


 
Anatoly Podgoretsky ©   (2003-06-21 12:57) [39]

circul © (21.06.03 12:13)
Юрий Федоров © (21.06.03 12:18)

Это уже огород

try
Edit3.Text := IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text))
except
Edit3.Text := Edit1.Text + Edit2.Text;
end

Что и было предложено
jel © (21.06.03 09:52)

Полностью соответствует заданию и главное работает.
И даже твоему утверждению " независимое от версии Delphi"


 
Lionzi ©   (2003-06-21 12:59) [40]

Полностью скопировал текст, вставил вместо своего, всеравно выдает ошибку:

[Ошика] Unit1.pas(32): Unknown directive: "i"
[Ошика] Unit1.pas(35): Undeclared identifier: "i"
[Warning] Unit1.pas(37): Comparing signed and unsigned types - widened both operands
[Ошика] Unit1.pas(60): Statement expected but "PROCEDURE" found
[Фотальная Ошибка] Project1.dpr(5): Could not compile used unit "Unit1.pas"



Страницы: 1 2 вся ветка

Текущий архив: 2003.07.07;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.02 c
14-20242
gn
2003-06-19 14:02
2003.07.07
А кто какой firewall узает???


3-19974
???
2003-06-12 13:38
2003.07.07
вопрос про TDBGrid!


14-20229
Стражник
2003-06-19 08:13
2003.07.07
Загрузка картинки в поле БД(парадокс)


3-20003
aga
2003-06-13 21:17
2003.07.07
BLOB


3-20009
mod
2003-06-14 16:21
2003.07.07
SQL