Author Topic: Переключение языка ввода.  (Read 7012 times)

0 Members and 1 Guest are viewing this topic.

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Переключение языка ввода.
« on: December 04, 2014, 01:39:57 PM »
Здравствуйте.

1. Хочу чтобы диалоговое окно вызванное функцией DIALOGBOX всегда по умолчанию заполнялось англ. буквами.
Из справки не понял как пользоваться - SETKBLAYOUT, а именно как узнать какое туда писать hwnd - hwnd окна.
2. Как сделать моё окно ввода в фокусе мыши ? приходится каждый раз на него кликать, что очень неудобно.
« Last Edit: December 04, 2014, 01:45:23 PM by putman »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Переключение языка ввода.
« Reply #1 on: December 04, 2014, 02:33:28 PM »
Что значит "заполнялось англ. буквами"? Там же только кнопки!

Code: (clickermann) [Select]
SETKBLAYOUT(WNDFIND("Clickermann",0), 1033)
$dialog = DIALOGBOX("Продолжить действие", 1, 2)
halt

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Переключение языка ввода.
« Reply #2 on: December 04, 2014, 02:57:34 PM »
Ну и стиль у тебя  :o Твой код будет работать максимум на 4.8 версии. Зачем плодить подпрограммы? IF($_return1> 0) само нахождение картинки уже условие!

Code: (clickermann) [Select]
SUB(проверка раскладки)
   GETSCREEN
   IF_PICTURE_IN (0,0,$_xmax,$_ymax, "textures\язык ру в обл уведомл.bmp")
      KEYDOWN(#ALT)
      WAITMS(50)
      KEYDOWN(#SHIFT)
      WAITMS(50)
      KEYUP(#SHIFT)
      KEYUP(#ALT)
      WAITMS(100)
   END_IF
END_SUB

проверка раскладки()

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Переключение языка ввода.
« Reply #3 on: December 04, 2014, 03:23:29 PM »
да было написанно для версии 4.7
подпрограммы для удобства  быстрого склеивания из них  скриптов.
IF($_return1> 0) нужно чтоб меняя больше или равно выбирать язык,мне  в разных случаях нужны разные раскладки.
И каким чудесным образом это произойдёт?
Если картинку РУ не найдёт, то и всё условие IF($_return1> 0)... даже проверяться не будет.
« Last Edit: December 04, 2014, 03:26:34 PM by Vint »


putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Переключение языка ввода.
« Reply #4 on: December 08, 2014, 09:17:37 AM »
Спасибо, с первым вопросом разобрались.
Теперь давайте со вторым.
Для переключения на Англ., нужно что бы моё окно было активно, только тогда будет понятно какой в нем включен язык.
Когда вызывается функция - inputbox, сценарий останавливается и ждет ввода данных, как кликнуть в это время по моему окну не понимаю.
Как сделать моё окно ввода в фокусе мыши ? приходится каждый раз на него кликать, что очень неудобно.
Окно вызывается этой командой:
Code: [Select]
$str = inputbox("Код, действие, количество, номер акта.",, 100)
« Last Edit: December 08, 2014, 10:51:14 AM by Vint »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Переключение языка ввода.
« Reply #5 on: December 08, 2014, 10:57:07 AM »
Спасибо, с первым вопросом разобрались.
Теперь давайте со вторым.
Для переключения на Англ., нужно что бы моё окно было активно, только тогда будет понятно какой в нем включен язык.
Когда вызывается функция - inputbox, сценарий останавливается и ждет ввода данных, как кликнуть в это время по моему окну не понимаю.
Как сделать моё окно ввода в фокусе мыши ? приходится каждый раз на него кликать, что очень неудобно.
Окно вызывается этой командой:
Code: [Select]
$str = inputbox("Код, действие, количество, номер акта.",, 100)
Не понятно, что ты называешь "МОИМ" окном?
Окно ввода и так активно. И оно является дочерним для кликера, соответственно язык как в кликере.


putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Переключение языка ввода.
« Reply #6 on: December 08, 2014, 11:06:21 AM »
Quote
Не понятно, что ты называешь "МОИМ" окном?
Окно ввода и так активно. И оно является дочерним для кликера, соответственно язык как в кликере.
У меня окно ввода не всегда активно.
Когда я работаю в одной программе, потом для запуска скрипта нажимаю Alt + А, то оно неактивно.
По нему всегда надо кликать что бы внести данные.
Если запустить из кликера кнопкой плей, тогда да, активно.
« Last Edit: December 08, 2014, 11:08:09 AM by putman »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Переключение языка ввода.
« Reply #7 on: December 08, 2014, 11:43:55 AM »
Я понял в чём проблема. Окном ввода если и пользуюсь, только при старте программы поэтому не сталкивался.
Я думал что когда доработали и сделали вынос его поверх всех окон оно становится в фокусе. Но не тут то было. Выглядит как активное в фокусе, но фокуса на нём нет.
Вот смастерил костылик, без потоков это было бы невозможно сделать.
Code: (clickermann) [Select]
THREAD(ibf, 0)   
   WNDBUMP (WNDFIND("Окно ввода", 0))
   SETTHREAD (ibf, 0)
END_THREAD

SETTHREAD (ibf, 1)
$str = inputbox("Код, действие, количество, номер акта.",, 100)

У меня всё работает. Думаю на всякий случай если не будет успевать... добавить задержку в начале потока
первой строкой WAITMS(50)
« Last Edit: December 08, 2014, 11:47:16 AM by Vint »


putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Переключение языка ввода.
« Reply #8 on: December 08, 2014, 12:10:35 PM »
Vint, спасибо, дома попробую.
А можно с этими потоками отслеживать гетскрином то что я ввожу в окно ?
Нужно после ввода 3-х параметров, 4-й писать русскими буквами.
Я бы гетскрином считал разделительные запятые и после третьей переключался.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Переключение языка ввода.
« Reply #9 on: December 08, 2014, 01:48:00 PM »
Vint, спасибо, дома попробую.
А можно с этими потоками отслеживать гетскрином то что я ввожу в окно ?
Нужно после ввода 3-х параметров, 4-й писать русскими буквами.
Я бы гетскрином считал разделительные запятые и после третьей переключался.
Можно
Code: (clickermann) [Select]
THREAD(ibf, 0)
   WAITMS(50)
   $hwnd_ib = WNDFIND("Окно ввода", 0)
   WNDBUMP ($hwnd_ib)
   SETTHREAD (ibf, 0)
END_THREAD

THREAD(lentayka, 0)
   UNDEFINE($ARR)
   GETSCREEN
   SCANPICTURE($ARR, INT($_xmax/2)-148,INT($_ymax/2),INT($_xmax/2)+148,INT($_ymax/2)+75, "comma.bmp")
   IF(ARRSIZE($ARR) > 4)
      SETKBLAYOUT ($hwnd_ib, 1049)
      SETTHREAD (lentayka, 0)
   END_IF
   WAITMS(50)
END_THREAD

SETTHREAD (ibf, 1)
SETTHREAD (lentayka, 1)
$str = inputbox("Код, действие, количество, номер акта.",, 100)
SETTHREAD (lentayka, 0)

Только окно ввода не двигай по экрану.


putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Переключение языка ввода.
« Reply #10 on: December 08, 2014, 02:34:16 PM »
Можно комментарии к скрипту ?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Переключение языка ввода.
« Reply #11 on: December 08, 2014, 03:03:35 PM »
Code: (clickermann) [Select]
THREAD(ibf, 0)  // поток, который ловит окно ввода и выводит его поверх всех
   WAITMS(50)   // чуть притормаживаем, чтобы окно успело создасться
   $hwnd_ib = WNDFIND("Окно ввода", 0)  // нашли по названию
   WNDBUMP ($hwnd_ib) // поверх всех
   SETTHREAD (ibf, 0) // останавливаем этот поток
END_THREAD

THREAD(lentayka, 0) // поток переключение на РУС
   UNDEFINE($ARR)  // удаляем массив
   GETSCREEN       // понятно
   SCANPICTURE($ARR, INT($_xmax/2)-148,INT($_ymax/2),INT($_xmax/2)+148,INT($_ymax/2)+75, "comma.bmp") // ищем изображение запятой
   IF(ARRSIZE($ARR) > 4)  // если найдено больше 2 (4 пары координат)
      SETKBLAYOUT ($hwnd_ib, 1049)  // ставим окну ввода русский язык
      SETTHREAD (lentayka, 0)       // останавливаем поток чтоб не грузил и не срабатывал много раз
   END_IF
   WAITMS(50)  // разкрузка пока ждём три запятые
END_THREAD

SETTHREAD (ibf, 1)  // запускаем поток "поверх всех"
SETTHREAD (lentayka, 1)  // запускаем поток "переключение на РУС"
$str = inputbox("Код, действие, количество, номер акта.",, 100)
SETTHREAD (lentayka, 0)  // стоп поток "переключение на РУС" нужно если ввели меньше 3 запятых и не сработало


putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Переключение языка ввода.
« Reply #12 on: December 08, 2014, 03:22:52 PM »
Круто !
Большое спасибо !
Почитаю по потокам инфу, видел что они появились в последней версии, но не обратил внимания.

putman

  • Активный участник
  • ***
  • Posts: 199
    • View Profile
Re: Переключение языка ввода.
« Reply #13 on: December 09, 2014, 07:41:27 AM »
Поместил в Ваш поток принудительное переключение на русский язык, но не переключает.

Code: [Select]
THREAD(ibf, 0)
$hwnd_ib = WNDFIND("Окно ввода") 
  WNDBUMP ($hwnd_ib)
  SETKBLAYOUT ($hwnd_ib, 1049)
  SETTHREAD (ibf, 0) 
END_THREAD

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Переключение языка ввода.
« Reply #14 on: December 09, 2014, 08:38:45 AM »
Потому что нужно ожидание окна

Code: (clickermann) [Select]
THREAD(ibf, 0)
   WHILE(WNDFIND("Окно ввода", 0) = 0) // ждем окно
      WAITMS(50)
   END_CYC
   $hwnd_ib = WNDFIND("Окно ввода")
   WNDBUMP ($hwnd_ib)
   SETKBLAYOUT ($hwnd_ib, 1049)
   SETTHREAD (ibf, 0)
END_THREAD

SETTHREAD (ibf, 1)
$a = INPUTBOX("Введите текст", "", 999)

HALT