![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
||||
|
||||
|
Отказаться от использования этого флага.
|
|
#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, которая будет смотреть, если координаты принадлежат кнопке - отправляет их кнопке, остальные блочит (флаг отключения активности придется убрать). |
| Этот пользователь сказал Спасибо 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
|
||||
|
||||
|
В таком случае, для чего нужна установке в неактивное состояние?
|
|
#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. |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Giku (27.05.2012)
| ||
|
#11
|
|||
|
|||
|
да но так уже форма принемает фокус
выходит дело вот в этой строчьки Код:
override; |
|
#12
|
||||
|
||||
|
Переключение происходит, но с этим флагом не видно. Ткни в TaskBar-е на программу после нажатия кнопки и увидишь.
|
| Этот пользователь сказал Спасибо 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)
| ||