powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ввод в TextBox как в калькуляторах
6 сообщений из 6, страница 1 из 1
Ввод в TextBox как в калькуляторах
    #32156996
Kozerog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В при вводе денежных значений нужен следующий алгоритм :
- при попадании в поле курсор становится слева от десятичной точки;
- при вводе цифр они смещаются влево, курсор остается в начальной позиции:
- при нажатии <Стрелка Вправо> курсор переходит в первую позицию после десятичной точки;
- при вводе цифр после десятичной точки курсор смещается на одну позицию вправо на каждую введенную цифру;
- Enter Выход из поля.

Как такое правило реализовать в VFP ?
...
Рейтинг: 0 / 0
Ввод в TextBox как в калькуляторах
    #32157054
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то типа этого?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
**************************************************
* -- Class:        txtcalc (g:\new\conv\test.vcx)
 
* -- ParentClass:  textbox
 
* -- BaseClass:    textbox
 
* -- Time Stamp:   05/11/03 08:30:08 PM
 
*
DEFINE CLASS txtcalc AS textbox

Alignment =  1 
Value =  0 
Height =  25 
InputMask =  "999999999 . 9999 "
Left =  24 
TabIndex =  2 
Top =  36 
Width =  145 
Name =  "txtcalc" 

PROCEDURE KeyPress
 LPARAMETERS nKeyCode, nShiftAltCtrl
        && Not UpArrow or DnArrow
	IF NOT ((nKeyCode= 5  OR nKeyCode= 24 ) AND nShiftAltCtrl= 0 ) 
	 IF nKeyCode= 13  AND nShiftAltCtrl= 0  && Enter 
	  NODEFAULT 
	  KEYBOARD '{DNARROW}' PLAIN 
	 ENDIF 
	 IF BETWEEN(nKeyCode, 48 , 57 ) AND nShiftAltCtrl= 0  && Digits
	  IF this.SelStart < AT('.',this.InputMask)
	   NODEFAULT 
   this.Value=INT(this.Value)* 10 +VAL(CHR(nKeyCode))+this.Value-INT(this.Value)
	   this.SelStart=AT('.',this.InputMask)- 2 
	   this.SelLength= 1 
	  ENDIF 
	 ELSE 
	  NODEFAULT 
	  IF (nKeyCode= 4  OR nKeyCode= 46 ) AND nShiftAltCtrl= 0  && Point or RightArrow
	   this.SelStart=AT('.',this.InputMask)
	   this.SelLength= 0 
	  ENDIF 
	 ENDIF 
	ENDIF 
ENDPROC

PROCEDURE GotFocus
	this.SelStart=AT('.',this.InputMask)- 2 
	this.SelLength= 1 
ENDPROC

ENDDEFINE
*
* -- EndDefine: txtcalc
 
**************************************************
...
Рейтинг: 0 / 0
Ввод в TextBox как в калькуляторах
    #32158041
Kozerog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень похоже, но только редактировать введенные целые значения
не получается !
...
Рейтинг: 0 / 0
Ввод в TextBox как в калькуляторах
    #32158049
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разве это проблема?

Немного усрвершенствований - добавляем переход по Tab, обнуление на Esc и удаление выделеной цифры по Del или BackSpace:
Вместо строку
IF NOT ((nKeyCode=5 OR nKeyCode=24) AND nShiftAltCtrl=0)
вставляем следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
IF NOT ((nKeyCode= 5  AND nShiftAltCtrl= 0 ) OR (nKeyCode= 24  AND nShiftAltCtrl= 0 ) OR nKeyCode= 9 ) 
 IF (nKeyCode= 7  OR nKeyCode= 127 ) AND nShiftAltCtrl= 0  && Del or BackSpace
  NODEFAULT 
  this.Value=INT(this.Value/ 10 )+this.Value-INT(this.Value)
  this.SelStart=AT('.',this.InputMask)- 2 
  this.SelLength= 1 
 ELSE
  =DODEFAULT(nKeyCode,nShiftAltCtrl)
 ENDIF 
 IF nKeyCode= 27  AND nShiftAltCtrl= 0  && Esc
  NODEFAULT 
   this.Value= 0 
   this.SelStart=AT('.',this.InputMask)- 2 
   this.SelLength= 1 
 ENDIF 
...


ЗЫ возможны глюки, особенно не проверял.
...
Рейтинг: 0 / 0
Ввод в TextBox как в калькуляторах
    #32161207
Kozerog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели лучше ничего нет?

Уж слишком "кривое" решение...

Мышкой можно стать на любую позицию в поле и условия алгоритма не выполняются.

Есть ли способ определить положение курсора в TextBox ???

Собственно в это все в этой задаче упирается.
...
Рейтинг: 0 / 0
Ввод в TextBox как в калькуляторах
    #32161213
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Уж слишком "кривое" решение

Это не решение, это - пример. Решение должен реализовывать программер, а не такие как я.

> Мышкой можно стать на любую позицию в поле и условия алгоритма не выполняются.

Дык, отловить - с пол-пинка. Хотя бы проропиши в MouseUp
this.GotFocus()

> Есть ли способ определить положение курсора в TextBox ???

Собственно SelStart оно и есть.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ввод в TextBox как в калькуляторах
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]