Страница 2 из 5
					
				Программа для блондинок
				Добавлено: 22 Апрель 2015, 16:48
				 Shur
				Губин Игорь писал(а):
Т.е. надо обрабатывать события по вводу в поле RTF с автоматическим изменением форматирования...  
 
 
Ну понятно, что не просто тип контрола поменял, и всё заработало...  
Может и правда, как Ал предлагает, message('Упс!') выводить, и всё?.. Так для блондинок понятнее всего будет?
 
			 
			
					
				Программа для блондинок
				Добавлено: 22 Апрель 2015, 23:29
				 Yufil
				А нельзя шрифт сделать моноширинным, поле прозрачным а под каждую буковку подложить цветной квадратик ? Ну или значок какой выше или ниже буковки... Пусть шрифт будет один, но фон (или подчеркивание ПОД буквой) - разным...
			 
			
					
				Программа для блондинок
				Добавлено: 23 Апрель 2015, 0:05
				 finsoftrz
				Как мне кажется, самый простой способ - это повесить на клавишу сохранения в форме вызов процедуры проверки критичных строк. В этой процедуре разбить исходную строку, переданную в качестве параметра, на слова и проверить их на моноязычность. Если в каком-то слове есть и русские, и английские буквы, то вывести с подсветкой букв в отдельном rtf-поле, а рядом предложить строку для исправления. Все это в отдельном окне процедуры проверки.
Но вначале было бы неплохо собрать статистику. Подобный запрос очень похож на случай, когда один человек один раз за длительное время ввел с ошибкой, а из этого начинают строить целые теории. Чтобы в одном слове использовать буквы из разных языков, надо как минимум переключить раскладку клавиатуры. Разве что введут неверно все слово, потом заметят и попытаются исправить, не трогая буквы с общим написанием. 
Завтра ради интереса опрошу некоторых наших ключевых пользователей.
			 
			
					
				Программа для блондинок
				Добавлено: 23 Апрель 2015, 11:01
				 kreator
				finsoftrz писал(а):Но вначале было бы неплохо собрать статистику. Подобный запрос очень похож на случай, когда один человек один раз за длительное время ввел с ошибкой, а из этого начинают строить целые теории. Чтобы в одном слове использовать буквы из разных языков, надо как минимум переключить раскладку клавиатуры. Разве что введут неверно все слово, потом заметят и попытаются исправить, не трогая буквы с общим написанием. 
На самом деле примеров куча. Проблемная буква - "с", что в кириллице, что в латинице, ещё и на одной кнопке. Начинаешь набирать слово на букву "С", замечаешь неправильную раскладку на 5-ой букве, бэкспейсом удаляешь неправильно введённые символы, а первую "с" на автомате оставляешь, она правильная (блондинкам всё равно, выглядит-то одинаково). Или вот ещё пример из жизни. Прислали справочник деталей в Excel'е, 50% деталей на русскую букву "А" написаны с латинской "A" ("Эй"). Как так можно?
А самый простой способ - Punto.
 
			 
			
					
				Программа для блондинок
				Добавлено: 23 Апрель 2015, 11:21
				 Губин Игорь
				kreator писал(а): 50% деталей на русскую букву "А" написаны с латинской "A" ("Эй"). Как так можно?
 
ЛЕГКО!
З = 3, О = O = 0, I = l = 1 и т.д. и т.п.
 
			 
			
					
				Программа для блондинок
				Добавлено: 23 Апрель 2015, 13:33
				 Yufil
				эээ... в старые добрые времена, когда компьютеры были большими, а дисплеи-маленькими, в MS DOS я некоторое время пользовал драйвер клавиатуры (в MS DOS можно было установить русскую кодовую страницу, но можно было и использовать сторонний драйвер), в котором кириллические и латинские буквы выглядели по-разному (грубо говоря, латиница была жирного начертания). Там латинские буквы в тексте очень наглядно выделялись. 
Мэй би взять редактор шрифтов и изготовить что-то подобное ?
			 
			
					
				Программа для блондинок
				Добавлено: 23 Апрель 2015, 19:01
				 finsoftrz
				Пользователи говорят, что подобные ошибки бывают, но не напрягают.
Тем не менее, тема заинтересовала, накидал тот вариант, про который писал в предыдущем своем посте.
			 
			
					
				Программа для блондинок
				Добавлено: 24 Апрель 2015, 8:39
				 Игорь Столяров
				Круто ! То, что надо. К сожалению, несколько выше моего уровня знаний работы с RTF. Исходник секретен ? 

 
			 
			
					
				Программа для блондинок
				Добавлено: 24 Апрель 2015, 10:18
				 finsoftrz
				Лови.
Loc:Text  - исходная строка, Loc:TextRTF - строка в формате rtf.
Код: Выделить всё
test_r routine   !проверка
   DATA
lor:str_razd  string(20)   !разделители
lor:str_lat   string(100)  !латинские буквы
lor:str_rus   string(100)  !русские буквы
lor:i         long
lor:j         long
lor:flag      byte
lor:flag2     byte
lor:poz       long
lor:dl        long
   CODE
    lor:str_razd=' ,.:/\№"{{}'
    lor:str_lat='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
    lor:str_rus='АаБбВвГгДдЕеЁёАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя'
    Loc:TextRtf='{{\rtf1\ansi\deff0' & |
                '{{\colortbl\red0\green0\blue0;\red255\green0\blue0;\red255\green255\blue255;}' & |
                '\cf0{{'
    lor:flag=3
    lor:flag2=0
    lor:poz=1
    lor:j=len(clip(Loc:TextRtf))
    loc:err=0
    lor:dl=len(Loc:TextRtf)
    free(Loc:QueuePoz)
    Loc:NumPozQ=0
    loop lor:i=1 to len(clip(Loc:Text))
       if instring(Loc:Text[lor:i],lor:str_razd,1,1)>0  !найден разделитель
          if lor:flag=2  !предыдущая латиница
             if (lor:j+6)<=lor:dl
                Loc:TextRtf[(lor:j+1):(lor:j+6)]='}\cf0{{'
                lor:j+=6
             .
          .
          if Loc:Text[lor:i]='\' or Loc:Text[lor:i]='{{' or Loc:Text[lor:i]='}'
             lor:j+=1
             if lor:j<=lor:dl
                Loc:TextRtf[lor:j]='\'
             .
          .
          lor:j+=1
          if lor:j<=lor:dl
             Loc:TextRtf[lor:j]=Loc:Text[lor:i]
          .
          lor:flag=0
          lor:flag2=0
          cycle
       .
       if instring(Loc:Text[lor:i],lor:str_lat,1,1)>0  !латинский символ
          if lor:flag=1   !предыдущий символ в слове русский
             loc:err=1
          .
          if lor:flag<>2
             if (lor:j+6)<=lor:dl
                Loc:TextRtf[(lor:j+1):(lor:j+6)]='}\cf1{{'
                lor:j+=6
             .
          .
          lor:j+=1
          if lor:j<=lor:dl
             Loc:TextRtf[lor:j]=Loc:Text[lor:i]
          .
          Loc:NumPoz=lor:i
          add(Loc:QueuePoz)
          lor:flag=2
          lor:flag2=0
          cycle
       .
       if instring(Loc:Text[lor:i],lor:str_rus,1,1)>0  !русский символ
          if lor:flag=2   !предыдущий символ в слове латинский
             loc:err=1
          .
          if lor:flag=2
             if (lor:j+6)<=lor:dl
                Loc:TextRtf[(lor:j+1):(lor:j+6)]='}\cf0{{'
                lor:j+=6
             .
          .
          lor:j+=1
          if lor:j<=lor:dl
             Loc:TextRtf[lor:j]=Loc:Text[lor:i]
          .
          lor:flag=1
          lor:flag2=0
          cycle
       .
       if lor:flag=2 and lor:flag2=0  !предыдущий символ латиница
          if (lor:j+6)<=lor:dl
             Loc:TextRtf[(lor:j+1):(lor:j+6)]='}\cf0{{'
             lor:j+=6
          .
          lor:flag2=1
       .
       lor:j+=1
       if lor:j<=lor:dl
          Loc:TextRtf[lor:j]=Loc:Text[lor:i]
       .
    .
    if lor:j+2<=lor:dl
       Loc:TextRtf[(lor:j+1):(lor:j+2)]='}}'
       lor:j+=2
    .
    if loc:err=1
       display(?Loc:TextRTF)
       select(?Loc:Text)
    else
       if loc:text<>lop:str
          lop:str=loc:text
       .
       loc:ok=1
       if lop:reg=1 and Loc:FlagMes=0
          FsMessagePr('Успех!')
       .
       do procedureReturn
    .
    Loc:FlagMes=1
 
			 
			
					
				Программа для блондинок
				Добавлено: 24 Апрель 2015, 10:32
				 Игорь Столяров
				Спасибо ! 

 Буду разбираться ...
 
			 
			
					
				Программа для блондинок
				Добавлено: 26 Апрель 2015, 17:15
				 Игорь Столяров
				Уря ! Все получилось. 
Здесь как раз тот случай, когда "Остап играл в шахматы второй раз в жизни", 
поэтому я с RTF сделал простейший вариант - без редактирования (просто показываем проблемы).
Еще раз спасибо за идею и реализацию !
 
			 
			
					
				Программа для блондинок
				Добавлено: 26 Апрель 2015, 17:19
				 Admin
				Игорь Столяров писал(а): за идею
 
А вот тебе еще идея - кнопка замены всех букв нужными аналогами с другой раскладки.
 
			 
			
					
				Программа для блондинок
				Добавлено: 26 Апрель 2015, 17:33
				 Игорь Столяров
				Да, эта идея очевидна - она показана на снимке экрана finsoftrz ...
Но в моем случае это излишне по двум причинам:
- Я действительно никогда раньше не работал с RTF полями ... даже не смог перевести обратно строку RTF в текст.
- Реальные ошибки чаще всего, все-таки делают конечно же не в тексте (ну кому надо переключать раскладку посреди слова ?)
  Ошибаются при наборе кодировок (артикул или маркировка товаров), а там все-таки лучше исправлять вручную.
Главное - показать наличие проблемы, что в общем-то и сделано. 

 
			 
			
					
				Программа для блондинок
				Добавлено: 26 Апрель 2015, 23:25
				 finsoftrz
				На мой взгляд, идею Админ подсказал хорошую. У меня на скриншоте кнопки навигации между ошибками в исправляемом тексте (текст rtf тоже в readonly). Сейчас еще там добавлена кнопка повторной проверки без закрытия окна.
Реализовать очень просто. В рутинке проверки заполняется очередь позиций с латиницей. Добавить туда еще поле статуса, чтобы отличать буквы в составе слов с ошибкой (подсвечиваться могут и полные слова на латинице). А дальше остается задать две строки с соответствием символов. А уж юзер пусть смотрит сам, нужно ему корректировать вручную или автоматом. Ситуация может быть и обратная - русские буквы внутри английских слов...
			 
			
					
				Программа для блондинок
				Добавлено: 26 Апрель 2015, 23:32
				 Игорь Столяров
				Я сделал просто динамическое обновление RTF строки при наборе текста - и не нужны кнопки поиска ошибок.
Что было бы классно сделать - так это загрузка исходной строки в RTF с раскраской, редактирование и сохранение обратно в текст.
Тогда не надо было делать 2 поля в окне и сам процесс редактирования строки был бы более естественным ...