:: Visual Foxpro, Foxpro for DOS
CHR(15) в TextBox
wow1970
Автор

Сообщений: 29
Дата регистрации: 06.12.2017
Добрый день!
Для универсальной обработки колонок грида (со строчными данными) пишу класс-форму для массового исправления ошибок ввода. Типа найти и заменить в приложениях офиса, но есть желание задействовать почти все средства обработки строчных полей Фоксом.

Текст бокс (если не использовать маски) по умолчания полностью заполнен пробелами.
Для визуального отделения введенных пользователем пробелов от тех что там находятся изначально
хотелось бы использовать символ CHR(15).

Когда нажимаешь в текстовом поле комбинацию АЛТ + 1 + 5 на клавиатуре символ в текст бокс успешно вбивается, а если делать программно через CHRTran(***,CHR(32),CHR(15)) то пропечатываются квадратики.

Как реализовать по простому?



Исправлено 1 раз(а). Последнее : wow1970, 09.12.17 14:46
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
wow1970
Автор

Сообщений: 29
Дата регистрации: 06.12.2017
Кстати задача правильно показывать что искать/менять оказалась не такой уж простой.
Как всегда без переделки базовых контролов не обходится.
Пока не ввел свойство myValue желаемого поведения никак не получалось добиться.
И все базовые контролы недоделанные. То комбобокс допилишь для грида, то еще что.

oform = createObject ("frmSR")
oform.Show(1)
clear memory
quit
**********************************************************************
define class frmSR as form
top = 100
left = 100
Height = 100
Width = 150
add object txtSeach1 as txtSeach with top = 10, left = 10
add object txtReplace1 as txtSeach with top = 40, left = 10
Add object cmd1 as commandButton with top = 80, left = 10
*----------------------------------------------------------------------
Procedure cmd1.Click
Messagebox("Найду ["+ThisForm.txtSeach1.myValue +"]"+CHR(13)+;
"и заменю на ["+ThisForm.txtReplace1.myValue+"]")
EndProc
*----------------------------------------------------------------------
Procedure queryUnload
ThisForm.Release()
EndProc
*----------------------------------------------------------------------
Enddefine
***********************************************************************
define class txtSeach as textBox
HideSelection = .F.
SelectedBackColor = Rgb(220,250,200)
SelectedForeColor = 0
myValue = []
FontSize = 8
*----------------------------------------------------------------------
Procedure MouseDown
LPARAMETERS nButton, nShift, nXCoord, nYCoord
nodefault
THis.SelStart = Len(This.myValue)
EndProc
*----------------------------------------------------------------------
Procedure GotFocus
THis.SelStart = Len(This.myValue)
EndPRoc
*----------------------------------------------------------------------
Procedure LostFocus
This.myValue = Substr(this.Value,1,this.SelStart)
this.SelStart = 0
This.SelLength = LEN(This.myValue)
EndPRoc
EndDefine



Исправлено 2 раз(а). Последнее : wow1970, 09.12.17 15:45
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
wow1970
Когда нажимаешь в текстовом поле комбинацию АЛТ + 1 + 5 на клавиатуре символ в текст бокс успешно вбивается
Вбивается, но не символ с кодом 15.
Символ 15 вбивается после Alt+015.
А после Alt+15 у меня вбивается символ 164, то есть, то же самое, что и при Alt+0164.
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
wow1970
Автор

Сообщений: 29
Дата регистрации: 06.12.2017
В чем пробовали? В текстбоксе если удерживая АЛТ нажать 1 и 5. В командном окне ФОКСПРО также. Та даже в ворде АЛТ + 15. При 015 ничего не получается. Вернее квадратик.
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
wow1970
В чем пробовали? В текстбоксе если удерживая АЛТ нажать 1 и 5. В командном окне ФОКСПРО также. Та даже в ворде АЛТ + 15. При 015 ничего не получается. Вернее квадратик.

Квадратик - это и есть символ с кодом 15, и набирается он с помощью Alt+015.

А с чего вы решили, что тот символ, который набирается через Alt+15 имеет код 15?
Ни с чего, просто решили, что именно так должен набираться этот символ. Ну, или потому, что внешне он похож на символ с кодом 15 в досовских шрифтах. Или почему?

Вставьте в командном окне через Alt+15 символ сюда, и получите ответ:
? ASC('¤') && 164
У меня так.

PS
В Ворде все немножко иначе, но он все же поддерживает юникод, так что просто не надо сравнивать.
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
wow1970
Автор

Сообщений: 29
Дата регистрации: 06.12.2017
Да, спасибо!
Действительно 0164. Теперь можно пробовать реализовать задуманное.
НЕ додумался сделать обратную проверку.

Все же непонятно выходит.
Вот набираешь АЛТ49 и получаешь "1", исполнение кода ?CHRTran(" ",chr(32),Chr(49)) печатает "1".
А тут такое. АЛТ15 это 164.
Может конечно есть где-то описание сего безобразия.



Короче как в человеческом языке. Пишется так, произносится эдак, но для вот таких вообще 3 вариант. Как у французов. Пишем "Peugeot" четаем "пежо". Никогда не понимал ЗАЧЕМ? Отсечь инородцев? Типа шифра свой/чужой.
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
Я когда-то давно где-то прочитал, не особенно задумываясь, что после Alt надо всегда сначала набирать 0, а уже потом код символа. Иногда это не требуется, но лучше не думать, когда можно, а когда нет, а всегда набирать этот 0.

Может, кто-то разъяснит этот момент "теоретически", но мне всегда хватало этого простого правила.

Цитата:
Пишем "Peugeot" читаем "пежо". Никогда не понимал ЗАЧЕМ?
Когда-то давно подобные слова читались "как писались", или скорее - писались, как произносились.
Со временем произношение менялось, а вот письмо оказалось гораздо более консервативно.
Но это ответ на вопрос "Почему?"



Исправлено 1 раз(а). Последнее : akvvohinc, 10.12.17 05:50
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
wow1970
Для визуального отделения введенных пользователем пробелов от тех что там находятся изначально
хотелось бы использовать символ CHR(15).

А зачем CHR(15)? Обычно пробел варьируют с "пустым" пробелом, получаемым после нажатия Alt+2+5+5. В дос-формате этому соответствует CHR(255). В ANSI же коду 255 соответствует уже буква "я".
Но если скажем набрать в командном окошке фокса: ?ASC('') и между кавычками сделать такое нажатие, туда как раз и впечатается такой пробел и будет соответствующий уже ANSI-код: 160.
Т.е. в зависимости от кодировки данных, в 1251-кодировке можно использовать как альтернативный пробел - CHR(160), а в 866 - CHR(255).

В принципе можно забить поля в качестве начальных такими "дополнительными" пробелами, и при желании например даже и "подкрасить" их. Хотя, уровень сложности организации подобного будет конечно зависеть еще и от используемых контролов, проще всего видимо в richedit. Зато цветовое решение будет смотреться красиво и функционально по сравнению с планировавшимся "разделителем".


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)




Исправлено 2 раз(а). Последнее : Crispy, 11.12.17 13:18
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
Crispy
можно использовать как альтернативный пробел - CHR(160)
ТС хочет визуально отличать одни пробелы от других.
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
wow1970
Автор

Сообщений: 29
Дата регистрации: 06.12.2017
Добрый вечер!

Остановился на символе CHR(149) вместо пробелов.
Мне надо не только различать, а еще и подкрасить в точности только то, что надо.
А вообще собираюсь задействовать практически все строчные функции фокса.
Для задач по массовому исправлению грязи в данных очень пригодится.
Вот только начал делать (на картинке). Реализовал CTRTran()


У меня грид уже умеет:
1) сортировать по нескольким колонкам
2)мощно фильтровать по любому количеству колонок (Like, ==, <> (25 штук, ограничение Inlist(), можно задать что-то самому)
3)Источником записей служит КА, буферизация 5. Потому измененные ячейки красятся в красный цвет.Можно откатить, посмотреть что было до изменений. Разруливаются конфликты обновлений.
4). Реализовано выделение записей в точности как в екселе. Это для того, чтобы синхронно поменять
значения по ВСЕМ выделенным записям в ПОЛЕ.
5). Поиск, прятание колонок, локальное меню и т.п.

Задача максимум сделать универсальный класс который возьмет лучшее от екселя, просмотрищиков дбф и т.д. Идей куча.

Кстати я осознал, что нас обманули! "ВИЗУАЛ" фокспро.
Что-то нормальное сделать в стиле ООП можно только описывая классы в прг.
С ужасом вспоминаю как пытался сделать все визуальными библиотеками.
Сейчас у меня грид (с обвязкой) занимает примерно 3000 строк.
Я его никогда бы не сделал, если бы делал в vcx.



Исправлено 1 раз(а). Последнее : wow1970, 11.12.17 20:53
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
А чем vcx плох? Все то же самое, только удобней и быстрее
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
pasha_usue

Сообщений: 3647
Откуда: Е-бург
Дата регистрации: 06.10.2006
wow1970
Кстати я осознал, что нас обманули! "ВИЗУАЛ" фокспро.
Что-то нормальное сделать в стиле ООП можно только описывая классы в прг.
С ужасом вспоминаю как пытался сделать все визуальными библиотеками.
Сейчас у меня грид (с обвязкой) занимает примерно 3000 строк.
Я его никогда бы не сделал, если бы делал в vcx.
Тупо не дали допилить разработчикам VFP. Проект сворачивался, и на это забили. MemberClass'ы можно нормально прописать исключительно в PRG.
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
Не все объекты можно создать в vcx штатными средствами Class designer.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
wow1970
Автор

Сообщений: 29
Дата регистрации: 06.12.2017
Ничего не удобней. Заглядывать как собака в кость.

В прг вся мощь редактора в распоряжении, копирование кусков, можно мусорить, все на виду.
Заменить/найти неудачно названую переменную нараз.
Скорость в разы для меня выше. А после того как терял сделанное из-за развала vct (копий вовремя естественно не сделал) вообще отказался. Убить класс в прг НЕВОЗМОЖНО.
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
wow1970
Автор

Сообщений: 29
Дата регистрации: 06.12.2017
Кстати вопрос кода символа для себя закрыл. Вот так.

create table AllCHR (Numb I, simvol C(10))
for i = 1 to 255
insert into AllCHR (Numb, simvol) Values (i, CHR(i))
endfor
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
wow1970
Автор

Сообщений: 29
Дата регистрации: 06.12.2017
Осталось правда понять почему cdbf умеет отображать символы 1 - 31, а Фокспро нет.
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
От умения VFP это не зависит - используйте шрифт, в котором есть "нормальное" отображение символов с такими кодами.
Как пример можете взять FoxFont.

Обычно в системе TrueType-шрифтов такого рода не бывает, но найти и установить можно.
Я, например, нашел архив с таким именем - CourierNewMod-5.11-ControlChars.zip. В нем символы с начальными кодами есть в виде квадратика с числом, равным коду, внутри. Эти символы, естественно выводятся и в Textbox, если задать у него свойство Fontname c этим шрифтом.
Ну, а с помощью программы-редактора шрифтов можно "нарисовать" любые символы по вашему желанию, и квадратики исчезнут.
Ratings: 0 negative/0 positive
Re: CHR(15) в TextBox
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
wow1970
Кстати вопрос кода символа для себя закрыл.
А смысл в таком курсоре? Чисто для "посмотреть код и символ"?
И да, всего есть 256 кодов, счёт начинается с 0.


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 38 akvvohinc  (Гостей: 37)

© 2000-2024 Fox Club 
Яндекс.Метрика