Тема: З крапки на кому.

Що потрібно зробити, якщо у Едіт з клавіатури(з NumPud) вводиш крапку, а вона перетворювалася б на кому? Прописував ось це: if Edit1.Text='.' then Edit1.Text:=',';  - але й це не допомогло.
  Простий вихід - це змінити мову з англійської на українську і заново вводити числа(десяткові дроби: 4,5 і т.д). Але хотілося б, щоб було зручніше, щоб зразу була кома. Що потрібно зробити?

2 Востаннє редагувалося DOP (01.03.2013 21:18:23)

Re: З крапки на кому.

Є у TEdit є подія OnChange. Так от у ній робіть подібне:

edit1.text:=StringReplace(edit1.text, '.', ',', [rfReplaceAll]);

Детальніше тут

3

Re: З крапки на кому.

Віталій написав:

Що потрібно зробити, якщо у Едіт з клавіатури(з NumPud) вводиш крапку, а вона перетворювалася б на кому? Прописував ось це: if Edit1.Text='.' then Edit1.Text:=',';  - але й це не допомогло.
  Простий вихід - це змінити мову з англійської на українську і заново вводити числа(десяткові дроби: 4,5 і т.д). Але хотілося б, щоб було зручніше, щоб зразу була кома. Що потрібно зробити?

Можливі граблі виникнуть, якщо надалі введений рядок треба перетворити на число. Мав свого часу таку проблему на Пітоні, який відмовлявся розуміти крапку, але кому, причому на іншій машині - навпаки... Тож враховуйте при цьому локальні параметри машини, на якій програма працюватиме.

4

Re: З крапки на кому.

Дякую, але коли хочеш прописати десятковий дріб, як тільки натиснув на кому - курсор перемістився на початок поля вводу, як зробити щоб він і надалі миготів після коми?

5 Востаннє редагувалося ADR (02.03.2013 13:04:43)

Re: З крапки на кому.

Віталій написав:

Дякую, але коли хочеш прописати десятковий дріб, як тільки натиснув на кому - курсор перемістився на початок поля вводу, як зробити щоб він і надалі миготів після коми?

Варіант 1:

Edit1.Text := StringReplace(Edit1.Text, '.', ',', [rfReplaceAll]);
Edit1.SelStart :=MaxInt; // або треба Length(Edit1.Text) - 1

Варіант 2:

for I := 1 to Length(Edit1.Text) -1 do
  if Edit1.Text[i] = ',' then
    Edit1.Text[i] := '.';

Варіант 3:

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

Якось так.

6

Re: З крапки на кому.

І ще одне запитання =). Як зробити, щоб у текстовому полі(Edit) не можна було вписувати літери, а тільки цифри, і кому можна було вписати тільки один раз?

7 Востаннє редагувалося DOP (02.03.2013 18:25:59)

Re: З крапки на кому.

Віталій написав:

І ще одне запитання =). Як зробити, щоб у текстовому полі(Edit) не можна було вписувати літери, а тільки цифри, і кому можна було вписати тільки один раз?

Ось тут рішення

А щоб обмежити к-сть ком, то треба перевіряти циклом посимвольно(чи простіше if Pos(',', text)<>0...), чи є вже кома, якщо кома є, то в обробнику події OnKeyDown  :

Key:=#0; //Заборонимо ввід

8

Re: З крапки на кому.

Використовуйте спеціально призначений для таких випадків TMaskEdit.

Подякували: ADR1