Ozon.ru
Flash-MX.ru: Форум о Flash - Not logged in
Forum На главную Help Search Login
Previous Next Up Topic Flash CS3, Flash 8, Flash-MX 2004, Flex / Как сделать на flash ... ? / русские буквы в Input text в прозрачном SWF? (24250 hits)
- By superatik Date 22-06-05 08:30
как сделать русские буквы в Input text в прозрачном SWF?

Убираю   <PARAM NAME=WMODE VALUE="transparent">
все нормально... как ставишь ... сразу по русски криво пишет ...
не помогает даже если проэмбедить...
Parent By DeliMIter   модератор Date 22-06-05 14:57
Широко известный баг без решения.
Убивать не удовольствия ради - но для еды!
Parent - By Nox Noctis (hero) Date 22-06-05 21:38
похоже никто не в курсе как это решается или обходится :(

на макромедии об этом ни слова, как ни странно...

искал в сети какую-нибудь инфу неоднократно - везде только вопрос без ответов.

в архивах flashcoders что-то не нашел такой темы...
может невнимательно искал?

можно еще в архивах ruFlash пошарить, но там, насколько я знаю, только аналогичные высказывания по поводу данной проблемы.
http://vtulka.mybrute.com
Parent By superatik Date 23-06-05 05:03
нда ни там ни здесь этого нет совсем :(
а как можно все это решить? есть какой нибудь выход?
Или все же прийдётся делать фон непрозрачным?
Parent - By superatik Date 23-06-05 06:11
хотя если использовать Копировать/Вставить все работает :)
но это не выход...
может каким нибудь макаром при нажатии пихать буковку в буфер сначала а потом в текстовое поле :)
Parent - By Nox Noctis (hero) Date 23-06-05 08:34 Edited 11-07-07 14:10
о. придумал что делать.
всё же просто на самом деле...
МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
 //
 // заплатка, устраняющая проблему неправильного написания русских символов
 // в инпутных полях, при прозрачном фоне флэшки в хтмл
 // (wmode="transparent")
 //
 TF.onChanged = function()
 {
   if (this.text.indexOf(chr(4)) == -1) {
     return;
   }
   var broken:Array = this.text.split(chr(4));
   var caretIndex:Number = Selection.getCaretIndex()-broken.length+1;
   for (var i = 1; i<broken.length; i++) {
     broken[i] = String.fromCharCode(1024+broken[i].charCodeAt(0))+broken[i].substr(1);
   }
   this.text = broken.join("");
   Selection.setSelection(caretIndex,caretIndex);
 };
 // где TF - это ссылка на инпутное текстовое поле


проблема в том что двухбайтовый код символа (по UTF-8), пришедший с клавиатуры, флэш воспринимает как два символа по одному байту. баг. в результате этого вместо, к примеру, русского символа "А", c кодом 1040 (\u0410) мы видим два символа, с кодами 4 (\u0004) и 16 (\u0010). что есть косяк :)

надо любым удобным тебе способом отлавливать такие последовательности символов и делать из них один нормальный символ UTF-8.

данная заплатка будет работать только для символов, первый байт кода которых 04 (это символы начиная с кода 1024 и до кода 1280). т.е. на русские символы хватает с лихвой. плюс к этому я исхожу из того что символа с кодом 4 у тебя в тексте быть не может. что скорее всего так, ибо символ не печатный и вообще служебный.

делать универсальную заплатку для разных языков мне, честно говоря, лень. :) если кому не лень - пользуясь описанной закономерностью это вполне можно сделать.

эта заплатка будет работать только при неподключенном к текстовому полю шрифте.
эта заплатка из броузеров работает только в Internet Explorer'е, но помогает также и в проекторах.
говорят, заплатка работает в Zinc.
в ruFlash пишут, что помогает и в mProjector.
http://vtulka.mybrute.com
Parent - By superatik Date 23-06-05 08:54
супер...
Спасибо большое ... :)
Parent - By Nox Noctis (hero) Date 27-06-05 16:55
и всё же это решает проблему лишь наполовину...
данная заплатка будет работать только при неподключенном к текстовому полю шрифте. иначе символ с кодом 4 в текстовое поле просто не попадет, и в переменной text этого поля такой символ не окажется. соответственно заплатка работать не будет.

как сделать то же самое при подключенном шрифте - пока не знаю. а обычно ведь именно это и требуется :(
http://vtulka.mybrute.com
Parent - By Nox Noctis (hero) Date 28-06-05 08:39 Edited 28-06-05 14:15
пока видится два варианта для поля с подключенным шрифтом, оба не идеальны:

1.
при установке фокуса в текстовое поле - просто отключаем шрифт. при снятии фокуса - включаем обратно.
МинимизироватьПо высоте текста
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
 //
 // заплатка для текстового поля с подключенным шрифтом
 //
 TF.onSetFocus = function()
 {
   this.embedFonts = false;
 };
 TF.onKillFocus = function()
 {
   this.embedFonts = true;
 };
 TF.onChanged = function()
 {
   var broken = this.text.split(chr(4));
   for (var i = 1; i<broken.length; i++) {
     broken[i] = String.fromCharCode(1024+broken[i].charCodeAt(0))+broken[i].substr(1);
   }
   this.text = broken.join("");
 };
 // где TF - это ссылка на инпутное текстовое поле


2.
отлавливать нажатия клавиш. здесь куча проблем:
- методы объекта Key определят не код символа, а всего лишь код кнопки
- после этого надо определить какой язык сейчас включен у пользователя
- и после этого надо сопоставить коды кнопок и коды символов в русской раскладке
- а если речь не о русском языке - надо взять соответствующую раскладку

к тому же Ив говорит что на маках есть какой-то мистический баг с определением кодов клавиш.
http://vtulka.mybrute.com
Parent By Iv (*) Date 28-06-05 14:12
на маках вообще флэшовой жизни нет :)
а если и есть, то ооочень нетороплииивая.
я действительно однажды год-два назад пытался сделать возможность ввода на маке.
вполне успешно отлавливал Key, фокус, предыдущий символ и заменял его на нужный.
уперся в то, что две буквы (если бы одна, то еще куда ни шло), кажется это были "я" и "r"
просто не отдавали свой код. гады.
так и забросил это дело.
iv
Parent By Iv (*) Date 28-06-05 14:24
как варианты:
на onKeyUp(Down) проверять что за клавиша была,
получать Selection.getCaretIndex
вроде как пердыдучий символ-два были введены
и насильничать их по полной.
можно сохранять в отдельной переменной значение текстового поля
и сравнивать с тем, что стало после нажатия клавы.
вычленять гадости и обрабатывать.
если не изменилось, отлавливать ASCII код кнопы
и вообще всё что можно придумать.
если нужны включенные шрифты, можно попробовать писать в текст поле
без включенных шрифтов и за пределами сцены, а показывать с включенными
на сцене. типа с фокусом поиграться.
а дальше по схеме Nокса.
iv
Parent - By timoshenkov Date 17-01-06 13:34
а почему в мозиле и опере это не работает?

если нажать букву "ю" то все впорядке, а если к примеру "т" то появляется "n"? то есть там где на клаве есть английские буквы высвечиваются именно они.
Parent By Nox Noctis (hero) Date 20-01-06 18:06
гм. и правда.
в опере передаются английские символы...
надо подумать.
http://vtulka.mybrute.com
Parent By Nox Noctis (hero) Date 20-01-06 18:20
я не вижу способа определить в мозилле, на каком языке был ввод.

коды символов, попадающих в текстовое поле, одинаковы для английского и для русского языков. соответственно, применять к ним такую заплатку - бессмысленно.

остается сделать переключатель языков прямо во флэшовом приложении.
отлавливать коды с клавиатуры и переводить их в символы.
но это напильником из пластилина.

адекватный вариант - отказаться от прозрачного бэкграунда ролика.
http://vtulka.mybrute.com
Parent - By White   модератор Date 17-01-06 15:05
Насколько я помню, прозрачность работает только в эксплорере и по этому её лучше вообще не использовать. Верно?
eval я ваши аргументы
Parent - By Fisher Date 17-01-06 16:01
да нет - в фоксе тож работает прозрачность если в эмбэд прописать параметр
Parent - By White   модератор Date 17-01-06 16:06
а какой сокровенный смысл использования прозрачности?
eval я ваши аргументы
Parent - By timoshenkov Date 17-01-06 21:06
в маем случии, это шапка сайта, там выпирает картинка сильно в одном месте.
так вот что бы не терять место на экране, флешка с прозрачным фоном.
Это знаешь как билборды на улице с высунутыми головами или руками за край :)

Вот на этой шапке форма поиска и глючит, гадина.
Parent By White   модератор Date 18-01-06 08:52
Я конечно не знаю, что уж ты там намудрил, но может просто сделать (организовать) так чтобы ничего не вылезало? Или вылезало по-другому :)
И, собственно, зачем делать поиск в шапке и на флэше? Неужели хтмл'ьные поисковики плохо работают?
eval я ваши аргументы
Parent - By timoshenkov Date 17-01-06 21:03 Edited 17-01-06 21:09
я что за параметр?
можно пример, а то мучаюсь сильно.
спсб.

или ты про прозрачность в броузере что она работает?
Parent - By Fisher Date 17-01-06 21:08
<embed wmode="transparent"> это для мозиловских движков
<param name="wmode" value="transparent" /> для эксплорера
Parent By timoshenkov Date 17-01-06 21:10
не это я знаю, я думал embed в текстовом поле для шрифтов
Previous Next Up Topic Flash CS3, Flash 8, Flash-MX 2004, Flex / Как сделать на flash ... ? / русские буквы в Input text в прозрачном SWF? (24250 hits)
 

с 19.04.2006 Надежные металлические двери белоруссии от производителя. . В интернет-магазине отличная швейная машинка купить со скидкой. . гостиница на мужества . . номер в гостинице на час .

Page created in 0.104s with 16 database queries.