Текущий архив: 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"
← →
Юрий Федоров (2003-06-21 13:02) [41]var I (я опечатался)
← →
Lionzi (2003-06-21 13:06) [42]Спасибо, теперь действительно рабочая процедура!!!
← →
Юрий Федоров (2003-06-21 13:09) [43]см Anatoly Podgoretsky © (21.06.03 12:57)
← →
uw (2003-06-21 13:10) [44]Не судьба :(
← →
Anatoly Podgoretsky (2003-06-21 13:16) [45]Не судьба конечно.
← →
circul (2003-06-21 14:14) [46]гы-гы-гы-ы-ы-ы-ыыыыыыыыыыыыыыыыы..........
← →
jack128 (2003-06-21 14:39) [47]:lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :-))))))
← →
Lionzi (2003-06-21 15:28) [48]ТАК!!!! Попрошу без шуток, я всего второй час на delphi програмирую, а учусь на заочном, к нам пришли рассказали что за окошки появляються при открытии D и дали задание на контрольную работу, и это было самым легким из них.
Страницы: 1 2 вся ветка
Текущий архив: 2003.07.07;
Скачать: CL | DM;
Память: 0.56 MB
Время: 0.007 c