Автор | Сообщение |
|
| постоянный участник
|
Пост N: 640
Зарегистрирован: 13.10.05
|
|
Отправлено: 06.01.17 21:19. Заголовок: TextBox
TextBox Свойство - InputMask имеется три поля ( тип паспорта, серия , номер) Необходимо динамически менять маску полей - серия и номер в зависимости от значения поля - тип паспорта. Попробовал - напрямую не приваевается, через SetProperty(.. ) то же не устанавливается
|
|
|
Ответов - 18
[только новые]
|
|
|
| постоянный участник
|
Пост N: 641
Зарегистрирован: 13.10.05
|
|
Отправлено: 09.01.17 08:28. Заголовок: Не понял? То ли все..
Не понял? То ли все ещё отдыхают, то ли слишком "трудный" вопрос - ни одного ответа. Вообще-то - обычная ситуация. В консоле(Харбор) - давно всё было сделано и работало.
|
|
|
|
| постоянный участник
|
Пост N: 5287
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.01.17 08:49. Заголовок: Vlad04 пишет: То ли..
Vlad04 пишет: цитата: | То ли все ещё отдыхают, то ли слишком "трудный" вопрос - ни одного ответа. |
| Все отдыхают... Давай код, а то догадываться как то сложновато после праздников...
|
|
|
|
| постоянный участник
|
Пост N: 642
Зарегистрирован: 13.10.05
|
|
Отправлено: 09.01.17 09:32. Заголовок: *******************..
цитата: | ********************************* Proc PassMask() Local sType:=Rtrim(Pacient.BtnTextBox_Doc_Type.Value) Local m8:={},m9:={},m10:={},nPos:=0,sMask:='' // ,Nm_Get:=gNam[pPer] // вид док серия номер AADD(m8,'1') ;AADD(m9,'A-AA') ; AADD(m10,'999999') AADD(m8,'2') ;AADD(m9,'99') ; AADD(m10,'9999999') AADD(m8,'3') ;AADD(m9,'XXXXXXXX'); AADD(m10,'XXXXXXXX') AADD(m8,'4') ;AADD(m9,'AA') ; AADD(m10,'999999') AADD(m8,'5') ;AADD(m9,'XXXXXXXX'); AADD(m10,'XXXXXXXX') AADD(m8,'6') ;AADD(m9,'AA') ; AADD(m10,'999999') AADD(m8,'7') ;AADD(m9,'AA') ; AADD(m10,'9999999') AADD(m8,'8') ;AADD(m9,'99') ; AADD(m10,'9999999') AADD(m8,'9') ;AADD(m9,'XXXXXXXX'); AADD(m10,'XXXXXXXX') AADD(m8,'10');AADD(m9,'XXXXXXXX'); AADD(m10,'XXXXXXXX') AADD(m8,'11');AADD(m9,'XXXXXXXX'); AADD(m10,'XXXXXXXX') AADD(m8,'12');AADD(m9,'XXXXXXXX'); AADD(m10,'XXXXXXXX') AADD(m8,'13');AADD(m9,'XXXXXXXX'); AADD(m10,'XXXXXXXX') AADD(m8,'14');AADD(m9,'99 99') ; AADD(m10,'9999999') AADD(m8,'15');AADD(m9,'99') ; AADD(m10,'9999999') AADD(m8,'16');AADD(m9,'AA') ; AADD(m10,'9999999') AADD(m8,'17');AADD(m9,'AA') ; AADD(m10,'9999999') AADD(m8,'18');AADD(m9,'XXXXXXXX'); AADD(m10,'XXXXXXXX') nPos:=ASCAN(m8,sType) //MsgDebug('nPos=',nPos) sMask :=GetProperty( 'PACIENT', "TEXT_DOC_NUM", 'INPUTMASK') //MsgDebug('Do sMask=',sMask) if nPos > 0 // Pacient.Text_DOC_SER.Picture:=m9[nPos] // Pacient.Text_DOC_NUM.Picture:=m10[nPos] SetProperty( 'PACIENT', "TEXT_DOC_SER", 'INPUTMASK' ,m9[nPos]) // маска SetProperty( 'PACIENT', "TEXT_DOC_NUM", 'INPUTMASK' ,m10[nPos]) // маска ////.. Pacient.Text_DOC_SER.INPUTMASK:= m9[nPos] //// Pacient.Text_DOC_NUM.INPUTMASK:= m10[nPos] else // Pacient.GetBox_1.Value:='' // Pacient.GetBox_2.Value:='' Pacient.Text_DOC_SER.Value:='' Pacient.Text_DOC_NUM.Value:='' endif //sMask :=GetProperty( 'PACIENT', "TEXT_DOC_NUM", 'INPUTMASK') //MsgDebug('Posle sMask=',sMask) Return |
| Функция PassMask() вызывается при выходе из поля тип документа и по идее должна присвоить новую маску для полей серия и номер Но не присваивает. Пробовал GetBox - там другая засада, но об этом позже
|
|
|
|
| постоянный участник
|
Пост N: 5288
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.01.17 11:51. Заголовок: Не такой код не пойд..
Не такой код не пойдёт. Нужен отдельный самодостаточный пример, тогда что-то можно посмотреть. Т.е. нарисуй форму и то что нужно, и выкладывай здесь...
|
|
|
|
| постоянный участник
|
Пост N: 643
Зарегистрирован: 13.10.05
|
|
Отправлено: 09.01.17 12:34. Заголовок: Сделаю, но дело не в..
Сделаю, но дело не в примере.
|
|
|
|
| постоянный участник
|
Пост N: 1343
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.01.17 13:16. Заголовок: Vlad04 пишет но дело..
Vlad04 пишет i_textbox.ch содержит на DFINE TEXTBOX 3-и варианта _DefineTextBox(...) _DefineMaskedTextBox (...) _DefineCharMaskTextBox (...) думаю тут @ порылась, скорее всего динамически не работает (сам работаю без textbox-а) Можно сделать нужное кол-во (с масками) textbox, сделать их hide и нужный открывать
|
|
|
|
| постоянный участник
|
Пост N: 1398
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.01.17 15:54. Заголовок: InputMask (D) Specif..
InputMask (D) Specifies the edit mask for a TextBox control D: Available at control definition only Почитайте справку (заодно разницу между InputMask String и Format String м.б. уловите) кроме того.. Pacient.Text_DOC_SER.INPUTMASK:= m9[nPos] - ну не пошло же Зачем себя обманывать с SetProperty( 'PACIENT', "TEXT_DOC_SER", 'INPUTMASK' ,m9[nPos]) SetProperty, к сожалению, не генерирует ошибок времени исполнения.
|
|
|
|
| постоянный участник
|
Пост N: 644
Зарегистрирован: 13.10.05
|
|
Отправлено: 09.01.17 18:12. Заголовок: Грустно. :sm117: У ..
Грустно. У меня всё это еще на Клиппере работало. цитата: | Можно сделать нужное кол-во |
| Не выход.В данном случае 10 видов каждого поля. А REdefine не поможет ? Только не знаю, как правильно написать
|
|
|
|
| постоянный участник
|
Пост N: 1400
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.01.17 18:39. Заголовок: Vlad04 пишет: А REd..
Vlad04 пишет: цитата: | А REdefine не поможет ? Только не знаю, как правильно написать |
| Без разницы, но поскольку redefine - это команда препроцессора, то правильнее всего написать в upper case: REDEFINE Это шутка, конечно же. Посмотрите MiniGUI\SAMPLES\BASIC\ShowPassword\demo.prg - м.б. такая техника вам подойдет (имеется ввиду удаление и создание нового контрола)
|
|
|
|
| постоянный участник
|
Пост N: 645
Зарегистрирован: 13.10.05
|
|
Отправлено: 09.01.17 19:36. Заголовок: Петр Спасибо! Впол..
Петр Спасибо! Вполне, кода немного.
|
|
|
|
| постоянный участник
|
Пост N: 1344
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.01.17 19:58. Заголовок: Vlad04 пишет Вполне,..
Vlad04 пишет Это обманчиво. На 10 видов будет много. Если следующий textbox будете делать от предыдущего, то что будете делать, при возврате на вышестоящий и изменении его на другой (сколько то нижних уже есть) ? Может свести к списку документов (набор texbox мах определенных) и плясать от него.
|
|
|
|
|
| постоянный участник
|
Пост N: 1401
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.01.17 22:53. Заголовок: SergKis пишет: Это ..
SergKis пишет: цитата: | Это обманчиво. На 10 видов будет много. |
| Не больше, чем существует сейчас - если я правильно понял, полей всего 3, переопределять нужно только 2. Масок м.б. хоть сто, а не только 10, существенно это ни на что не влияет. Массивы m8-m10 можно сделать статическими (публичными), зачем их каждый раз пересоздавать.
|
|
|
|
| постоянный участник
|
Пост N: 1345
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.01.17 23:34. Заголовок: Петр пишет если я п..
Петр пишет цитата: | если я правильно понял, полей всего 3, переопределять нужно только 2. |
| Если бы, то 2 штуки несложно SergKis пишет цитата: | сделать их hide и нужный открывать |
| Vlad04 отвечает цитата: | Не выход.В данном случае 10 видов каждого поля. |
| т.е. кроме 2-х показанных в тексте примера, есть еще как мин. 8 плавающих. По мне "хрен редьки не слаще", что создавать 10 от предыдущих (c учетом прыгалки мышой и исправлении зачения удаления и пересоздание от нового значения), что заранее создать (от документов ~ 10 вариантов). Или не так понимаю потребности Vlad04
|
|
|
|
| постоянный участник
|
Пост N: 646
Зарегистрирован: 13.10.05
|
|
Отправлено: 10.01.17 07:33. Заголовок: Сейчас тестирую. Кон..
Сейчас тестирую. Конечно, это костыль любой вариант. И ещё вопрос. цитата: | h_textbox.prg Public &mVar. := k ... _HMG_aControlInputMask [k] := "" ... |
| А нельзя ли как- нибудь обратиться к внутренней переменной, определяющей нужные свойства Контрола?
|
|
|
|
| постоянный участник
|
Пост N: 1346
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.01.17 08:25. Заголовок: Vlad04 пишет А нельз..
Vlad04 пишет цитата: | А нельзя ли как- нибудь обратиться к внутренней переменной, определяющей нужные свойства Контрола |
| If ( i := GetControlIndex(cControlName, cForm) ) > 0 cMask := _HMG_aControlInputMask[ i ] EndIf или If ( i := Form_1.Control_5.Index ) > 0 cMask := _HMG_aControlInputMask[ i ] EndIf Vlad04 пишет цитата: | Конечно, это костыль любой вариант. |
| Меня смущает перенос технологии Clipper - одно окно -> 18 вариантов документов (серия, номер) в Gui как есть. Может стоит сделать список из 18 документов и формировать окна (cForm := 'Dok_1', ..., 'Dok_18'). От массивов или прямыми DEFINE TEXBOX ... (через IDE) создавать окна для работы с док. Можно работать хоть с несколькими окнами одновременно.
|
|
|
|
| постоянный участник
|
Пост N: 647
Зарегистрирован: 13.10.05
|
|
Отправлено: 10.01.17 09:48. Заголовок: Пример Вот как-то та..
Пример Вот как-то так на примере. Но, есть другие вопросы ( это не связано с переназначением маски) - как-то непонятно , если надо вводить все символы ХХХ.. Если ставишь АА, то разрешает только буквы - ограничение длины MaxLength не работает
|
|
|
|
| постоянный участник
|
Пост N: 648
Зарегистрирован: 13.10.05
|
|
Отправлено: 10.01.17 09:54. Заголовок: SergKis Может стои..
SergKis цитата: | Может стоит сделать список из 18 документов и формировать окна |
| У меня сложная форма, много элементов, а документы- 2 поля с переменной маской, маленькая часть всего. цитата: | cMask := _HMG_aControlInputMask[ i ] |
| Это мы маску прочитали, а присвоить новую _HMG_aControlInputMask[ i ] :=cMask
|
|
|
|
| постоянный участник
|
Пост N: 649
Зарегистрирован: 13.10.05
|
|
Отправлено: 10.01.17 11:15. Заголовок: SergKis Все оК! Еще..
SergKis Все оК! Еще короче и проще. Может быть , это и неправильно сточки зрения "ВЫСОКИХ МАТЕРИЙ", но все работает
|
|
|
|