Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите, начинающему программисту... [D6, WinME]


Страницы:   1 2

Vladimiruss ©   (2002-09-19 18:31:00) 

Как сделать математические действия с Edit. Например Edit1 * Edit2 + Edit3 / Edit4, и ответ должен появиться автоматически в Edit5.


RV   (2002-09-20 12:56:00) [1]

val?


alena.svt   (2002-09-20 12:43:00) [2]

Во блин скопировала коды ваши даже на деление не посмотрела вот как надо.
Edit5.Text := FloatToStr((StrToFloat(S1) * StrToFloat(S2) +
StrToFloat(S3)) / StrToFloat(S4));

qube © (20.09.02 10:03)
Пустой текст погоняйте и выхватите мессагу.


qube   (2002-09-20 10:03:00) [3]

StrToXXX выбросит исключение, если число введено с ошибками.


Anatoly Podgoretsky   (2002-09-20 09:06:00) [4]

Во первых главное слово НАПРИМЕР, ну например так 1,5E-3
Надо проще жить, ничего на вводе не надо фильтровать, пользователь сам разберется как ему вводить, а обработать результат преобразования строки в число и если есть ошибка то выдать сообщение (саиостоятельно или позволить системе сообщить об ошибке - это уже не важно кто). Не надо мешать пользователю.


Separator   (2002-09-20 08:33:00) [5]

> Esu
Sorry проглядел, но думаю все поняли


Esu   (2002-09-20 08:32:00) [6]


> намудрили а про backspace и прочие там delete забыли :)

BackSpace и Delete раньше перехватываются.


> Separator
Эт тоже не панацея.
> If S[I] in ["0".."9"] Then
> Result := Result + S[I] ;- тут перед else - лишняя


Separator   (2002-09-20 08:30:00) [7]

> Vladimiruss
Ты не обращай на то, что тут написано, а лучше купи книги. Для начала я б посоветовал "Turbo Pascal 7.0 для школьников" и что-нибудь из Архангельского, поверь, если все это прочтешь, то подобные вопросы отпадут.


Esu   (2002-09-20 08:26:00) [8]


> function NET_BUKVAM(Const S:String):String;

Ну если переименовать функцию NET_BUKVAM в TOKA_CIFRI то все нормально :) Только наверное нужно было ограничиться на StrToInt(edit1.text). А то сейчас тут свой MaskEdit напишем и совсем непонятно будет :)


Separator   (2002-09-20 08:21:00) [9]

А где тогда 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;


alena.svt   (2002-09-20 08:12:00) [10]

Раз уж чистыми кодами обкидываетесь без объяснения

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.


Lego   (2002-09-20 07:49:00) [11]

хехе... и то правда :)
намудрили а про backspace и прочие там delete забыли :)


Separator   (2002-09-20 07:47:00) [12]

Если надо, то я могу привести пример Edita коректо работающего с всеми клавишами, но мы ведь тут не пишим это Edit. Это просто я скопировал от лего и немного подправил


Anatoly Podgoretsky   (2002-09-20 07:41:00) [13]

Например backspace


Separator   (2002-09-20 07:39:00) [14]

Чтоб в еdit нельзя было вводить другие символы, кроме цифр


alena.svt   (2002-09-20 07:31:00) [15]

Вы приводите человеку готовые коды поэтому я считаю что не до ужаса , а если уж и приводите то заодно и все возможные ошибки обработать бы, ведь их тут многовато.

if not(Key in ["0".."9", DecimalSeparator]) then
Key := #0; Сорри а зачем


Separator   (2002-09-20 06:41:00) [16]

будет лучше так:


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 05:49:00) [17]

Не до ужаса


Lego   (2002-09-20 02:52:00) [18]

Во первых самое простая проверка на то что клавиши были только цифрами(через Копировать\Вставить всеравно влезут буквы, но это уже сам разберешся думаю):
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...


Smiths   (2002-09-19 18:41:00) [19]

Неплохо было бы на валидность проверять.


Dmitriy Polskoy   (2002-09-19 18:38:00) [20]

StrToInt();


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо