Форум: "Основная";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];
ВнизПомогите доработать код, ввод Edit только цифр+запятая+backsp Найти похожие ветки
← →
Yuraz (2003-09-02 09:01) [0]if not (Key in["0".."9"]) then key:=#0;
Может быть нажата точка (на нумлоке при разных языках), и заменится на запятую.
← →
Song (2003-09-02 09:04) [1]Дык добавь точку и BackSpace в набор символов.
← →
Yuraz (2003-09-02 09:08) [2]а какой код у BackSpace?
← →
Song (2003-09-02 09:09) [3]Chr(VK_BACK)
← →
Мал0й (2003-09-02 09:24) [4]if not(Key in ["0".."9", #8, DecimalSeparator]) then Key := #0;
← →
Yuraz (2003-09-02 09:24) [5]Сделал код,
if not (Key in[",","0".."9", Chr(VK_BACK)]) then key:=#0;
if (Key in["."]) then key:=",";
и точку не заменяет, подскажите, плз, может сообщение какое обрабатывать, чтобы запятую дописывал?
← →
Yuraz (2003-09-02 09:26) [6]Мал0й
При Английской раскладке, NumLock выдаёт точку, при надатии на кл. "._DEL" и не заменяет.
← →
A_N_D (2003-09-02 09:33) [7]Сделал код,
if not (Key in[",","0".."9", Chr(VK_BACK)]) then key:=#0;
if (Key in["."]) then key:=",";
и точку не заменяет, подскажите, плз, может сообщение какое обрабатывать, чтобы запятую дописывал?
Попробуй
if (Key in["."]) then key:=",";
if not (Key in[",","0".."9", Chr(VK_BACK)]) then key:=#0;
← →
Мал0й (2003-09-02 09:34) [8]DecimalSeparator не зависит от раскладки
Запомни текущий DecimalSeparator
Var CurrDecimalSeparator: Char;
CurrDecimalSeparator:= DecimalSeparator;
Если нужна именно запятая, то
Case DecimalSeparator of
",":;
else
begin
CurrDecimalSeparator:= DecimalSeparator;
DecimalSeparator:= ",";
end;
end;
При зывершении программы не забудь вернуть на место
DecimalSeparator:= CurrDecimalSeparator;
← →
Спрашивающий_ (2003-09-02 09:41) [9]А еще бы не мешало добавить "E" наример 10E5-тоже число
← →
FoxBox (2003-09-02 10:16) [10]А TMaskEdit уже не котируется? Кстати компонентов, сходных с TMaskEdit, большое количество. Зачем изобретать собственный велосипед?
← →
Романов Р.В. (2003-09-02 10:25) [11]
> FoxBox (02.09.03 10:16) [10]
Велосипеды разные бывают...
← →
Так себе (2003-09-02 10:36) [12]2 FoxBox (02.09.03 10:16) [10]
Я чо-то не нашел TMaskEdit у TEdit
← →
Bob (2003-09-02 10:41) [13]Дык TMaskEdit отдельный компонент, и искать его надо на вкладке Additional
← →
FoxBox (2003-09-02 10:53) [14]
> Романов Р.В.
С квадратными колесами?
------------------------
Как альтернатива - компоненты rxlib ( www.rxlib.ru )
компоненты халявные, даже с исходниками. Есть много чего интересного...
← →
Рамиль (2003-09-02 11:00) [15]А не судьба обрабатывать KeyPress и просто проверять TryStrToFloat? Если true, то пропускать символ...
← →
wl (2003-09-02 11:00) [16]у меня вопросик: числа всегда будут положительными, в смысле не нужно ли ещё добавить символ "-". Мне кажется так ограничивать TEdit нельзя, проще отловить Exception при переводе строка->число, которое всё-равно придётся делать, так как ограничение вводимых символов не является гарантией того, что пользователь введет правильное число
← →
Рамиль (2003-09-02 11:14) [17]Три строчки кода без никаких Exception
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
Str: string;
Res: extended;
begin
Str := (Sender as TEdit).Text;
insert(Key, Str, (Sender as TEdit).SelStart + 1);
if (not TryStrToFloat(Str, Res)) and not (Key = #8) then Key := #0;
end;
← →
Ice (2003-09-02 12:31) [18]Вот тябе код. проверено. работает при любых катаклизмах.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ["0".."9",",",".",chr(vk_back)]) then key:=#0;
if key="." then key:=",";
end;
← →
webPauk (2003-09-02 12:59) [19]2 Ice
дык ё! 2 запятых вставляет
← →
Anatoly Podgoretsky (2003-09-02 13:10) [20]wl © (02.09.03 11:00) [16]
Правильно, только не ограничивать не TEdit, а не ограничивать пользователся, ему виднее.
← →
Shalamberidze (2003-09-02 17:08) [21]Esli simvol = . pervaia stroka zamenit ee na #0 i vtoraia stroka ne srabotaet
if (Key in ["."]) then key:=",";
if Pos(",", StrokaVvoda) > 0 then key=#0;
if not (Key in[",","0".."9", Chr(VK_BACK)]) then key:=#0;
← →
IG (2003-09-03 10:07) [22]посмотрите код:
***************
procedure TfrmWarData.EditWeightKeyPress(Sender: TObject; var Key: Char);
var k,Kop,cPos: integer;
begin
if (Key=".") or (Key=",") then begin
Key:= ",";
// запрещаем ввод повторной запятой: ...
if (Pos(",",(Sender as TEdit).Text) > 0)
and (length((Sender as TEdit).SelText) = 0) then Key:= #0;
end;
// блокируем также всё, кроме цифр,"," и Backspace!
if not (Key in ["0".."9",",",#8]) then Key:=#0;
k:= Pos(",",(Sender as TEdit).Text);
cPos:= (Sender as TEdit).SelStart - k;
Kop:= length( Copy((Sender as TEdit).Text,k+1,10) );
if (k > 0) then begin
if ( ((Kop >=2) and (cPos >= 2)) or ((cPos in [0..2]) and (Kop >=2)) )
and (Key <> #8) then Key:= #0;
end;
end;
***************
← →
Vlad1 (2003-09-05 22:38) [23]По-моему, всё-таки блока try ... except (или хотя бы ApplicationEvents) достаточно - остальное извращения.
← →
Vlad1 (2003-09-05 22:38) [24]По-моему, всё-таки блока try ... except (или хотя бы ApplicationEvents) достаточно - остальное извращения.
← →
Дмитрий (2003-09-07 11:09) [25]Наиболее простой и удобный код написал Рамиль © (02.09.03 11:14) [17], единственное, чего он не учел - заменить точку на запятую. А затем любое преобразование текста в число явно выдаст есть ошибка или нет. Без всяких проверок на две запятые, на унареые минусы и прочую лабудень.
← →
KSergey (2003-09-08 07:59) [26][25] Дмитрий (07.09.03 11:09)
Без всяких проверок на две запятые, на унареые минусы и прочую лабудень.
Вот и MaskEDit, похоже, такие же писатели делали.
Типа слабали лишь бы че, а то, что для работы с ним надо все делать "очень правильно, а иначе сам дурак" - видимо, так и надо.
← →
Рамиль (2003-09-08 08:17) [27]
> единственное, чего он не учел - заменить точку на запятую.
Так зато будет работать независимо от установок Windows. Если уж так необходима именно точка, то надо использовать DecimalSeparator:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
Str: string;
Res: extended;
Sep: char;
begin
Str := (Sender as TEdit).Text;
insert(Key, Str, (Sender as TEdit).SelStart + 1);
Sep := DecimalSeparator;
DecimalSeparator := ".";
if (not TryStrToFloat(Str, Res)) and not (Key = #8) then Key := #0;
DecimalSeparator := Sep;
end;
← →
Comoderator (2003-09-08 08:47) [28]Автор давно получил кучу вариантов реализации.
[Тема закрыта]
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.008 c