Форум: "Основная";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];
ВнизПомогите, начинающему программисту... Найти похожие ветки
← →
Vladimiruss (2002-09-19 18:31) [0]Как сделать математические действия с Edit. Например Edit1 * Edit2 + Edit3 / Edit4, и ответ должен появиться автоматически в Edit5.
← →
Dmitriy Polskoy (2002-09-19 18:38) [1]StrToInt();
← →
MBo (2002-09-19 18:38) [2]строка - Edit1.Text
мат. действия делаются с целыми и вещественными числами
функции преобразования
IntToStr, StrToInt, FloatToStr, StrToFloat
← →
Smiths (2002-09-19 18:41) [3]Неплохо было бы на валидность проверять.
← →
Lego (2002-09-20 02:52) [4]Во первых самое простая проверка на то что клавиши были только цифрами(через Копировать\Вставить всеравно влезут буквы, но это уже сам разберешся думаю):
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key in ["0".."9"] then
Key := Key
else
Key := #0;
end;
у остальных Edit указываешь в событии(Events) на это событие Edit1...
ну и само математическое действие :)
procedure TForm1.Button1Click(Sender: TObject);
var
S1, S2, S3, S4: string;
begin
S1 := Edit1.Text;
S2 := Edit2.Text;
S3 := Edit3.Text;
S4 := Edit4.Text;
Edit5.Text := IntToStr(StrToInt(S1) * StrToInt(S2) +
StrToInt(S3) div StrToInt(S4));
end;
Помоему разжовано до ужаса просто :)
И еще рекомендую использовать CurrencyEdit из RxLib...
← →
alena.svt (2002-09-20 05:49) [5]Не до ужаса
← →
Separator (2002-09-20 06:41) [6]будет лучше так:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not(Key in ["0".."9", DecimalSeparator]) then
Key := #0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
S1, S2, S3, S4: string;
begin
S1 := Edit1.Text;
S2 := Edit2.Text;
S3 := Edit3.Text;
S4 := Edit4.Text;
Edit5.Text := FloatToStr(StrToFloat(S1) * StrToFloat(S2) +
StrToFloat(S3) / StrToFloat(S4));
end
← →
alena.svt (2002-09-20 07:31) [7]Вы приводите человеку готовые коды поэтому я считаю что не до ужаса , а если уж и приводите то заодно и все возможные ошибки обработать бы, ведь их тут многовато.
if not(Key in ["0".."9", DecimalSeparator]) then
Key := #0; Сорри а зачем
← →
Separator (2002-09-20 07:39) [8]Чтоб в еdit нельзя было вводить другие символы, кроме цифр
← →
Anatoly Podgoretsky (2002-09-20 07:41) [9]Например backspace
← →
Separator (2002-09-20 07:47) [10]Если надо, то я могу привести пример Edita коректо работающего с всеми клавишами, но мы ведь тут не пишим это Edit. Это просто я скопировал от лего и немного подправил
← →
Lego (2002-09-20 07:49) [11]хехе... и то правда :)
намудрили а про backspace и прочие там delete забыли :)
← →
alena.svt (2002-09-20 08:12) [12]Раз уж чистыми кодами обкидываетесь без объяснения
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
procedure Edit1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function NET_BUKVAM(Const S:String):String;
Var I:Integer;
begin
Result:="";
If Trim(S)="" then Exit;
for I:=1 To Length(S) Do
If S[I] in ["0".."9"] Then Result := Result + S[I];
end;
procedure TForm1.Edit1Change(Sender: TObject);
//В Инспекторе объектов для Edit c 1 по 4 задать этот обработчик
begin
Edit1.Text:= NET_BUKVAM(Edit1.Text);
Edit2.Text:= NET_BUKVAM(Edit2.Text);
Edit3.Text:= NET_BUKVAM(Edit3.Text);
Edit4.Text:= NET_BUKVAM(Edit4.Text);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
S1, S2, S3, S4: string;
begin
try
S1 := Edit1.Text;
S2 := Edit2.Text;
S3 := Edit3.Text;
S4 := Edit4.Text;
Edit5.Text := FloatToStr(StrToFloat(S1) * StrToFloat(S2) +
StrToFloat(S3) / StrToFloat(S4));
except
on EZeroDivide do Edit5.Text:="На нуль делить нельзя";
on EConvertError do ShowMessage("Некорректные данные для выполнения операции");
end
end;
end.
← →
Separator (2002-09-20 08:21) [13]А где тогда DecimalSeparator, надо так:
function NET_BUKVAM(Const S:String):String;
Var
I:Integer;
DS: boolean;
begin
Result:="";
DS:= false;
If Trim(S)="" then
Exit;
for I:=1 To Length(S) Do
If S[I] in ["0".."9"] Then
Result := Result + S[I];
else If (S[I] = DecimalSeparator) and (not DS) Then
begin
Result := Result + S[I];
DS:= true
end;
end;
← →
Esu (2002-09-20 08:26) [14]
> function NET_BUKVAM(Const S:String):String;
Ну если переименовать функцию NET_BUKVAM в TOKA_CIFRI то все нормально :) Только наверное нужно было ограничиться на StrToInt(edit1.text). А то сейчас тут свой MaskEdit напишем и совсем непонятно будет :)
← →
Separator (2002-09-20 08:30) [15]> Vladimiruss
Ты не обращай на то, что тут написано, а лучше купи книги. Для начала я б посоветовал "Turbo Pascal 7.0 для школьников" и что-нибудь из Архангельского, поверь, если все это прочтешь, то подобные вопросы отпадут.
← →
Esu (2002-09-20 08:32) [16]
> намудрили а про backspace и прочие там delete забыли :)
BackSpace и Delete раньше перехватываются.
> Separator
Эт тоже не панацея.
> If S[I] in ["0".."9"] Then
> Result := Result + S[I] ; - тут перед else - лишняя
← →
Separator (2002-09-20 08:33) [17]> Esu
Sorry проглядел, но думаю все поняли
← →
Anatoly Podgoretsky (2002-09-20 09:06) [18]Во первых главное слово НАПРИМЕР, ну например так 1,5E-3
Надо проще жить, ничего на вводе не надо фильтровать, пользователь сам разберется как ему вводить, а обработать результат преобразования строки в число и если есть ошибка то выдать сообщение (саиостоятельно или позволить системе сообщить об ошибке - это уже не важно кто). Не надо мешать пользователю.
← →
qube (2002-09-20 10:03) [19]StrToXXX выбросит исключение, если число введено с ошибками.
← →
alena.svt (2002-09-20 12:43) [20]Во блин скопировала коды ваши даже на деление не посмотрела вот как надо.
Edit5.Text := FloatToStr((StrToFloat(S1) * StrToFloat(S2) +
StrToFloat(S3)) / StrToFloat(S4));
qube © (20.09.02 10:03)
Пустой текст погоняйте и выхватите мессагу.
← →
RV (2002-09-20 12:56) [21]val?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.30;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.009 c