![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() на форме только две кнопки (меняют раскладку)
изза procedure CreateParams они НЕ работают (функция запрещает форме принимать фокус) как решить проблему??? Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button: TButton; Button1: TButton; procedure ButtonClick(Sender: TObject); procedure Button1Click(Sender: TObject); private procedure CreateParams(var Params: TCreateParams); override; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.ExStyle := Params.ExStyle + WS_EX_NOACTIVATE; end; procedure TForm1.ButtonRUClick(Sender: TObject); begin LoadKeyboardLayout('00000409', KLF_ACTIVATE); end; procedure TForm1.ButtonENClick(Sender: TObject); begin LoadKeyboardLayout('00000419', KLF_ACTIVATE); end; end. |
#2
|
||||
|
||||
![]() Отказаться от использования этого флага.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
|||
|
|||
![]() как по другому можно смениь язык ?
без процедуры програматеряет смысл |
#4
|
||||
|
||||
![]() Если в системе только 2 языка то можно ограничится и одной кнопкой с такой реализацией:
Код:
ActivateKeyboardLayout(HKL_NEXT, 0); Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
Giku (27.05.2012)
|
#5
|
|||
|
|||
![]() Цитата:
программа редназначена на все случаи жизни да и вопрос не о том, ведь Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button: TButton; procedure ButtonClick(Sender: TObject); private procedure CreateParams(var Params: TCreateParams); override; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.ExStyle := Params.ExStyle + WS_EX_NOACTIVATE; end; procedure TForm1.ButtonClick(Sender: TObject); begin ActivateKeyboardLayout(HKL_NEXT, 0); end; end. тоже не работает все дело в процедуре CreateParams она нужна, только как это все совместить ??? |
#6
|
||||
|
||||
![]() А как можно нажимать на кнопки, если вся форма не активна, а кнопки принадлежат ей?
![]() Как вариант, заблокировать всё на форме, кроме кнопок. Или написать свою WndProc, которая будет смотреть, если координаты принадлежат кнопке - отправляет их кнопке, остальные блочит (флаг отключения активности придется убрать). jmp $ ; Happy End! The Cake Is A Lie. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Giku (27.05.2012)
|
#7
|
|||
|
|||
![]() Цитата:
вот так работает Код:
procedure TForm1.ButtonClick(Sender: TObject); begin form1.Caption:='pla-pla-pla'; end; Последний раз редактировалось Bargest, 24.05.2012 в 22:30. |
#8
|
||||
|
||||
![]() В таком случае, для чего нужна установке в неактивное состояние?
jmp $ ; Happy End! The Cake Is A Lie. |
#9
|
|||
|
|||
![]() это что то вроде виртуальной клавы
курсор должен оставатсься в поле ввода а язык переключать тоже необходимо |
#10
|
||||
|
||||
![]() Почему считаешь, что не работает?
Код:
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure CreateParams(var Params: TCreateParams); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.ExStyle := Params.ExStyle or WS_EX_NOACTIVATE; end; procedure TForm1.Button1Click(Sender: TObject); begin ActivateKeyboardLayout(HKL_NEXT, 0); // LoadKeyboardLayout('00000419', KLF_ACTIVATE); end; end. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Giku (27.05.2012)
|
#11
|
|||
|
|||
![]() да но так уже форма принемает фокус
выходит дело вот в этой строчьки Код:
override; |
#12
|
||||
|
||||
![]() Переключение происходит, но с этим флагом не видно. Ткни в TaskBar-е на программу после нажатия кнопки и увидишь.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Giku (27.05.2012)
|
#13
|
|||
|
|||
![]() создал еще одну кнопку
Код:
procedure TForm1.Button2Click(Sender: TObject); begin keybd_event(68, 0, 0, 0); keybd_event(68, 0, KEYEVENTF_KEYUP, 0); end; end. открыл блокнот и поочередно нажимаю Button1 и Button2 в блокноте печатается буква 'd' если выбрана английская раскладка или 'в' если русская раскладка не меняется у меня window 7 стоит но дело думаю в том что у меня НЕ единная раскладка и так как програма универсальная то надо найти какое то решение помогите пожалуста! куда копать ? Последний раз редактировалось Bargest, 25.05.2012 в 17:38. |
#14
|
|||
|
|||
![]() как поменять все раскладки (или только активного окна) ?
|
Этот пользователь сказал Спасибо Pyro за это полезное сообщение: | ||
Giku (27.05.2012)
|