Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Запятая вместо точки, Как это реализовать 
:(
    Опции темы
Guest
Дата 20.12.2005, 22:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ivan219

Работает всем спасибо.
  Вверх
TwisT_X
Дата 20.12.2005, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: нет
Всего: 4



все таки а чем не подходить простая замена


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
Albinos_x
Дата 20.12.2005, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата(TwisT_X @ 20.12.2005, 22:26)
все таки а чем не подходить простая замена



Цитата(Snowy @ 20.12.2005, 18:55)
Это точка, запятая или что угодно, что явняется разделителем целой и дробной части, согласно настроек системы.




--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
TwisT_X
Дата 21.12.2005, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: нет
Всего: 4



Albinos_x а ну да.. все ясно..


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
ivan219
Дата 15.1.2006, 03:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Этот процедура делает возможным в компоненте Edit писать только цифры 0...9 ставить только одну запетую и ползоватся клавишей Backspace <---

Код


// Пресвоить всем Edit событие OnKeyPress

procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
var  A: String;
begin
 A:=(Sender as TEdit).Text;
 case Key of
  '0'..'9',#8:;
  ',','.':
   begin
    if pos(',',A)=0 then Key := DecimalSeparator;
    if pos(',',A)>0 then Key := #0;
   end;
  else
   Key := #0;
  end;
end;


smile
PM MAIL ICQ   Вверх
ivan219
Дата 15.1.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Так это я его и дописал из несколких которые вы мне дали, сночало был
Код

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);    
begin    
    case Key of    
      '0'..'9',#8: ;    
      ',','.': Key := DecimalSeparator;    
      else key := #0;    
    end;    
end;


Внём было две проблемы первая это возможность ставить больше чем одна запетая а это не правильно так что я перестраховался чтоб проблем небыло что разве это плохо когда код доведён до ума smile
Вторая это много проуедур скажем есть уменя 6 штук Edit и что мне для каждого пришлось писать
Код

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);        
begin    
 case Key of    
  '0'..'9',#8:;    
  ',','.':    
   begin    
    if pos(',',Edit1)=0 then Key := DecimalSeparator;    
    if pos(',',Edit1)>0 then Key := #0;    
   end;    
  else    
   Key := #0;    
  end;    
end;


Это тоже не выход 6 лишних процедур дополнительный код место и.т.д.

Вот я и зделал одну.
Код

// Пресвоить всем Edit событие OnKeyPress    
procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);    
var  A: String;    
begin    
 A:=(Sender as TEdit).Text;    
 case Key of    
  '0'..'9',#8:;    
  ',','.':    
   begin    
    if pos(',',A)=0 then Key := DecimalSeparator;    
    if pos(',',A)>0 then Key := #0;    
   end;    
  else    
   Key := #0;    
  end;    
end;


А если где встречалась так это хорошо, вот только почемуто мне самому прешось до этого дойти и слова критики в свой адрес я считаю не провомерными так как я для других токихже как я сторался чтоб потом было проше.
PM MAIL ICQ   Вверх
Демо
Дата 16.1.2006, 04:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(ivan219 @ 15.1.2006, 18:46 Найти цитируемый пост)

Вот я и зделал одну.


Правильно будет работать, только если разделитель - запятая.

Вот тебе еще вариант ;)

Код

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin

    case Key of
        '0'..'9',#8:;
        ',','.':
            begin
                if Pos(DecimalSeparator,TEdit(Sender).Text)>0
                    then Key := #0
                    else Key := DecimalSeparator;
            end;
    else Key := #0;
    end;
end;




--------------------
    
PM MAIL ICQ Skype   Вверх
ivan219
Дата 16.1.2006, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Да вобще по уневерсальнее.

Есть ещё вопрос как реализовать копирование т.е. есть 12.12 при такой записи будет ошибка надо автоматически зделать из 12.12 -> 12,12 когда копируеш из другого места smile
PM MAIL ICQ   Вверх
Демо
Дата 16.1.2006, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(ivan219 @ 16.1.2006, 19:09)
Да вобще по уневерсальнее.

Есть ещё вопрос как реализовать копирование т.е. есть 12.12 при такой записи будет ошибка надо автоматически зделать из  12.12 -> 12,12 когда копируеш из другого места smile

Обработать в OnChange ?


--------------------
    
PM MAIL ICQ Skype   Вверх
ivan219
Дата 16.1.2006, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



А по конкретнее как smile
PM MAIL ICQ   Вверх
Демо
Дата 16.1.2006, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Код

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    case Key of
        '0'..'9',#8:;
        ',','.':
            begin
                if Pos(DecimalSeparator,TEdit(Sender).Text)>0
                    then Key := #0
                    else Key := DecimalSeparator;
            end;
    else Key := #0;
    end;
end;

procedure TForm1.Edit1Change(Sender: TObject);
var
  i: integer;
  isSeparator: Boolean;
  s: String;
begin
  isSeparator := False;
  s := TEdit(Sender).Text;
  for i := 1 to Length(s) do
  begin
    case TEdit(Sender).Text[i] of
        '0'..'9',#8: Continue;
        ',','.':
            begin
                if isSeparator then Abort;
                s[i] := DecimalSeparator;
                isSeparator := True;
            end;
    else Abort;
    end;
  end;
  TEdit(Sender).Text := s;
end;



--------------------
    
PM MAIL ICQ Skype   Вверх
ivan219
Дата 16.1.2006, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Во спасибо smile

А как реализовать буфер обмена чтоб использовать комбинацию клавиш Ctrl+C Ctrl+V smile smile
PM MAIL ICQ   Вверх
Демо
Дата 17.1.2006, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(ivan219 @ 17.1.2006, 00:03 Найти цитируемый пост)

А как реализовать буфер обмена


В смысле - как реализовать? Вставка и копирование работают по-умолчанию. Для этого ничего не надо писать дополнительно.


--------------------
    
PM MAIL ICQ Skype   Вверх
ivan219
Дата 17.1.2006, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Нет. Это когда меню вызываеш а мне надо Ctrl+C Ctrl+V smile

Вот нашол только как это реализовать чтоб было по нажатию Ctrl+C Ctrl+V

Код

procedure Tform1.CopyStringToClipboard(s: string);
var
  hg: THandle;
  P: PChar;
begin
  hg:=GlobalAlloc(GMEM_DDESHARE or GMEM_MOVEABLE, Length(S)+1);
  P:=GlobalLock(hg);
  StrPCopy(P, s);
  GlobalUnlock(hg);
  OpenClipboard(Application.Handle);
  SetClipboardData(CF_TEXT, hg);
  CloseClipboard;
  GlobalFree(hg);
end; 

PM MAIL ICQ   Вверх
Bog d`An
Дата 17.1.2006, 04:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.3.2005
Где: Украина:Днепропет ровск

Репутация: нет
Всего: 3



Цитата(Демо @ 16.1.2006, 22:45 Найти цитируемый пост)

Код

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    case Key of
        '0'..'9',#8:;
        ',','.':
            begin
                if Pos(DecimalSeparator,TEdit(Sender).Text)>0
                    then Key := #0
                    else Key := DecimalSeparator;
            end;
    else Key := #0;
    end;
end;
procedure TForm1.Edit1Change(Sender: TObject);
var
  i: integer;
  isSeparator: Boolean;
  s: String;
begin
  isSeparator := False;
  s := TEdit(Sender).Text;
  for i := 1 to Length(s) do
  begin
    case TEdit(Sender).Text[i] of
        '0'..'9',#8: Continue;
        ',','.':
            begin
                if isSeparator then Abort;
                s[i] := DecimalSeparator;
                isSeparator := True;
            end;
    else Abort;
    end;
  end;
  TEdit(Sender).Text := s;
end;



Насчёт одной запятой - не будет работать, if not(DecimalSeparator in [',','.']) then думать надо, как DecimalSeparator, который не является константой запихать в case...

вариант: всё что не является буквой или цифрой считать разделителем... Действительно точка и запятая - довольно скудно... например(не претендуя на реальность ситуации) разделителем является '&' а вместо него напечатали(опечаткались) '^'

Это сообщение отредактировал(а) Bog d`An - 17.1.2006, 05:22
--------------------
Удача откроет двери даже там, где их нет.Генри Морган--------------------[Furry team][Agent`s team][СРУКер]   
PM MAIL WWW   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0907 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.