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

Поиск:

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


Эксперт
***


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

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



Цитата(Bog d`An @ 17.1.2006, 05:55 Найти цитируемый пост)

Насчёт одной запятой - не будет работать


Конкретнее, что и в каком конкретно месте не будет работать?

За универсализмом не надо гоняться. Нужно исходить из реалии и целесообразности.

например(не претендуя на реальность ситуации) разделителем является '&'

Почему бы тогда не предположить, что разделителем будет знак '-' или '+' (которые как раз тоже надо добавить в набор допустимых символов, и обработка, следовательно, усложнится), которые вляются допустимыми в числах?


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


Эксперт
***


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

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



Почему не будет уменя 2 вареанта работают и кроме , и . болше ненашто нереагирует некаких +-*/?:%;№"!" нет а если при копировании то это каким же надо быть чтоб пренять @ в качестве , или .

Лучше обесните как выгледит нажатие клавиш Ctrl+C Ctrl+V smile как это реализовать smile

Это сообщение отредактировал(а) ivan219 - 17.1.2006, 11:59
PM MAIL ICQ   Вверх
Alexeis
Дата 17.1.2006, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата

Лучше обесните как выгледит нажатие клавиш Ctrl+C Ctrl+V  как это реализовать

Выделяем любой текст , жмем Ctrl+C
кликаем по Edit у , Жмем Ctrl+V и все smile smile smile


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
ivan219
Дата 17.1.2006, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Я незнаю может что нужно вкл. но такой способ непроходит Ctrl+С потм Ctrl+V вот с помощю меню можно вставить и копировать можно вырезазт отменить а комбинация клавиш Ctrl+С Ctrl+V не проходит smile
PM MAIL ICQ   Вверх
Romikgy
Дата 17.1.2006, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Конечно не будет работать smile ведь ты все буквы режешь в кейпрессе , перенеси в кейдаун и разреши необходимые те комбинации клавишь


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Демо
Дата 17.1.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Romikgy @ 17.1.2006, 15:18 Найти цитируемый пост)

Конечно не будет работать


У меня работает в том виде, в котором написал. ;)

То, что у автора не работает, явно зависит от его остального кода и настроек форм, hotKey и т.д.


Это сообщение отредактировал(а) Демо - 17.1.2006, 16:27


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


Бывалый
*


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

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



Цитата(Bog d`An @ 17.1.2006, 04:55 Найти цитируемый пост)

Код

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


вот это. Если DecimalSeparator не является точкой или запятой, он пойдёт не сюда а в else

Но, действительно или целесообразность, или универсальность...
Цитата

Почему бы тогда не предположить, что разделителем будет знак '-' или '+'

тогда зачем вообще использовать DecimalSeparator? писали бы '.'

вот что-то более-менее универсальное
Код

const WrongSepArr : array[0..1] of char =('.',',');

Procedure TForm1.EditChange2(Sender: TObject);
Var
  CurStr: String;
  Counter,
  SelPos,
  SeparatorPos  :Integer;
  isSeparator: Boolean;
begin
  SelPos:= TEdit(Sender).SelStart;
  CurStr:=PChar(TEdit(Sender).Text);

  for counter := low(WrongSepArr) to high(WrongSepArr) do
    if WrongSepArr[counter]<> DecimalSeparator then
      While Pos(WrongSepArr[counter],CurStr)>0 do
        CurStr[Pos(WrongSepArr[counter],CurStr)]:=DecimalSeparator;

  SeparatorPos:=Pos(DecimalSeparator,CurStr);
  for Counter:= Length(CurStr)-1 downto 0 do
  Begin
    if (curStr[Counter] in [DecimalSeparator])and(Counter=SeparatorPos) then
      curStr[Counter] := DecimalSeparator
    else
      if not (curStr[Counter] in ['0'..'9',#8,#42]) then
        Delete(CurStr,counter,1);
  End;
  TEdit(Sender).Text:=CurStr;
  TEdit(Sender).SelStart:=SelPos;
end;



Цитата(Romikgy @ 17.1.2006, 14:18 Найти цитируемый пост)

Конечно не будет работать smile ведь ты все буквы режешь в кейпрессе , перенеси в кейдаун и разреши необходимые те комбинации клавишь

Правильно! там возможностей больше!
и ещё для формы KeyPreview := true

Это сообщение отредактировал(а) Bog d`An - 18.1.2006, 04:42
--------------------
Удача откроет двери даже там, где их нет.Генри Морган--------------------[Furry team][Agent`s team][СРУКер]   
PM MAIL WWW   Вверх
ivan219
Дата 20.1.2006, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Bog d`An товой код немного фальшивит в Edit можно писать и буквы только каждая последующая заменяет предыдущюю и запетые там можно их 2 штуки ставить.

А поподробнее можно как в KeyDown это реализовать smile smile
PM MAIL ICQ   Вверх
Bog d`An
Дата 20.1.2006, 06:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Упс. Щас посмотрю.
Добавлено @ 06:28
Цитата(ivan219 @ 20.1.2006, 03:16 Найти цитируемый пост)

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

Это потому что в событии onChange


примерно так
Код

procedure TForm1.EditKeyDown1(Sender: TObject; var Key: Word;
  Shift: TShiftState);
Var
  Counter:Integer;
begin
  for counter := low(WrongSepArr) to high(WrongSepArr) do
    if WrongSepArr[counter]<> DecimalSeparator then
      if key = ord(WrongSepArr[counter]) then key:= ord(DecimalSeparator);

  if key in [ord(DecimalSeparator)] then
  Begin
    if Pos(DecimalSeparator,TEdit(Sender).Text)>0 then
      Key := 0;
  End
  else            //ord('0')..ord('9')
    if not (Key in [48..57,8,42]) then
      Key := 0;
end;


Это сообщение отредактировал(а) Bog d`An - 20.1.2006, 07:17
--------------------
Удача откроет двери даже там, где их нет.Генри Морган--------------------[Furry team][Agent`s team][СРУКер]   
PM MAIL WWW   Вверх
Демо
Дата 20.1.2006, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Bog d`An @ 20.1.2006, 07:16 Найти цитируемый пост)

примерно так


Извини, но ты свой код пробовал хотя бы проверить?

Могу даже предложить попроовать вот такой:

Код

procedure TfMain.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  Key := 0;
end;



Эффект будет аналогичен.

Это сообщение отредактировал(а) Демо - 20.1.2006, 12:27


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


Эксперт
***


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

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



Компилятору чегото ненравится [Ошибка] Unit1.pas(103): Undeclared identifier: 'WrongSepArr'
Код

for counter := low(WrongSepArr) to high(WrongSepArr) do

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


Бывалый
*


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

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



нет не пробовал smile
а надо? smile
Добавлено @ 14:58
Цитата(ivan219 @ 20.1.2006, 14:51 Найти цитируемый пост)

Компилятору чегото ненравится [Ошибка] Unit1.pas(103): Undeclared identifier: 'WrongSepArr'

константа с предидущего примера...
Код

const WrongSepArr : array[0..1] of char =('.',',');

--------------------
Удача откроет двери даже там, где их нет.Генри Морган--------------------[Furry team][Agent`s team][СРУКер]   
PM MAIL WWW   Вверх
ivan219
Дата 20.1.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Ошибок нет а всё равно буквы идут когбудто и нет нечего.
PM MAIL ICQ   Вверх
Демо
Дата 20.1.2006, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Bog d`An @ 20.1.2006, 15:56 Найти цитируемый пост)

а надо?


Надо, так как твой пример в OnKeyDown не будет работать ни в каком виде.


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


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Как вам вот это
Код

procedure TForm1.Edit1Change(Sender: TObject);
var
  i : integer;
  fl : boolean;
  s  : ansiString;
  i1 : byte;
begin
  i1 := 1;
  fl := false;
  s := Edit1.Text;
  if length(s) < 1
  then
    exit;

  if s[i1] in ['+','-']
  then
    i1 := 2;

  if s[i1] = '.'
  then
    delete(s, i1, 1);

  for i := i1 to length(s)
  do
    if not fl
    then
      Begin
        if not (s[i] in ['0'..'9',DecimalSeparator])
        then
          delete(s, i, 1)
        else
          if s[i] = DecimalSeparator
          then
            fl := true
      end
    else
      if not (s[i] in ['0'..'9'])
      then
        delete(s, i, 1);

  Edit1.Text := s;
end;



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Страницы: (5) Все 1 2 [3] 4 5 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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