PDA

View Full Version : نمیتونم زبان کیبرد را تغییر بدم !!



khazaie01
پنج شنبه 12 آذر 1388, 08:17 صبح
سلام دوستان
با استفاده از این دستور لایوت کیبرد را به فارسی تغییر میدهم :



ActivateKeyboardLayout($00000429,KL_NAMELENGTH);

البته کامپوننتهایی که این کار را انجام میدهند را هم امتحان کردم .

وقتی برنامه اجراست و برنامه فعال است این کد و کامپوننتهای مشابه کار میکنند و براحتی میتوان زبان را تغییر داد اما وقتی برنامه را مخفی میکنم کار نمیکند و زبان را تغییر نمیدهد !

مثل اینکه اکثر برنامه ها به این شکل عمل میکنند یعنی وقتی اجرا میشوند زبان کیبورد را تغییر میدهند یا خود کاربر هنگام کار با اون نرم افزار زبان کیبورد را تغییر میدهد اما وقتی نرم افزار را میبندد زبان کیبورد به همان زبانی برمیگردد که قبل از اجرای نرم افزار بوده !!

تو برنامه من هم به همین شکل .... وقتی برنامه را hide میکنم زبان کیبورد به زبان قبلی برمیگردد و نمیتوان زبان کیبورد را عوض کرد ... اما راه حل ؟!!!!!

من فقط میخوام زمانی که برنامه مخفی است و به صورت بک گراند کار میکند بتونم زبان کیبورد را تغییر بدم همین اما نشد که نشد !!:متفکر:

ممنووووووووووون

دلفــي
پنج شنبه 12 آذر 1388, 12:19 عصر
سلام دوستان
با استفاده از این دستور لایوت کیبرد را به فارسی تغییر میدهم :



ActivateKeyboardLayout($00000429,KL_NAMELENGTH);

البته کامپوننتهایی که این کار را انجام میدهند را هم امتحان کردم .

وقتی برنامه اجراست و برنامه فعال است این کد و کامپوننتهای مشابه کار میکنند و براحتی میتوان زبان را تغییر داد اما وقتی برنامه را مخفی میکنم کار نمیکند و زبان را تغییر نمیدهد !

مثل اینکه اکثر برنامه ها به این شکل عمل میکنند یعنی وقتی اجرا میشوند زبان کیبورد را تغییر میدهند یا خود کاربر هنگام کار با اون نرم افزار زبان کیبورد را تغییر میدهد اما وقتی نرم افزار را میبندد زبان کیبورد به همان زبانی برمیگردد که قبل از اجرای نرم افزار بوده !!

تو برنامه من هم به همین شکل .... وقتی برنامه را hide میکنم زبان کیبورد به زبان قبلی برمیگردد و نمیتوان زبان کیبورد را عوض کرد ... اما راه حل ؟!!!!!

من فقط میخوام زمانی که برنامه مخفی است و به صورت بک گراند کار میکند بتونم زبان کیبورد را تغییر بدم همین اما نشد که نشد !!:متفکر:

ممنووووووووووون


اين هم يه مثال كامل :



unit Lay_Unit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TMyForm = class(TForm)
end;
TForm1 = class(TMyForm)
Edit1: TEdit;
Memo1: TMemo;
Label1: TLabel;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
procedure FormCreate(Sender: TObject);
procedure ShowLayoutName;
procedure LoadLayouts;
procedure SwitchLayout(Layout : Bool);
procedure RadioButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

{Common Layouts}
Const
CyrLayout : String = '00000419'; {LANG_RUSSIAN}
LatLayout : String = '00000409'; {LANG_ENGLISH}
var
Form1 : TForm1;
hCyr : HKL; {Handle to Cyr layout}
hLat : HKL; {Handle to Lat layout}
implementation
{$R *.DFM}
procedure TForm1.ShowLayoutName;
Var
LayoutName : Array [0..KL_NAMELENGTH] of Char;
LangName : Array [0..63] of Char;
begin
GetKeyboardLayoutName(@LayoutName);
GetLocaleInfo(StrToInt('$'+LayoutName), LOCALE_SENGLANGUAGE, @LangName, 64);
Edit1.Text := LangName;
{To avoid error it the first call from TForm.Create, since Memo
is no created when ShowLayoutName is called}
ActiveControl := Memo1;
end;
{Initial procedure - get handles to Lat and Cyr layouts}
procedure TForm1.LoadLayouts;
begin
hCyr := LoadKeyboardLayout(@CyrLayout, KLF_ACTIVATE);
hLat := LoadKeyboardLayout(@LatLayout, KLF_ACTIVATE);
end;
procedure TForm1.SwitchLayout;
begin
if Layout then ActivateKeyboardLayout(hCyr,0)
else ActivateKeyboardLayout(hLat,0);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
LoadLayouts;
SwitchLayout(RadioButton1.Checked);
ShowLayoutName;
{Can't call SetFocus on Memo since it is not created yet!}
ActiveControl := Memo1;
end;
{Works for both radiobuttons - simply switches the layout}
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
SwitchLayout((Sender as TRadioButton).Checked);
ShowLayoutName;
end;
end.

khazaie01
پنج شنبه 12 آذر 1388, 19:26 عصر
دوست عزیز اینم کار نمیکنه
یکی به دادم برسه :عصبانی++:

yashar666
جمعه 13 آذر 1388, 01:16 صبح
; 'Application.BiDiKeyboard:='00000429

این رو هم امتحان کن

khazaie01
جمعه 13 آذر 1388, 18:06 عصر
دوستان مشکل تغییر زبان کیبورد نیست ! با همون کد اولی هم که نوشتم میشه زبان را تغییر داد اما مشکل اینجاست که وقتی برنامه را مینی مایز میکنم یا مخفی میکنم دوباره انگلیسی میشه ....

برید تو نتپد و زبان را فارسی کنید حالا یک بروزر را باز کنید میبینید زبان کیبورد انگلیسی شده !!!

دارم یک کنترل برای کامپیوتر درست میکنم(مادون قرمز)... یک کیت داره که اطلاعات گرفته شده از کنترل را به کامپیوتر میفرسته و یک نرم افزار که موقع اجرا مخفی میشه و منتظر دریافت کدهاست.
از اونجایی که نرم افزار همیشه مخفی است نمیشه زبان را عوض کرد ...
مثل اینکه هر نرم افزار در ویندوز تنظیمات زبان خاص خودش را داره !! و با حرکت بین برنامه ها زبان کیبورد هم عوض میشود !!! این خوبه اما نه برای من !

واقعا مشکل جالبیست:متفکر: