Страница 1 из 1

RtfControl.GetText() возвращает текст вопросиками

Добавлено: 05 Июль 2011, 13:58
ThePPK
Добрый день!

Работаем с Clarion 6.1. После вызова GetText(myText,0,1000) в myText русский текст попадает в виде знаков вопроса: '?', при этом цифры, английские буквы и знаки попадают нормально. Наверное, это проблемы с кодировкой. Как такое можно обойти?

Спасибо!

Re: RtfControl.GetText() возвращает текст вопросиками

Добавлено: 05 Июль 2011, 16:12
Губин Игорь
Решается принудительным переключение в поле RTF на русский язык (можно перед копированием)

Код: Выделить всё

    CASE FIELD()
    OF ?RTFString
      CASE EVENT()
      OF EVENT:Selected
            SwitchKBD(Russian)
У меня это делается при выборе поля, но это специфическое решение, т.к. идёт потоковый перевод базы из RTF в обычный текст

Код: Выделить всё

SwitchKBD   Procedure(KBDLayout)
AKL  Unsigned
TMP  CSTRING(20)
    Code
        i# = GetKeyboardLayoutNameA(Tmp)
        if Clip(Tmp) <> Clip(KBDLayout)
            AKL = ActivateKeyBoardLayout(1,0)
        end

Код: Выделить всё

        SwitchKBD(String)
Latin       CSTRING('00000409')
Russian  CSTRING('00000419')

Re: RtfControl.GetText() возвращает текст вопросиками

Добавлено: 05 Июль 2011, 21:25
ThePPK
Игорь, огромное Вам спасибо, все получилось!! :-)

Re: RtfControl.GetText() возвращает текст вопросиками

Добавлено: 05 Июль 2011, 21:59
Артур
Игорь, подскажи пожалуйста где документированы функции, которые ты использовал?

Re: RtfControl.GetText() возвращает текст вопросиками

Добавлено: 05 Июль 2011, 22:35
Губин Игорь
MSDN

MODULE('')
GetKeyboardLayoutList(SIGNED,*UNSIGNED),SIGNED,PASCAL,RAW
ActivateKeyboardLayout(UNSIGNED,UNSIGNED),UNSIGNED,PASCAL
GetKeyboardLayoutName(*LPSTR),BOOL,PASCAL,RAW,NAME('GetKeyboarfLayoutName')
GetKeyboardLayout(DWORD),UNSIGNED,PASCAL
GetKeyboardLayoutNameA(*LPSTR),BOOL,PASCAL,RAW
End

http://msdn.microsoft.com/en-us/library/ms646289

На самом деле функция SwitchKBD не совсем доделана, она рассчитана только на две раскладки, но там всё просто переделать если их у тебя несколько.

А использовал не я. Функцию SwitchKBD я позаимствовал у кого-то из наших коллег.

Re: RtfControl.GetText() возвращает текст вопросиками

Добавлено: 06 Июль 2011, 12:53
Артур
Спасибо за исчерпывающий ответ