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

Вниз

Помогите, начинающему программисту...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.022 c
3-97956
billybons
2002-09-09 08:01
2002.09.30
DBGrid


1-98093
Arkan
2002-09-19 14:21
2002.09.30
Замена файла из exe


3-97951
vJet
2002-09-06 20:01
2002.09.30
Проблема с Table


1-98048
TopGun
2002-09-18 20:13
2002.09.30
В разделе initialization не видны объявленные переменные


14-98298
AL2002
2002-09-02 15:59
2002.09.30
Скачивание файлов в ослике