Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-98168
Svin
2002-09-17 08:40
2002.09.30
StringGrid ????


1-98099
Serg455
2002-09-19 01:32
2002.09.30
MessageBox


1-98109
r0land
2002-09-19 02:39
2002.09.30
Показывать форму повер других форм


6-98249
Askar
2002-07-31 09:56
2002.09.30
Web Brower


1-98194
Dimich1978
2002-09-18 11:57
2002.09.30
StringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский