Программа для блондинок

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Программа для блондинок

Сообщение Shur »

Губин Игорь писал(а): Т.е. надо обрабатывать события по вводу в поле RTF с автоматическим изменением форматирования... :idied:
Ну понятно, что не просто тип контрола поменял, и всё заработало... :)

Может и правда, как Ал предлагает, message('Упс!') выводить, и всё?.. Так для блондинок понятнее всего будет?
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Программа для блондинок

Сообщение Yufil »

А нельзя шрифт сделать моноширинным, поле прозрачным а под каждую буковку подложить цветной квадратик ? Ну или значок какой выше или ниже буковки... Пусть шрифт будет один, но фон (или подчеркивание ПОД буквой) - разным...
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Программа для блондинок

Сообщение finsoftrz »

Как мне кажется, самый простой способ - это повесить на клавишу сохранения в форме вызов процедуры проверки критичных строк. В этой процедуре разбить исходную строку, переданную в качестве параметра, на слова и проверить их на моноязычность. Если в каком-то слове есть и русские, и английские буквы, то вывести с подсветкой букв в отдельном rtf-поле, а рядом предложить строку для исправления. Все это в отдельном окне процедуры проверки.

Но вначале было бы неплохо собрать статистику. Подобный запрос очень похож на случай, когда один человек один раз за длительное время ввел с ошибкой, а из этого начинают строить целые теории. Чтобы в одном слове использовать буквы из разных языков, надо как минимум переключить раскладку клавиатуры. Разве что введут неверно все слово, потом заметят и попытаются исправить, не трогая буквы с общим написанием.

Завтра ради интереса опрошу некоторых наших ключевых пользователей.
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Программа для блондинок

Сообщение kreator »

finsoftrz писал(а):Но вначале было бы неплохо собрать статистику. Подобный запрос очень похож на случай, когда один человек один раз за длительное время ввел с ошибкой, а из этого начинают строить целые теории. Чтобы в одном слове использовать буквы из разных языков, надо как минимум переключить раскладку клавиатуры. Разве что введут неверно все слово, потом заметят и попытаются исправить, не трогая буквы с общим написанием.
На самом деле примеров куча. Проблемная буква - "с", что в кириллице, что в латинице, ещё и на одной кнопке. Начинаешь набирать слово на букву "С", замечаешь неправильную раскладку на 5-ой букве, бэкспейсом удаляешь неправильно введённые символы, а первую "с" на автомате оставляешь, она правильная (блондинкам всё равно, выглядит-то одинаково). Или вот ещё пример из жизни. Прислали справочник деталей в Excel'е, 50% деталей на русскую букву "А" написаны с латинской "A" ("Эй"). Как так можно?
А самый простой способ - Punto.
We are hard at work… for you. :)
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2301
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 17 раз

Программа для блондинок

Сообщение Губин Игорь »

kreator писал(а): 50% деталей на русскую букву "А" написаны с латинской "A" ("Эй"). Как так можно?
ЛЕГКО!
З = 3, О = O = 0, I = l = 1 и т.д. и т.п.
Это я только кажусь дураком! На самом деле я полный идиот!
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Программа для блондинок

Сообщение Yufil »

эээ... в старые добрые времена, когда компьютеры были большими, а дисплеи-маленькими, в MS DOS я некоторое время пользовал драйвер клавиатуры (в MS DOS можно было установить русскую кодовую страницу, но можно было и использовать сторонний драйвер), в котором кириллические и латинские буквы выглядели по-разному (грубо говоря, латиница была жирного начертания). Там латинские буквы в тексте очень наглядно выделялись.

Мэй би взять редактор шрифтов и изготовить что-то подобное ?
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Программа для блондинок

Сообщение finsoftrz »

Пользователи говорят, что подобные ошибки бывают, но не напрягают.
Тем не менее, тема заинтересовала, накидал тот вариант, про который писал в предыдущем своем посте.
Вложения
fsoptstda_FsTestStrRusLat_S.jpg
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Программа для блондинок

Сообщение Игорь Столяров »

Круто ! То, что надо. К сожалению, несколько выше моего уровня знаний работы с RTF. Исходник секретен ? ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Программа для блондинок

Сообщение 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

C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Программа для блондинок

Сообщение Игорь Столяров »

Спасибо ! :) Буду разбираться ...
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Программа для блондинок

Сообщение Игорь Столяров »

Уря ! Все получилось.
Здесь как раз тот случай, когда "Остап играл в шахматы второй раз в жизни",
поэтому я с RTF сделал простейший вариант - без редактирования (просто показываем проблемы).

Еще раз спасибо за идею и реализацию !
KeyBoardCheck.jpg
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Программа для блондинок

Сообщение Admin »

Игорь Столяров писал(а): за идею
А вот тебе еще идея - кнопка замены всех букв нужными аналогами с другой раскладки.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Программа для блондинок

Сообщение Игорь Столяров »

Да, эта идея очевидна - она показана на снимке экрана finsoftrz ...

Но в моем случае это излишне по двум причинам:

- Я действительно никогда раньше не работал с RTF полями ... даже не смог перевести обратно строку RTF в текст.

- Реальные ошибки чаще всего, все-таки делают конечно же не в тексте (ну кому надо переключать раскладку посреди слова ?)
Ошибаются при наборе кодировок (артикул или маркировка товаров), а там все-таки лучше исправлять вручную.

Главное - показать наличие проблемы, что в общем-то и сделано. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4562
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Программа для блондинок

Сообщение finsoftrz »

На мой взгляд, идею Админ подсказал хорошую. У меня на скриншоте кнопки навигации между ошибками в исправляемом тексте (текст rtf тоже в readonly). Сейчас еще там добавлена кнопка повторной проверки без закрытия окна.
Реализовать очень просто. В рутинке проверки заполняется очередь позиций с латиницей. Добавить туда еще поле статуса, чтобы отличать буквы в составе слов с ошибкой (подсвечиваться могут и полные слова на латинице). А дальше остается задать две строки с соответствием символов. А уж юзер пусть смотрит сам, нужно ему корректировать вручную или автоматом. Ситуация может быть и обратная - русские буквы внутри английских слов...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Программа для блондинок

Сообщение Игорь Столяров »

Я сделал просто динамическое обновление RTF строки при наборе текста - и не нужны кнопки поиска ошибок.
Что было бы классно сделать - так это загрузка исходной строки в RTF с раскраской, редактирование и сохранение обратно в текст.
Тогда не надо было делать 2 поля в окне и сам процесс редактирования строки был бы более естественным ...
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить