Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.036 c
7-1075808615
Dran
2004-02-03 14:43
2004.04.11
Отжатие клавиши Win


6-1079081830
Jaxtor
2004-03-12 11:57
2004.04.11
Отсылка сообщения через Outlook 2000 (COM)


14-1082118947
Bel
2004-04-16 16:35
2004.04.11
Эксперимент с координацией.


4-1075637281
8ung
2004-02-01 15:08
2004.04.11
Как сменить иконку у exe файла?


6-1076087080
Andrey1234
2004-02-06 20:04
2004.04.11
Подскажите - почему я данные не получаю? (TClientSocket)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский