Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.02.05;
Скачать: [xml.tar.bz2];

Вниз

Ввод в TЕdit руками или сканером штрихкода.   Найти похожие ветки 

 
Laguna ©   (2011-10-24 13:12) [0]

Возможно ли как то определить чем был произведен ввод в TEdit руками с клавиатуры или сканером штрихкода?


 
Ega23 ©   (2011-10-24 13:16) [1]

Сканнер штрихкода не "выводит" в TEdit


 
Dennis I. Komarov ©   (2011-10-24 13:16) [2]

если считать время ввода, то можно...


 
Dennis I. Komarov ©   (2011-10-24 13:17) [3]


> считать

->е (Упс...)


 
Inovet ©   (2011-10-24 13:33) [4]

> [2] Dennis I. Komarov ©   (24.10.11 13:16)
> если считать время ввода, то можно...

А копипаст отлавливать?


 
Ega23 ©   (2011-10-24 13:37) [5]

ИМХО.
Если возникают такие вопросы, то в архитектуре проекта явный бардак.
Рекомендую посмотреть в сторону UML DFD (DataFlow Diagramm) и разрисовать всё как надо.


 
Dennis I. Komarov ©   (2011-10-24 13:42) [6]


> Inovet ©   (24.10.11 13:33) [4]

нефиг вообще туда пастить :)


 
RWolf ©   (2011-10-24 14:32) [7]


> Ega23 ©   (24.10.11 13:16) [1]
> Сканнер штрихкода не "выводит" в TEdit

сканер, подключаемый в клавиатурный разъём, будет выводить туда, куда юзер поставит текстовый курсор.


 
Laguna ©   (2011-10-24 14:38) [8]


> сканер, подключаемый в клавиатурный разъём, будет выводить
> туда, куда юзер поставит текстовый курсор.


Совершенно верно. Просто в случае отсутствия сканера предлагается ввод вручную. Хочется отловить , чтобы не вводили сканером в поле, предназначенное для ручного ввода с последующей обработкой.


 
Омлет ©   (2011-10-24 14:45) [9]

> Laguna ©   (24.10.11 14:38) [8]
> Просто в случае отсутствия сканера предлагается ввод вручную. Хочется отловить , чтобы не вводили сканером в поле, предназначенное для ручного ввода с последующей обработкой.


Вам на архитектуру уже намекнули. Как вообще у вас сканер может не-в-то-поле ввести номер?


 
Rouse_ ©   (2011-10-24 15:41) [10]

Сканера под рукой нет, проверить неначем, но теоретически должен сработать след подход: при добавлении символа в EDIT проверяй, нажата ли соответствующая клавиша через GetKeyState()


 
OW ©   (2011-10-24 15:46) [11]

частота onChange
+ увеличение length(text)


 
Laguna ©   (2011-10-24 15:55) [12]


> Вам на архитектуру уже намекнули. Как вообще у вас сканер
> может не-в-то-поле ввести номер?


Потому что я уже писал, что для ввода вручную чвое поле ввода, для сканера - свое. Каждое поле обрабатывается по своему. Точнее допустим для сканера Edit1, а для ручного ввода Edit2. Основная операция обработки происходит на onChange  для Edit1

procedure TScanFrm.Edit1Change(Sender: TObject);
begin
 if Length(Edit1.Text) = KolDigit then
  begin
    if Copy(Edit1.Text, 1, 3) <> IntToStr(LotRec.Nom) then
     begin
       DublBlink;      
       Edit1.SetFocus;
       Edit1.SelectAll;
       Exit;
     end;
    if not DM1.NotrelizTbl.FindKey([LRec.Kod, LRec.Nom, B_SNom]) then
     DM1.NotrelizTbl.InsertRecord([Nil, LRec.Kod, LRec.Nom, B_SNom])
    else
     begin
//        WarnMsg("Дублирование записи !");
       DublBlink;
       Edit1.SetFocus;
       Edit1.SelectAll;
       Exit;
     end;
    LoadTir;
    Edit1.SetFocus;
    Edit1.SelectAll;
  end;
end;



procedure TScanFrm.Edit2Change(Sender: TObject);
begin
 if Length(Edit2.Text) = KolDigit then
  PostMessage(Handle, WM_NEXTDLGCTL, 0, 0);
end;


Дополнительно хочу чпросить, точнее указать на засаду. Если после входа в обработку после сканера вызвать MessageBox? то окно его не появляется, кнопка вроде как сама нажимается, поэтому делаю просто подстветку поля рамкой красной (procedure DublBlink)

> при добавлении символа в EDIT проверяй, нажата ли соответствующая
> клавиша через GetKeyState()


А как определить какую клавтшу отлавливать? Ведь сканируются разные наборы цифр.


 
Медвежонок Пятачок ©   (2011-10-24 16:04) [13]

частота onChange
+ увеличение length(text)


+ и. интеллект на юзерский "копи-пасте"


 
OW ©   (2011-10-24 16:10) [14]


> + и. интеллект на юзерский "копи-пасте"

там чендж один раз только будет, а длина на много единиц увеличится.

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


 
Laguna ©   (2011-10-24 16:13) [15]

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

ps
по поводу самозакрывающегося окна , походу на ShowMEssage кнопка стоит в фокусе, поэтому и закрывается после сканера.


 
Laguna ©   (2011-10-24 16:16) [16]


> там чендж один раз только будет,


Нет, Change происходит на каждом добавлении символа, поэтому и придумана вот такая хитринка
if Length(Edit1.Text) = KolDigit then...
а до этого крутится пока условия не совпадут. (это я имею ввиду после считки сканером. Хотя с клавы тоже самое будет)


 
Rouse_ ©   (2011-10-24 16:52) [17]


> А как определить какую клавтшу отлавливать? Ведь сканируются
> разные наборы цифр.

как какую? которая в OnKeyPress приходит...


 
DiamondShark ©   (2011-10-24 18:22) [18]

Удалено модератором


 
DiamondShark ©   (2011-10-24 18:28) [19]


> Laguna ©   (24.10.11 13:12) 
> Возможно ли как то определить чем был произведен ввод в
> TEdit руками с клавиатуры или сканером штрихкода?

Если сканер клавиатурный, включён в разрыв в один порт с клавиатурой, то практически никак. Теоретически, можно ловить скорость ввода, или настроить сканер на передачу символов префикса/суффикса и ловить по ним.

Если сканер подключён в отдельный порт (USB, сканер определяется как HID), то, возможно, ОРД спасёт RAW Input (WinXP и выше):

http://msdn.microsoft.com/en-us/library/ms645536(v=VS.85).aspx

Можно определять с какого экземпляра HID пришёл ввод.


 
DiamondShark ©   (2011-10-24 18:30) [20]


> Rouse_ ©   (24.10.11 16:52) [17]
> которая в OnKeyPress приходит.

Когда OnKeyPress приходит, никакая клавиша уже не нажата.


 
Dimka Maslov ©   (2011-10-24 18:47) [21]


> Когда OnKeyPress приходит, никакая клавиша уже не нажата.


Сначала приходит KeyDown, потом KeyPress (он может повторяться если кнопка нажата и не отпускается), потом только KeyUp. Так что способ вполне себе проходной.


 
QAZ   (2011-10-24 19:30) [22]

самое тупое во всем этом,так это наличие 2х едитов + разная обработка
а еще ктото гонит на интелект пользователей...


 
Rouse_ ©   (2011-10-24 19:37) [23]


> DiamondShark ©   (24.10.11 18:30) [20]
> Когда OnKeyPress приходит, никакая клавиша уже не нажата.

Заучи как мантру: "я буду всегда делать RTFM прежде чем постить глупость"

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if GetKeyState(Integer(Key)) <> 0 then
   Memo1.Lines.Add("KeyDown")
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if GetKeyState(Integer(UpperCase(Key)[1])) <> 0 then
   Memo1.Lines.Add("KeyStillDown");
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 Memo1.Lines.Add("KeyUp");
end;


 
DiamondShark ©   (2011-10-24 20:38) [24]

Удалено модератором


 
Rouse_ ©   (2011-10-24 20:44) [25]


> DiamondShark ©   (24.10.11 20:38) [24]

Похоже хорошего языка ты не понимаешь, так и запишем...


 
DiamondShark ©   (2011-10-24 20:51) [26]


> Rouse_ ©   (24.10.11 20:44) [25]

Как носом ткнули, так сообщения трёшь? Ой, красота какая.


 
DiamondShark ©   (2011-10-24 20:57) [27]

Повторяю для тех, кто в танке.

К моменту прихода OnKeyPress никакая клавиша уже может быть не нажата, хотя предложенный любителем мантр код радостно сообщит, что клавиша нажата.

Теперь посмотрим, как любитель мантр придерётся к языку и сотрёт и это сообщение.


 
Rouse_ ©   (2011-10-24 20:57) [28]


> DiamondShark ©   (24.10.11 20:51) [26]
> Как носом ткнули, так сообщения трёшь? Ой, красота какая.

Ткни еще раз, только перед этим перечитай внимательно выделенное тобой и осмысли остатком мозга.
Еще раз допустишь подобные высказывания - получишь профилактику...


 
Rouse_ ©   (2011-10-24 20:59) [29]


> DiamondShark ©   (24.10.11 20:57) [27]
> К моменту прихода OnKeyPress никакая клавиша уже может быть
> не нажата

А не кажется ли тебе что выражения "не нажата" и "может быть не нажата" - немного разные понятия, или это одно и то-же?


 
Rouse_ ©   (2011-10-24 21:00) [30]

И на последок, даже если клавиша не нажата, это как-то воспрепятствует прохождению стандартной цепочки (down/press/up) ?


 
DiamondShark ©   (2011-10-24 21:29) [31]


> Rouse_ ©   (24.10.11 20:57) [28]

Давай ты начнёшь сам следовать своим советам (на счёт остатков мозга, например, или там языка). Ну, или вспомнишь, о чём идёт речь в теме. Ещё бы хорошо не приплетать то, о чём вообще речь не шла (о последовательности сообщений, например).

Если до тебя не доходит написанное (а как оно может дойти, когда попоболь и кнопка под рукой), то модифицируй свой код вот так:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if GetKeyState(Integer(Key)) <> 0 then
   Memo1.Lines.Add("KeyDown");
 sleep(100500);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if GetKeyState(Integer(UpperCase(Key)[1])) <> 0 then
   Memo1.Lines.Add("KeyStillDown");
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 Memo1.Lines.Add("KeyUp");
end;

Нажми клавишу коротко и осмысли происходящее.

Ну вот именно это и было написано в стёртом тобой тексте.

Теперь давай вспомним, что речь у нас идёт не о клавиатурах, а о сканерах, точнее, о различении сканеров и клавиатур.
Пропускной способности интерфейсов (USB 2.0, например) вполне хватает, чтобы послать пару "нажато"-"отпущено" с такой скоростью, что приложение даже пол-цикла message pump-а выполнить не успеет.
Так что к моменту выборки WM_CHAR из очереди потока "клавиши" (т.е. внутреннее состояние HID-драйвера) будут "отпущены".

Но твой мантровский код радостно сообщит, что клавиша нажата.


 
Rouse_ ©   (2011-10-24 21:44) [32]


> sleep(100500);

А че так мало?
А теперь выкинь всю бредятину из головы, поставь слип в своем коде на 1000 например, нажми кнопку и отпусти, дождись реакции кода. В момент прихода сообщения мы узнаем о том, была клавиша нажата или нет на момент прихода сообшщения?
Теперь выключи, как ты говоришь "попоболь" и ответь мне на вопрос: мой вариант даже с искусственно созданными тобой проблемами не отвечает на поставленный автором вопрос?


 
Rouse_ ©   (2011-10-24 21:46) [33]

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


 
Laguna ©   (2011-10-24 22:16) [34]

> QAZ   (24.10.11 19:30) [22]

> самое тупое во всем этом,так это наличие 2х едитов + разная
> обработкаа еще ктото гонит на интелект пользователей...


Ну и в чем конкретно тупость? Есть лучший вариант?


 
Rouse_ ©   (2011-10-24 22:22) [35]


> Laguna ©   (24.10.11 22:16) [34]
> Ну и в чем конкретно тупость? Есть лучший вариант?

Желательно избегать неоднозначности. Мы в свое время делали след образом: отдельная кнопка, по нажатию которой выводился диалог с надписью что-то типа: "ожидаем ввода сканера", в котором блокировался ввод с клавиатуры за исключением Esc.
В диалоге и снимался сам ввод, таким образом и пользователю было понятно что делать и не нужно было городить разграничение с фокусом ввода...


 
DiamondShark ©   (2011-10-24 22:39) [36]


> Rouse_ ©   (24.10.11 21:44) [32]
> А че так мало?

Шоб ты спросил.
Поставь туда свою оценку разницы скорости своего пальца и посылки двух кодов друг за другом по ЮСБ.


> А теперь выкинь всю бредятину из головы, поставь слип в
> своем коде на 1000 например, нажми кнопку и отпусти, дождись
> реакции кода.

Это ты у сканера попроси дождаться реакции твоего кода.

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


> В момент прихода сообщения мы узнаем о том, была клавиша
> нажата или нет на момент прихода сообшщения?

Не прошло и пол-суток, как ты соизволиил сделать попытку прочитать и перевести цитату из TFM.
К сожалению, низачот. Попробуй ещё раз.


> Теперь выключи, как ты говоришь "попоболь" и ответь мне
> на вопрос: мой вариант даже с искусственно созданными тобой
> проблемами не отвечает на поставленный автором вопрос?

Отвечаю: не отвечает.


 
DiamondShark ©   (2011-10-24 22:43) [37]


> Rouse_ ©   (24.10.11 22:22) [35]
> Мы в свое время делали след образом: отдельная кнопка, по
> нажатию которой выводился диалог с надписью что-то типа:
>  "ожидаем ввода сканера", в котором блокировался ввод с
> клавиатуры за исключением Esc.В диалоге и снимался сам ввод,
>  таким образом и пользователю было понятно что делать и
> не нужно было городить разграничение с фокусом ввода...

Т.е. вы в своё время решили не задачу прикладной области, а какую-то свою собственную проблему.


 
KilkennyCat ©   (2011-10-24 22:43) [38]

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


 
Rouse_ ©   (2011-10-24 22:44) [39]


> DiamondShark ©   (24.10.11 22:39) [36]
> Если ты не понимаешь, что аппаратные события происходят
> абсолютно независимо от реакции твоего кода, что моменты
> выборки сообщений не имеют ничего общего с моментами наступления
> событий и что возвращает GetKeyState, то я тебе не доктор.

Ага, я понял о чем ты, мдя... :)
Т.е. ты реально думаешь что событие сгенеренное сканером придет вне очереди сообщений и соответственно все АПИ, относящиеся к ней пойдут лесом?


 
Anatoly Podgoretsky ©   (2011-10-24 22:44) [40]

> Rouse_  (24.10.2011 21:46:33)  [33]

Ну так просто, открой если считаешь нужным, но вы уже перешли на взаимные
оскорбления.


 
DiamondShark ©   (2011-10-24 22:45) [41]

> Rouse_ ©   (24.10.11 22:22) [35]
Кстати, тут написано враньё.


 
Anatoly Podgoretsky ©   (2011-10-24 22:45) [42]

> Laguna  (24.10.2011 22:16:34)  [34]

Есть, одно поле


 
Rouse_ ©   (2011-10-24 22:47) [43]


> DiamondShark ©   (24.10.11 22:45) [41]
> Кстати, тут написано враньё.

Ты раскрывай тему, родимый - не стесняйся :)


 
Rouse_ ©   (2011-10-24 22:49) [44]


> Anatoly Podgoretsky ©   (24.10.11 22:44) [40]
> Ну так просто, открой если считаешь нужным, но вы уже перешли
> на взаимные оскорбления.

Ну не я ж первый по родственникам прошелся, тяжелые времена пошли, совсем народ с выражениями не стесняется...


 
Laguna ©   (2011-10-24 22:54) [45]

В предложенном варианте что подразумевается под диалогом? Если дополнителная форма - то смысл тот же будет. Просто будет задействована дополнительная форма. Вот с блокированием ввода с клавиатуры  есть над чем подумать.

Сейчас у меня вот так
http://s017.radikal.ru/i441/1110/39/c5c0ed02798b.jpg

http://s45.radikal.ru/i109/1110/74/c64733172f67.jpg

Как правило ручной ввод применяется когда нет в наличии сканера. В принципе можно не опасаться. Каждый Edit отработает нормально. Но кто его знает, если приспичит кому переключиться в ручной режим и подсунуть под сканер. Сегодня не хватило времени на работе полностью проверить все возможные варианты.


 
Anatoly Podgoretsky ©   (2011-10-24 22:57) [46]

> Rouse_  (24.10.2011 22:49:44)  [44]

А зачем разбирать, мол он первый начал, не в песочнице, бить своих и чужих


 
Rouse_ ©   (2011-10-24 22:59) [47]


> Laguna ©   (24.10.11 22:54) [45]
>
> В предложенном варианте что подразумевается под диалогом?
>

Первый


 
Rouse_ ©   (2011-10-24 23:00) [48]

Удалено модератором
Примечание: Ну вот даже так нельзя...


 
DiamondShark ©   (2011-10-24 23:00) [49]


> Rouse_ ©   (24.10.11 22:44) [39]

Ты опять слушаешь свои фантазии, а не то, что я говорю.
Весь АПИ будет работать как часики. Не будет работать твой подход, потому что ты не понимаешь, как работает тот самый АПИ, который ты упоминаешь всуе.


> Rouse_ ©   (24.10.11 22:47) [43]

Дык, формальная логика, класс второй, третья четверть:

> диалог с надписью что-то типа: "ожидаем ввода сканера",
> в котором блокировался ввод с клавиатуры за исключением Esc.

Если вы смогли блокировать ввод с клавиатуры, но принимали ввод сканера, значит вам удалось разрешить проблему различения ввода с клавиатуры и со сканера.
Но диалог вы создавали для того чтобы НЕ РЕШАТЬ (или потому что не СМОГЛИ решить) проблему различения ввода с клавиатуры и со сканера.

Твоя байка содержит внутреннее противоречие. Рыбаки и то лучше сочиняют.


 
Rouse_ ©   (2011-10-24 23:06) [50]


> DiamondShark ©   (24.10.11 23:00) [49]
>
>
> > Rouse_ ©   (24.10.11 22:44) [39]
>
> Ты опять слушаешь свои фантазии, а не то, что я говорю.
> Весь АПИ будет работать как часики. Не будет работать твой
> подход, потому что ты не понимаешь, как работает тот самый
> АПИ, который ты упоминаешь всуе.

Ну тыж не стесняйся - код приводи демонстрирующий невалидность работы данного кода со сканером, что ты как первокурсница ?
А там и поглядим у кого фантазии поболе будет.


> DiamondShark ©   (24.10.11 23:00) [49]
> Если вы смогли блокировать ввод с клавиатуры, но принимали
> ввод сканера, значит вам удалось разрешить проблему различения
> ввода с клавиатуры и со сканера.
> Но диалог вы создавали для того чтобы НЕ РЕШАТЬ (или потому
> что не СМОГЛИ решить) проблему различения ввода с клавиатуры
> и со сканера.

А эт батенька все из-за того, что кто-то леницо читать мануалы от МС по юзабилити, отсюда и рождаются всякого рода нестандартные подходы к построению интерфейса, и неликвидные задачи плана "надо решить как в одно окно будет литься куча данных я мы их должны расфасовывать по смыслу"


 
Laguna ©   (2011-10-24 23:14) [51]


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

Если это камень в мой огород, то да, решается в одной форме, но разграничение принимаемых данных придумано на уровне разных мест ввода. Пока так... а там будет подумать как лучше сделать.


 
Медвежонок Пятачок ©   (2011-10-24 23:16) [52]

Весь гемор из-за того, что пошли по пути наименьшего сопротивления - сканер в режиме "разрыв клавы". Ибо программировать ничего как бы не надо.


 
Юрий Зотов ©   (2011-10-24 23:17) [53]

А зачем вообще все это? Разве не пофиг, откуда в Edit"е взялся штрих-код?


 
Rouse_ ©   (2011-10-24 23:19) [54]


> Юрий Зотов ©   (24.10.11 23:17) [53]
>
> А зачем вообще все это? Разве не пофиг, откуда в Edit"е
> взялся штрих-код?

Ну, если лень перечитывать, то началось все с того что Дима Акуличев зачем-то высказал мнение, что на момент генерирования события о нажатии клавиши, сама клавиша может быть не нажата и поэтому узнать о ее состоянии на момент генерации сообщения не представляется возможным. Ну а дальше как обычно...


 
Юрий Зотов ©   (2011-10-24 23:27) [55]


> Rouse_ ©   (24.10.11 23:19) [54]

Да я не о вас, я о сабже. На фиг надо вообще что-то там различать - не понимаю. Есть Edit (один!), в нем есть штрих-код - и разве не пофиг, откуда он там взялся?


 
Игорь Шевченко ©   (2011-10-24 23:29) [56]


> на момент генерирования события о нажатии клавиши, сама
> клавиша может быть не нажата и поэтому узнать о ее состоянии
> на момент генерации сообщения не представляется возможным


Узнать о состоянии клавиши в момент выборки сообщения из очереди в общем случае невозможно. В этом ничего странного нет.


 
Laguna ©   (2011-10-24 23:33) [57]


> Весь гемор из-за того, что пошли по пути наименьшего сопротивления
> - сканер в режиме "разрыв клавы". Ибо программировать ничего
> как бы не надо.

Так тут выбирать не приходится. Какой сканер есть в наличии с тем и работаем :)

Еще раз про два едита. "Edit для сканера" был придуман, чтобы ввод проходил как бы в фоновом режиме, т.к. ручного вмешательства не будет. И пользователю особо заморачиваться не приходится. Сканируй данные и все. Как говорится что есть, то и считали.


 
Rouse_ ©   (2011-10-24 23:35) [58]


> Игорь Шевченко ©   (24.10.11 23:29) [56]
> Узнать о состоянии клавиши в момент выборки сообщения из
> очереди в общем случае невозможно. В этом ничего странного нет.

Дык на этом собственно затык и произошел...


 
sniknik ©   (2011-10-24 23:36) [59]

> А зачем вообще все это? Разве не пофиг, откуда в Edit"е взялся штрих-код?
не особо удобно когда нужно смотреть где ввод... вот у нас было, "ручной" в поля а сканером где ни попадя вводи и оно инициирует добавление товара в накладную.
т.е. не нужно из пролистывания/сумирования/т.д. что бы ни делали в накладной, где бы ввод не находился, просто провел сканером и товар добавлен и ожидание ввода количества стоит.

без разделения так не получится, у нас был префикс/постфикс при сканерах в разрыв, но это еще для DOS-а, в винде с таким подходом проблемы, и с COM портом в винде.


 
Laguna ©   (2011-10-24 23:38) [60]

Я ничего не имею против вашего предложение по поводу одного Edit-а. Просто говорю раньше был такой вариант, возможно нужно пересмотреть и действительно перевести все на один Edit.


 
sniknik ©   (2011-10-24 23:39) [61]

> Какой сканер есть в наличии с тем и работаем :)
цена вопроса 50-100$ поменять. (у нас было проще, мы их поставляли, и что кому давать решалось административно... после того как выяснили что программно это практически не решается)


 
DiamondShark ©   (2011-10-24 23:59) [62]


> Rouse_ ©   (24.10.11 23:06) [50]
> Ну тыж не стесняйся - код приводи демонстрирующий невалидность
> работы данного кода со сканером, что ты как первокурсница
> ?А там и поглядим у кого фантазии поболе будет.

Тролишь?

В твоём обработчике GetKeyState всегда сообщит, что клавиша нажата, хотя в случае очень быстрого темпа аппаратных событий "клавиша" может быть давно отпущена.
Для того, чтобы имитировать ситуацию, когда соотношение темпа выборки сообщений и темпа аппаратных событий отличается от типичного отношения при обычном человеческом вводе, я тебе предложил вариант с задержкой.
Ты предпочёл постебаться, а не подумать. Ну, свобода выбора, фигли, святое. Только не обижайся потом, что тебя перестают всерьёз воспринимать, когда ты начинаешь дурочку валять.


> А эт батенька все из-за того, что кто-то леницо читать мануалы
> от МС по юзабилити, отсюда и рождаются всякого рода нестандартные
> подходы к построению интерфейса, и неликвидные задачи плана
> "надо решить как в одно окно будет литься куча данных я
> мы их должны расфасовывать по смыслу"

Я не понял, что из-за чего?
Ты сочиняешь нелогичные байки, из-за того, что кто-то чего-то не читает?
*facepalm.jpg*

Что же до мануалов...
Ты рабочее место кассира видел? Ну, в супермаркете-то хоть был?
Дай ссылку на мануал, в котором расписано юзабилити рабочего места кассира, к которому подключены клавиатура, два сканера (стационарный и ручной) и ридер каких-нибудь карточек, сблокированный с клавиатурой и гонящий данные по тому же интерфейсу.
Я тебе натуральное спасибо скажу. Я уже десятка полтора таких штук написал, на разных платформах, включая ДОС и такую экзотическую штуку, как залитую в компаунд коробочку 10х15х5 см, из которой кроме шести КОМ-портов и Эзернета ничего не торчало, зато внутри была ВинЦЕ. Вдруг я в этой жизни что-то упустил.


 
DiamondShark ©   (2011-10-25 00:05) [63]


> Rouse_ ©   (24.10.11 23:19) [54]

Можно цитату, где Дима Акуличев что-то подобное говорит?
(если ты не различаешь "момент генерации события" и момент обработки Windows-сообщения, то можешь не утруждаться)


 
Rouse_ ©   (2011-10-25 00:07) [64]


> DiamondShark ©   (24.10.11 23:59) [62]

Тяжко... ты действительно не представляешь схему, а вроде по моим представлениям должен был понимать...

Хм, попробую дать намек.
Ты сказал: "в случае очень быстрого темпа аппаратных событий "клавиша" может быть давно отпущена".

Вопрос, что произойдет в случае быстрого темпа?
1. часть сообщений окном будет пропущена и ввод со сканера будет не успешен.
2. все сообщения окно получит.

Если да, то:
1. обработает генерацией сообщения?
2. сможет получить по сообщению состояние клавиши через GetKeyState?

какой пункт по твоему мнению не верный?


 
Laguna ©   (2011-10-25 00:11) [65]

> sniknik ©   (24.10.11 23:39) [61]


> > Какой сканер есть в наличии с тем и работаем :)цена вопроса
> 50-100$ поменять.

Здесь не решается вопрос на уровне пользователей. Закупает сканеры головное предприятие. А подчененных более 4500. Т.ч. сами понимаете, что шиковать не приходится. Поэтому и пытаюсь решить задачу малой кровью при малом количестве часов, отпушенных на решение задачи.

Сейчас пересматривал возможность перехода к одному Edit. Оказывается не зря все же я делпал разделение ввода. При считке сканером к примеру билет читается как серия + номер+ индекс. Приручном вводе поля ввода разделяются(в другой задаче). Здесб же нужно вводить только номер + индекс. Короче тут tit и фейс самой проги завязан. Т.ч. звиняйте, может и по колхозному, но...


 
Rouse_ ©   (2011-10-25 00:18) [66]


> DiamondShark ©   (24.10.11 23:59) [62]
> Ты рабочее место кассира видел? Ну, в супермаркете-то хоть был?

писал, тока для RS232, там окна не надомно...
Я вообще, ес чего, дохрена чего писал, и для лифтов и для датчиков давления и для котлов котельных ПО фигачил, а вот в супермаркете небыл, по инету предпочитаю чтоб продукты доставляли...


 
DiamondShark ©   (2011-10-25 00:18) [67]


> Rouse_ ©   (25.10.11 00:07) [64]

Почитай внимательно описание GetKeyState.

И не подменяй предмет. Задача -- не просто получить ввод со сканера (который, конечно же, будет получен), а отличить ввод со сканера от "человеческого".

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

Так вот я всего лишь говорю, что GetKeyState тут тебе не поможет совсем. Никак. Absolutly.
Почему -- читай внимательно описание GetKeyState. Следуй своему ценному совету.


 
DiamondShark ©   (2011-10-25 00:21) [68]


> Rouse_ ©   (25.10.11 00:18) [66]
> писал, тока для RS232, там окна не надомно...

Тю... Не спортивно. На разных интерфейсах и дурак напишет.
Знаешь, как я радовался, когда появились УСБ-устройства, и АПИ RAW Input.


 
Rouse_ ©   (2011-10-25 00:21) [69]


> DiamondShark ©   (25.10.11 00:18) [67]
> Твой подход -- по темпу ввода

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


 
имя   (2011-10-25 00:25) [70]

Удалено модератором


 
DiamondShark ©   (2011-10-25 00:26) [71]


> Закупает сканеры головное предприятие.

Так какого типа сканеры? С каким интерфейсом? Keyboard или USB?
А клавиатуры с каким интерфейсом?

Если или клавы или сканеры USB, то юзай RAW Input.


 
Laguna ©   (2011-10-25 00:44) [72]

Сканеры в разрыв клавы. Клава обычная PS/2. Есть и другие сканеры, объемные, динозавры блин, но тоже в разрыв клавы включены. Раньше был еще такой сканер, который после скана не вставлял в конце #13. Вот тоже гемор был. И на разных местах разные сканеры стояли. Пришлось выкручиватся(уже точно не момн., эмулировал передерг с Edita, дабы onChange произошло). Т.к. на разных местах разное оборудование. Я тнигда захожу к людям и боьно становится смотреть на 15 монитор, на котором ну ни фига не видно. Мало того что тресется все, так еще под обильным слоем вуали. А людям приходится на этом работать. А вы говорить 50-100 баксов не вопрос...


 
Laguna ©   (2011-10-25 00:51) [73]

Уважаемые мастера. Еще одна просьба(за одно), дабы не плодить лишних тем, подскажите, какое событие срабатывает на гриде в момент его скроллинга. Т.е. когда реально нажимаеи на его значки скрола или передвигаем сам ползунок? http://s44.radikal.ru/i105/1110/9b/1be205e20182.jpg


 
sniknik ©   (2011-10-25 01:09) [74]

> который после скана не вставлял в конце #13
постфикс настраивается, сам сканер... единственный сканер с не настраиваемым постфиксом(или префиксом, не помню уже) был стационарный "магелан". забавно было дешевые китайские как угодно, а то такая "дорогая дура"... и вдруг "наполовину".

> дабы не плодить лишних тем
сейчас я тебя закрою, дабы не плодить лишних... один вопрос одна ветка, что в правилах в этом непонятного? что сэкономить пытаешься?


 
Laguna ©   (2011-10-25 01:13) [75]

> sniknik


> сейчас я тебя закрою, дабы не плодить лишних... один вопрос
> одна ветка, что в правилах в этом непонятного? что сэкономить
> пытаешься?

Ок, тогда лучше [73] вобще удалить, дабы не путалось здесь в этом топике


 
Германн ©   (2011-10-25 01:32) [76]


> Ты рабочее место кассира видел? Ну, в супермаркете-то хоть
> был?
> Дай ссылку на мануал, в котором расписано юзабилити рабочего
> места кассира, к которому подключены клавиатура, два сканера
> (стационарный и ручной) и ридер каких-нибудь карточек, сблокированный
> с клавиатурой и гонящий данные по тому же интерфейсу.

Честно говоря, я вышеуказанное рабочее место "детально", т.е. со стороны самого кассира не видел. Но разве это оправдание делать "идиотский" алгоритм программы, которая должна  сама определять откуда пришел ввод? И при этом сама делать вывод какой код учитывать? Считанный со сканера или введённый юзером с клавиатуры? А ведь они оба могут быть введены!


 
KilkennyCat ©   (2011-10-25 02:09) [77]

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


 
KilkennyCat ©   (2011-10-25 02:13) [78]

может, действительно сделать? судя по полемике, наболевшая проблема.


 
KilkennyCat ©   (2011-10-25 02:15) [79]

если в варианте "нажатие на кнопку клавиатуры шлет битик в усб" то себестоимость - доллар от 100 штук.


 
Германн ©   (2011-10-25 02:17) [80]


> KilkennyCat ©   (25.10.11 02:09) [77]
>
> за пару долларов можно сделать небольшой переходничек на
> клаву, или на сканер, без разницы.... будет генерить дополнительно
> че-нить или генерить в усб 232 или куда угодно...
> могу взяться через пару недель.

Мне нужно возвращать долги после ремонта, а ты Костя тут демпингуешь! Чем я тебе не угодил? :)


 
KilkennyCat ©   (2011-10-25 02:35) [81]

а... ты уже что-то предлагаешь? извини, не заметил... снимаю свою кандитадуру.
извиняюсь за оффтоп, Германн, а ты ту проблему с езернетом решил? а то я почти решил.


 
Германн ©   (2011-10-25 04:05) [82]


> извиняюсь за оффтоп, Германн, а ты ту проблему с езернетом
> решил? а то я почти решил.
>

И я "почти решил". Но наверняка моё почти никак не коррелирует с твоим почти. :)
Если что конкретное, то обращайся на почту.


 
sniknik ©   (2011-10-25 08:01) [83]

> Но разве это оправдание делать "идиотский" алгоритм программы, которая должна  сама определять откуда пришел ввод?
почему это для удобства у тебя синоним "идиотский"?

поверь это очень удобно, при вводе накладной например не искать/вставать в специальное поле, или не не нажимать доп кнопку открывающую "форму ввода со сканера"(видел и такие "решения", и не с одной кнопкой), а просто сканировать сканером. собственно это их и отличает от клавиатуры, удобство ввода.
а вот "поле куда нужно встать" прежде чем "пикнуть", не очень отличается от ввода вручную, 13 цифр хороший оператор успевает набрать тогда быстрее чем с товара сканером со сканировать.  удобство нивелируется.

> на клаву, или на сканер, без разницы....
только на клаву. т.к. после подключения сканера "в разрыв" для устройства также не будет разницы между данными устройств... и как поймешь "ху из ху"?

но вообще бессмысленно. т.к. вся проблема в неорганизованности, люди не знают как работает/чего хотят, покупают не то что нужно(или в моем случае было отгружают...), а после это хотят решить программно... т.е. попросту делают и переваливают проблему на программистов.
в общем никто твой переходник покупать не будет, но все также будут ожидать, что все должно работать "само". (да блин, посмотри выше там даже устройство не настраивают, на предмет посылки #13 в конце, а делают различные реализации ввода в программе... нонсенс)


 
sniknik ©   (2011-10-25 08:06) [84]

> если в варианте "нажатие на кнопку клавиатуры шлет битик в усб"
в связи с виндовой событийностью, и ее не реал таймом, битик в  в усб может уже поменяться в тот момент когда идет чтение символа программой... неопределенность остается.


 
Anatoly Podgoretsky ©   (2011-10-25 10:07) [85]

> Laguna  (25.10.2011 00:11:05)  [65]

4500 и только в одном месте решили два эдита


 
Laguna ©   (2011-10-25 11:00) [86]

> Anatoly Podgoretsky ©   (25.10.11 10:07) [85]

> Laguna  (25.10.2011 00:11:05)  [65]4500 и только в одном  месте решили два эдита


Не совсем понятна мысль


 
Inovet ©   (2011-10-25 11:58) [87]

> [77] KilkennyCat ©   (25.10.11 02:09)
> можно сделать небольшой переходничек на клаву, или на сканер,
> без разницы.... будет генерить дополнительно че-нить или
> генерить в усб 232 или куда угодно...

Тогда зачем его делать переходником - пусть включается в эти порты и шлёт всё туда, а клавиатура сама по себе.


 
Anatoly Podgoretsky ©   (2011-10-25 13:45) [88]

Ты решил проблему для 4500 пользователей, путем создания 2 эдитов :-)


 
Laguna ©   (2011-10-25 13:55) [89]


> Ты решил проблему для 4500 пользователей, путем создания
> 2 эдитов :-)


Нет, путем создания программы, в которой используется функция сканирования посредством двух Edit.


 
Anatoly Podgoretsky ©   (2011-10-25 14:11) [90]

> Laguna  (25.10.2011 13:55:29)  [89]

Брехология


 
Труп Васи Доброго ©   (2011-10-25 16:21) [91]

Вот хоть убей - не пойму зачем ДВА едита? Что мешает использовать ОДИН? Чтобы проще было понять опиши ситуацию ошибки при вводе в один едит, тогда будет ясно (может быть) чего ты пытаешься избежать.


 
Труп Васи Доброго ©   (2011-10-25 16:37) [92]


> Сейчас пересматривал возможность перехода к одному Edit.
>  Оказывается не зря все же я делпал разделение ввода. При
> считке сканером к примеру билет читается как серия + номер+
> индекс. Приручном вводе поля ввода разделяются(в другой
> задаче). Здесб же нужно вводить только номер + индекс.

Опять нет никакой проблемы с одним едитом. Сканер введёт (количество от балды) 20 символов, а юзер только 10. И какая проблема? Если длина текста 20, то хватай и обрабатывай как "серия + номер+ индекс", если же их меньше, то юзер полюбасу энтер тыкнет, это тебе сигнал что "не сканер вводил", проверь количество и обрабатывай как "только номер + индекс". Вот и всё решение. Даже если юзер пробъёт все 20 цифр, то код сработает и энтер жать не придётся. А ты геморрой изобретаешь. Надо будет что гениально-простое, обращайся!


 
Laguna ©   (2011-10-25 16:51) [93]


> Опять нет никакой проблемы с одним едитом. Сканер введёт
> (количество от балды) 20 символов, а юзер только 10. И какая
> проблема? Если длина текста 20, то хватай и обрабатывай
> как "серия + номер+ индекс", если же их меньше, то юзер
> полюбасу энтер тыкнет, это тебе сигнал что "не сканер вводил",
>  проверь количество и обрабатывай как "только номер + индекс".
>  Вот и всё решение. Даже если юзер пробъёт все 20 цифр,
> то код сработает и энтер жать не придётся. А ты геморрой
> изобретаешь. Надо будет что гениально-простое, обращайся!
>

А если введено не 7 положенных от руки , а 6? На "ручном" Edit стоит
 if Length(NomEdit.Text) = KolDigit then
  PostMessage(Handle, WM_NEXTDLGCTL, 0, 0);

Дабы исключить лишнее клацанье по ентер. Чтобы уменьшить телодвижения при вводе(а этого ой как боятся дамы бальзаковского возраста), перед сканированием билетов я сперва отдельно запрашиваю номер серии. Затем в "ручном" режиме вводится только номер + индекс.[45] Сканер же все вместе возьмет. Конечно можно сделать проверку на количество введенных символов(если меньше чем нужно) Короче, нужно пробывать.


 
Игорь Шевченко ©   (2011-10-25 20:40) [94]


> перед сканированием билетов


трамвайных ?


 
KilkennyCat ©   (2011-10-25 22:44) [95]


> Inovet ©   (25.10.11 11:58) [87]

>
> Тогда зачем его делать переходником - пусть включается в
> эти порты и шлёт всё туда, а клавиатура сама по себе.


мой вариант не потребует переделки уже существующего софта. он лишь дополнит девайс, все штатные функции сохранены.


 
Труп Васи Доброго ©   (2011-10-26 00:16) [96]


> А если введено не 7 положенных от руки , а 6? На "ручном"
> Edit стоит
>  if Length(NomEdit.Text) = KolDigit then
>   PostMessage(Handle, WM_NEXTDLGCTL, 0, 0);
> Дабы исключить лишнее клацанье по ентер.

Вот сразу видно, что ты с людьми не много работал. Дамы с великим удовольствием давят Enter, к тому же нажав Enter юзер подтверждает, что он ввёл номер полностью. Дальше уже твоя работа обрабатывать данные и проверять их на валидность. Вопрос "А если введено не 7 положенных от руки , а 6?" может возникнуть (извини за прямоту) у человека который только начинает учиться писать программы. (И два Edita для одной информации лишнее тому подтверждение) Проверь что ввели и маякни юзеру что "не всё ввёл", тем же едитом и поморгай или меняй цвет заливки Edita, когда будет нужное количество символов, чтобы даже неопытный юзер понял, что всё ОК. Потом они сами привыкнут не тыкать Enter, пока Edit не покраснеет. А проверяя на автомате, без подтверждения юзера по нажатию Enter рискуешь нарваться на проглатывание случайного нажатия кнопки или залипания или "я постоянно эту кнопку ногтем задеваю, у меня маникюр", а твой код радостно схавает эти 7 цифр и потащит на обработку. Ты не даёшь юзеру возможность исправить ошибку ввода, а это "боком чревато". Надеюсь понял.


 
Германн ©   (2011-10-26 00:58) [97]


> мой вариант не потребует переделки уже существующего софта.
>  он лишь дополнит девайс, все штатные функции сохранены.
>
>

Он лишь предоставит программисту новые возможности, которые заставят программиста писать новое ПО. Ибо ему, этому программисту, только дай дополнительные возможности! Но если программист "заточен" на известную ему "юзабилити" и "шаг вправо, шаг влево - расстрел на месте" для него норма. Что тогда?


 
brother ©   (2011-10-26 05:44) [98]

Все имхо:
1. 2 едита для ручного и сканрного ввода - перебор, достаточно одного с нужными проверками
2. Забыли про очередь сообщений окну
3. Не вижу демо кода для проверки нажатия клавиш и приходов сообщений контролу
4. Сканерами не пользовался но, скорость ввода символов через сканер как то ограничена (скорость ввода, задержки между "клавишами")?
5. Зачем спорить если вопрос в начинающих и кода нет?


 
Laguna ©   (2011-10-26 09:45) [99]

> Труп Васи Доброго ©   (26.10.11 00:16) [96]


> Вот сразу видно, что ты с людьми
> не много работал. Дамы с великим удовольствием давят Enter,
>  к тому же нажав Enter юзер подтверждает, что он ввёл номер
> полностью.

Не скажи. У нас такие дамы, что хотят чтобы программа выполняла действия только от ожного их взгляда на монитор.

> Дальше уже твоя работа обрабатывать данные и
> проверять их на валидность. Вопрос "А если введено не 7
> положенных от руки , а 6?" может возникнуть (извини за прямоту)
> у человека который только начинает учиться писать программы.
>  (И два Edita для одной информации лишнее тому подтверждение)
> Проверь что ввели и маякни юзеру что "не всё ввёл", тем
> же едитом и поморгай или меняй цвет заливки Edita, когда
> будет нужное количество символов, чтобы даже неопытный юзер
> понял, что всё ОК. Потом они сами привыкнут не тыкать Enter,
>  пока Edit не покраснеет.

В принципе я согласен.
А идея с контрольной подсветкой едита во время ввода мне понравилась.

> А проверяя на автомате, без подтверждения
> юзера по нажатию Enter рискуешь нарваться на проглатывание
> случайного нажатия кнопки или залипания или "я постоянно
> эту кнопку ногтем задеваю, у меня маникюр", а твой код радостно
> схавает эти 7 цифр и потащит на обработку. Ты не даёшь юзеру
> возможность исправить ошибку ввода, а это "боком чревато".

После едита стоит подтверждающая кнопка ввода, по нажатию на которую и выполняется проверка введенных данных с последующим сохранением. "Автомат" просто переводит на ее после того, как введено определенное количество знаков и только. Т.е. подредактировать введенную информацию возможность предоставляется.
http://s45.radikal.ru/i109/1110/74/c64733172f67.jpg
Т.е. автомат исключает повторный клац по Ентеру и всего то.


 
Труп Васи Доброго ©   (2011-10-26 10:23) [100]

Чем меньше надо тыкать кнопок мышью, тем лучше. Рука у юзера не отрывается от клавы. Я 7 лет отработал в ЖКХ конторе, так что кто такие дамы из бухгалтерии и абонентского отдела и как они могут работать я тоже в курсе. Сначала они по одной кнопке в минуту тычут, а потом приноровятся и так пальцами перебирают при разноске квитанций, что аж ветер вокруг, по 1500 квитанций в день лупили! Тот, кто бьёт много цифр будет счастлив, если ему вообще не придётся хвататься за мышь. Сначала может и будут ныть что непривычно, но потом будут тебе руки целовать за хорошую, удобную программу.


 
Laguna ©   (2011-10-26 11:11) [101]


> Чем меньше надо тыкать кнопок мышью, тем лучше. Рука у юзера
> не отрывается от клавы.
>...
Тот, кто бьёт много  цифр будет счастлив, если ему вообще не придётся >хвататься  за мышь. Сначала может и будут ныть что непривычно, но потом
> будут тебе руки целовать за хорошую, удобную программу.


Так вот автомат у меня так и отробатывает. Переводит на кнопку, нажали ентер, данные обработались -  фокус опять перешел на поле ввода, вводим следующие данные. и так по кругу. Потом закрываем режим ручного ввода одним кликом мыши. Как то так.


 
Труп Васи Доброго ©   (2011-10-26 11:35) [102]


> Переводит на кнопку, нажали ентер, данные обработались -
>   фокус опять перешел на поле ввода,

ЗАЧЕМ?!?!?!?
КТО МЕШАЕТ нажать Enter НЕ ВЫХОДЯ из Edita???? Ты создал лишнюю кнопку, лишний обработчик перевода фокуса и т.д. Это лишнее. Как ты там говоришь? "А если..." ввели 7 цифр, фокус ушёл на кнопку, а юзер понял, что цифра не та и её надо исправить, как юзер вернёт фокус? Ему надо рукой перевести мышь на Edit и тыкнуть, то есть лишние действия!!!


 
Anatoly Podgoretsky ©   (2011-10-26 14:17) [103]

> Труп Васи Доброго  (26.10.2011 11:35:42)  [102]

Что бы нажать кнопку Enter, фокус менять не требуется и даже писать
программу.


 
Laguna ©   (2011-10-26 14:39) [104]


> Ему надо рукой перевести мышь на Edit и тыкнуть, то есть
> лишние действия!!!

Мдя... есть такое дело. Впринципе Все основная обработка проискодит в Edit1. Все, здаюсь, согласен, что второй Edit лишний. Обязуюсь переписать без него, как тока время появится. Всем спасибо. Тему можно закрывать.


 
Труп Васи Доброго ©   (2011-10-26 14:39) [105]


> фокус менять не требуется и даже писать
> программу

Дак и я о том же!!! Там вообще эта кнопка не нужна! Об этом и пытаюсь камраду сказать. А он мало того, что кнопку, он ещё и второй Edit поставил, хотя можно только одним Editом обойтись.



Страницы: 1 2 3 вся ветка

Форум: "Начинающим";
Текущий архив: 2012.02.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.79 MB
Время: 0.006 c
2-1319706575
Faceless
2011-10-27 13:09
2012.02.05
Вывод в командную строку (cmd.exe)


15-1318541682
icelex
2011-10-14 01:34
2012.02.05
у-пи-эс


15-1319056202
Юрий
2011-10-20 00:30
2012.02.05
С днем рождения ! 20 октября 2011 четверг


15-1318585949
Очень Злой
2011-10-14 13:52
2012.02.05
Помогите перевести на Delphi


15-1318405047
boriskb
2011-10-12 11:37
2012.02.05
Работа





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский