Конференция "KOL" » Ввод китайского текста в unicode_ctrls [Delphi]
 
  • Vladimir Kladov © (08.05.10 22:31) [0]
    Мне тут один китайский (судя по всему, иначе зачем оно ему) товарищ письмо недавно писал. Возник вопрос с проблемой ввода некоторых китайских иероглифов в мемо в приложении KOL, с опцией unicode_ctrls. Я попробовал, установил азиатские языки, перечисленные иероглифы действительно не вставлялись. Правда, я вообще не сумел на своей клавиатуре их набирать, поэтому скачал NJStarChineesePen (кажется, так оно называлось), рисовал мышкой на экране. Что-то вставлялось, а эти два ни в какую. Потом я поменял шрифт в мемо на Arial, стало вставляться. Отписал товарищу, он у себя попробовал - не вышло. Может, кто еще попробует? Символы такие: " 三,有". (Если у вас квадратики, установите азиатские языки, потребуется +200 Мб на системном диске). Еще он намекал, что вот в наборе VCL-контролов Tnt Delphi Unicode Controls все работает, в сети их найти мне удалось, вроде бы какие-то намеки в коде есть, надо смотреть.
  • MTsv DN (08.05.10 22:45) [1]
    Vsè normal'no rabotaet, esli CharSet i Font pravil'nij ustanovit'.
  • Jon © (09.05.10 05:08) [2]
    This is how I got it to work:


    program zh_memo;

    uses
    KOL;

    var
     Memo, Btn1, Btn2: PControl;

    procedure Click1(Dummy: Pointer; Sender: PObj);
    begin
     Memo.Add(#19977); // 三 = 19977 , $4E09
    end;

    procedure Click2(Dummy: Pointer; Sender: PObj);
    begin
     Memo.Add(#26377); // 有 = 26377 , $6709
    end;

    begin
     Applet := NewForm(nil,'Chinese Memo').SetClientSize(220,240);
     Memo := NewEditBox(Applet,[eoMultiline]);
     Memo.Color := clWindow;
    //  Memo.Font.FontName := 'Arial';
     Btn1 := NewButton(Applet,'Char 1').PlaceUnder;
     Btn1.OnClick := TonEvent(MakeMethod(nil,@Click1));
     Btn2 := NewButton(Applet,'Char 2').PlaceRight;
     Btn2.OnClick := TonEvent(MakeMethod(nil,@Click2));
     Run(Applet);
    end.

  • L`Autour (09.05.10 07:23) [3]
    нужно использовать универсальный шрифт 'MS Arial Unicode'
  • MTsv DN (09.05.10 10:58) [4]
    Владимир, все работает. А какая у товарисча дельфи?
  • Vladimir Kladov © (09.05.10 21:05) [5]
    Так и у меня вроде работает (еще бы знать как клавиатурой набрать один из этих символов). Delphi неважно какая, лишь бы unicode_ctrls поддерживала. Вот и я удивляюсь насчет charset'а, если он default, то при родном китайском языке должен был бы быть правильный.

    Но, кстати, вставлять символы методом ctrl+C/ctrl+V неправильно, так оно в любом случае работает, и работало с MS Sans Serif, тогда как с NJ Star Chinese Pen не работало у меня, а заработало с Arial.

    Не думаю, что совет использовать шрифт MS Arial Unicode хорош. В семерке, например, такого шрифта в системе нет (Ultimate), и в XP тоже как бы нет.

    2Jon: your project is interesting, but this seems that problem is not in adding characters directly to the memo but in handling keyboard messages by the window itself. So, though buttons are inserting characters correctly, NJStar Ch.Pen failed to insert 三 character in the same application.

    Кстати, в Win7 этот фокус с подменой шрифта и даже charset'а (пробовал 134 и 136) уже не прокатывает, хотя китайский шрифт виден изначально. В XP получилось, видимо, потому, что я принципиально не видел китайских иероглифов, вместо них отображались квадратики, соответственно, я добавил поддержку азиатских языков. Тогда появились иероглифы и после замены шрифта на Arial пошло. А на Win7 я теперь не знаю, что добавить, чтобы пошло - не действует ни Arial, ни установка charset'а. Замечу, что в Word эти символы вставляются при этом - через тот же NJ Star CPen.
  • Jon © (10.05.10 00:41) [6]
    If you find the symbol in "Character Map" (charmap.exe) then you can drag and drop it onto applications such as WordPad/Write - but I cannot work out how to do it with a KOL app.
  • Jon © (10.05.10 04:21) [7]
    Please ignore my last comment - it works if I replace NewEditBox with NewRichEdit
  • Vladimir Kladov © (10.05.10 05:54) [8]
    I understand but problem is in working with usual memo and edit box. Imagine that you write usual application supporting Unicode. It has a lot of input fields (edit boxes, memo, etc.) It is working for all people in the World except Chinese. Is it good? Will you use always Rich Edit to enter text data everywhere in the app just to fix this incorrect behavior? I think no.

    And about using Ch Map, copy/paste and so on. Imagine that your computer no more understands letters u and w when you type it from the keyboard. You still can insert it using clipboard, character map, virtual on-screen keyboard and may be other external tools. Will you feel yourself comfortable? I think no. Chinese people most time do not need Latin alphabet, they are using their own language. If the application does not support just a few hieroglyphs the application will not be very useful for them anyway.

    Перевожу для удобства русских посетителей. Ввод некоторых китайских символов не работает при вводе с клавиатуры в memo и edit box, в режиме компиляции с Unicode. Приложение компилировалось с этой опцией в уверенности, что будут автоматически восприниматься все языки мира, в худшем случае придется включить поддержку соответствующих групп языков (но у носителей языков такая поддержка в системе уже обычно установлена, т.е. по идее, им вообще ничего не надо делать, бери и пользуйся). Но, к сожалению, некоторые буквы, т.е. иероглифы, оказывается, нельзя ввести с клавиатуры. Как бы мы отнеслись к программе, которая не печатает с клавиатуры всего пару букв, например, у и ъ ? Можно, конечно, вставлять эти символы из буфера обмена, из Таблицы Символов (Character Map), вводить с виртуальной клавиатуры или еще каким-то способом, но согласитесь, что это совершенно неудобно, и приложение лишится большой дополнительной аудитории (в смысле числа пользователей). Это хорошо? Это плохо. Вот.
 
Конференция "KOL" » Ввод китайского текста в unicode_ctrls [Delphi]
Есть новые Нет новых   [134431   +6][b:0][p:0.001]