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

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

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

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

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

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

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

Тут мала би бути якась влучна фраза(вибачте, що витратив кілька секунд вашого часу на прочитання).

3

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

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

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

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

I belong to the Dead Generation.

4

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

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

5 Востаннє редагувалося ADR (02.03.2013 14: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: З крапки на кому.

Дуже дякую!!!

7

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

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

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

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

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

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

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

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

Key:=#0; //Заборонимо ввід
Тут мала би бути якась влучна фраза(вибачте, що витратив кілька секунд вашого часу на прочитання).

9

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

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

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

10

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

Зрозуміло, дякую!