Страница 1 из 1
					
				Замена символа при вводе
				Добавлено: 18 Июнь 2020, 9:15
				 morkovin
				Из-за какой-то кривизны в Win10 с раскладкой клавиатуры юзеры не могут ввести символ "@" в поле емайл. Выводится " (двойная кавычка). Язык ввода я переключаю на Latin. ес-сно. После некоторой долбёжки по Shift+Alt и Shift+Ctrl иногда удаётся переключиться на правильную раскладку. Задолбало уже. Хочется сделать автоматическую замену и забыть об этом кошмаре.
З.Ы, Форум перечитал. Но ничего подходящего не нашел.
			 
			
					
				Замена символа при вводе
				Добавлено: 18 Июнь 2020, 9:38
				 Игорь Столяров
				Ну можно попробовать также, как работает шаблон с подменой десятичной точки …
- Вешаем на поле ALERT для двойной кавычки;
- Перехватываем по PreAlertKey и если раскладка английская - заменяем на "@"
Код: Выделить всё
  ! ВАРИАНТ КОДА ДЛЯ ПОДМЕНЫ ДЕСЯТИЧНОЙ ТОЧКИ - ЗАМЕНИТЬ СИМВОЛЫ НА НУЖНЫЕ !!! 
  If KeyCode() = DecimalKey
    If GetKeyboardLayoutNameA(Loc:TempString).
    if Loc:TempString = '00000419'   ! Если включена русская раскладка
       PressKey(191)
    else
       Press('.')
    end
  end
 
			 
			
					
				Замена символа при вводе
				Добавлено: 18 Июнь 2020, 9:40
				 kreator
				Если это Кларион и поле Entry, то в свойствах поля надо выставить IMM и отслеживать ввод по EVENT:NewSelection. С текстовым полем так не получится. В таймере надо замену делать.
			 
			
					
				Замена символа при вводе
				Добавлено: 18 Июнь 2020, 9:52
				 morkovin
				kreator писал(а): 18 Июнь 2020, 9:40
Если это Кларион и поле Entry, то в свойствах поля надо выставить IMM и отслеживать ввод по EVENT:NewSelection. С текстовым полем так не получится. В таймере надо замену делать.
 
Спасибо!!! Вот так сделал на это событие :
Код: Выделить всё
UPDATE(?Loc:Email)
IF INSTRING('"',CLIP(Loc:Email),1,1) >0 THEN
    xReplace(Loc:Email,'"','@')                             !from xFunction set
    CHANGE(?Loc:Email,Loc:Email)
END
Проверил. Работает!
З.Ы. Это надо в FAQ!
 
			 
			
					
				Замена символа при вводе
				Добавлено: 18 Июнь 2020, 10:26
				 kreator
				Во-первых, instring может быть лишнее, достаточно prop:SelStart смотреть. Во-вторых, что тут такого, что нужно в FAQ?
			 
			
					
				Замена символа при вводе
				Добавлено: 18 Июнь 2020, 10:44
				 kreator
				Я бы вот так сделал:
Код: Выделить всё
update(?)
if LOC:TestString[?LOC:TestString{prop:SelStart}-1]='"'
  LOC:TestString[?LOC:TestString{prop:SelStart}-1] = '@'
  change(?LOC:TestString, LOC:TestString)
end
 
			 
			
					
				Замена символа при вводе
				Добавлено: 16 Июнь 2022, 17:21
				 VWV
				Подскажите, как в EIP подменить десятичный разделитель на точку для Decimalkey, когда включена русская раскладка
			 
			
					
				Замена символа при вводе
				Добавлено: 16 Июнь 2022, 23:09
				 Игорь Столяров
				VWV писал(а): 16 Июнь 2022, 17:21
как в EIP подменить десятичный разделитель на точку для Decimalkey
 
Абсолютно точно также как и для любого другого поля ввода.
1. Включаем на нужных EIP полях ALERT по прессу DecimalKey
Код: Выделить всё
EditInPlace::XYZ:MyField.Init PROCEDURE(UNSIGNED FieldNumber,UNSIGNED ListBox,*? UseVar)
...
  PARENT.Init(FieldNumber,ListBox,UseVar)
...
  Self.FEQ{Prop:Alrt,250} = DecimalKey
2. Обрабатываем нажатие DecimalKey на EIP поле ввода
Код: Выделить всё
BRW1::EIPManager.TakeFieldEvent PROCEDURE
Loc:TempString  CString(21)
...
  ReturnValue = PARENT.TakeFieldEvent()
...  
    If Event() = Event:PreAlertKey  
       If KeyCode() = DecimalKey
          If GetKeyboardLayoutNameA(Loc:TempString).
          If Loc:TempString = '00000419'   ! Если включена русская раскладка
             PressKey(191)
          else
             Press('.')
          end
       end
    end
  ! End of "Browse EIP Manager Method Executable Code Section"
  RETURN ReturnValue
3. Всё ! 

 
			 
			
					
				Замена символа при вводе
				Добавлено: 17 Июнь 2022, 8:11
				 VWV
				Спасибо!