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

Вниз

TEdit точка запятая   Найти похожие ветки 

 
an-na2002   (2004-03-24 13:14) [0]

Подскажите, я ввожу в TEdit число. Можно ли поменять в программе точку на запятую, чтобы программа не выдовала ошибку?


 
Kaiu   (2004-03-24 13:20) [1]

Можно.
Используя событие нажатия клавиши точка или запятая и
меняя его в ентом событии


 
an-na2002   (2004-03-24 13:26) [2]

Как енто делать? Можно пример для чайника.


 
Anatoly P   (2004-03-24 13:29) [3]

A decimalseparator не помогает?


 
WebErr ©   (2004-03-24 13:30) [4]


> decimalseparator


 
an-na2002   (2004-03-24 13:58) [5]

Я хочу чтобы программа работала независимо от того какой разделитель . или ,


 
P.N.P. ©   (2004-03-24 14:02) [6]

if not (key in ["0".."9",decimalseparator]) then key:=#0


 
an-na2002   (2004-03-24 14:08) [7]

Я хочу чтобы программа работала независимо от того какой разделитель . или ,


 
Kaiu   (2004-03-24 14:12) [8]

Пришлось Delphi открывать из-за тебя.
Я в принципе в Builder играю, а здесь так проездом.
Но вот привожу сразу и с проверкой ввода числа

Извиняй обедал :)

Вот такое событие есть KeyPress - у компонентов

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin

if Key=Chr(44) then  Key:=Chr(46); {для замены запятой на точку}
if (Key <> Chr(vk_Back))  and  (Key <> Chr(44)) and (Key <> Chr(46)) and ( (Key < Chr(48)) or (Key > Chr(57)) ) then Key:=Chr(0);

end;


 
an-na2002   (2004-03-25 07:17) [9]

На procedure пишет ошибку Undeclared identifier. Что делать?


 
Рамиль ©   (2004-03-25 07:54) [10]

Слушай, вопрос сформулируй до конца нормально, а то у тебя

> Можно ли поменять в программе точку на запятую, чтобы программа
> не выдовала ошибку?

и
> Я хочу чтобы программа работала независимо от того какой
> разделитель . или ,

Как это вместе связать?
Если используешь DecimalSeparator то программа будет независима от разделителя в системе. Если хочешь для любого разделителя, то зачем менять его в Edit?.. Тем более, у меня может, в качестве разделителя не точка и не запятая, что тогда?


 
spirit ©   (2004-03-25 08:00) [11]


> an-na2002   (25.03.04 07:17) [9]

ты блондинка ?


 
an-na2002   (2004-03-25 08:06) [12]

Кто-нибуть ножет нармально ответить?


 
spirit ©   (2004-03-25 08:13) [13]


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=Chr(46) then  Key:=Chr(44);
end;


 
Романов Р.В. ©   (2004-03-25 08:21) [14]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Button1: TButton;
   procedure Edit1KeyPress(Sender: TObject; var Key: Char);
   procedure Button1Click(Sender: TObject);
 private
   function TextToDouble(Text: string; Default: double): double;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if Key in [".",","] then
   Key := DecimalSeparator;
end;

// &#207;&#238;&#235;&#243;&#247;&#229;&#237;&#232;&#229; &#247;&#232;&#241;&#235;&#224; &#232;&#231; &#242;&#229;&#234;&#241;&#242;&#224;.
// Default &#239;&#240;&#232;&#241;&#226;&#224;&#232;&#226;&#224;&#229;&#242;&#241;&#255; &#240;&#229;&#231;&#243;&#235;&#252;&#242;&#224;&#242;&#243; &#229;&#241;&#235;&#232; &#242;&#229;&#234;&#241;&#242; &#237;&#229; &#247;&#232;&#241;&#235;&#238;.
function TForm1.TextToDouble(Text: string; Default: double): double;
begin
 try
   Result := StrToFloat(Text);
 except
   Result := Default;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(FloatToStr(TextToDouble(Edit1.Text, 3.14)));
end;

end.


 
Романов Р.В. ©   (2004-03-25 08:21) [15]

// Получение числа из текста.
// Default присваивается результату если текст не число.
function TForm1.TextToDouble(Text: string; Default: double): double;


 
KSergey ©   (2004-03-25 08:22) [16]

Не просто скопировать код, а подумать зачем от и откуда.

Стандартных примеров приводится на форуме куча.

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if (Key = ".") OR (Key = ",")  then  Key := DecimalSeparator;
end;


Это обработчик OnKeyPress для вашего TEdit.


 
KSergey ©   (2004-03-25 08:23) [17]

Мдя, уже успели ;)

[16] KSergey ©   (25.03.04 08:22) было ответом на [9] an-na2002   (25.03.04 07:17)


 
KSergey ©   (2004-03-25 08:25) [18]

> [13] spirit ©   (25.03.04 08:13)
> if Key=Chr(46) then  Key:=Chr(44);

А почему не 44 на 46 заменяем? и не на 47?
Нет, так нельзя делать.


 
spirit ©   (2004-03-25 08:30) [19]


> KSergey ©   (25.03.04 08:25) [18]

ну меняет же "." на ","


 
an-na2002   (2004-03-25 09:44) [20]

А у меня не меняет.


 
KSergey ©   (2004-03-25 09:50) [21]

А у меня - меняет Полегчало? ;)
Есть еще такая штука как отладчик.


 
an-na2002   (2004-03-25 09:55) [22]

И что с ней с ентой штукой делать?


 
TransparentGhost   (2004-03-25 10:17) [23]

Sdavaca


 
Плохиш   (2004-03-25 10:28) [24]


> an-na2002   (25.03.04 09:55) [22]

Уважаемая, Вы хотите показать, что общего у морской свинки и женщины-програмиста?


 
IraiZor ©   (2004-03-25 10:45) [25]

поядок действий
1)Выделяешь tedit курсором на форме (в режиме проектирования)
2)В object inspector открываешь закладку events
3)ищешь событие OnKeyPress
4)нажимаешь на эту строчку , делаешь двойной щелчок.
5)генерируется процедура в ней после begin пишешь
if Key=Chr(46) then  Key:=Chr(44);
теперь прога будет менять точку на запятую , как тебе вроде бы надо
а ошибку скорее всего прога выдает потому что ты потом конвертируешь текст из tedit в вещественное число(real),а вещественное число для разделения целой части от дробной использует не запятую а точку.

Так что , думаю что тебе нужно было бы наоборот , запятую менять на точку , вот так :
в прoцедуре  TForm1.Edit1KeyPress напиши после бегина
if Key=Chr(44) then  Key:=Chr(46);


 
an-na2002   (2004-03-25 11:00) [26]

Спасибо большое IraiZor.


 
PVOzerski ©   (2004-03-25 11:50) [27]

Если потом строка преобразуется в число через StrToFloat:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key in[".",","]then
 Key:=DecimalSeparator;
end;

Если потом строка преобразуется в число через Str:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key in[".",","]then
 Key:=".";
end;

При этом, естественно, процедуру полагается указывать как обработчик события onKeyPress для Edit1. Обычно это делается через Object Inspector, хотя, естественно, можно и в рантайме. А вообще, IMHO, данный подход - не самый лучший. Потому что он, например, не защитит от ошибочного введения нескольких десятичных разделителей в одном числе. Либо используй tMaskEdit, либо проверяй набранное на "конвертабельность" при каждом введении символа (в том же onKeyPress).


 
PVOzerski ©   (2004-03-25 11:51) [28]

>Если потом строка преобразуется в число через Str:
Sorry, через Val :^)



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.03 c
14-1081889693
Yanis
2004-04-14 00:54
2004.04.11
FTP


7-1076090147
!MS
2004-02-06 20:55
2004.04.11
Хеш текущего юзера


1-1079952301
dimon_programmer
2004-03-22 13:45
2004.04.11
Указали на динамические массивы


14-1082030205
Knight
2004-04-15 15:56
2004.04.11
Кто помнит астрономию?


3-1079423110
fika
2004-03-16 10:45
2004.04.11
SQL и Unicode