Форум: "Основная";
Текущий архив: 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;
// Ïîëó÷åíèå ÷èñëà èç òåêñòà.
// Default ïðèñâàèâàåòñÿ ðåçóëüòàòó åñëè òåêñò íå ÷èñëî.
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