PDA

View Full Version : سوال در مورد فهميدن زبان فعال كيبورد



Kamyar.Kimiyabeigi
سه شنبه 26 شهریور 1387, 08:42 صبح
با سلام
من ميخوام تو برنامم زبان فعال رو به كاربر نشون بدم و از كد زير استفاده ميكنم


function TForm1.GetKeyboard: String;
var
kbd: array[0..2] of Char;
begin
GetLocaleInfo(loword(GetKeyboardLayout(0)), LOCALE_SENGLANGUAGE, kbd, 3);
Result := kbd;
end;




procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Shift = [ssShift, ssAlt] then
Caption := GetKeyboard;
end;


اما درست عمل نميكنه و انگار نسبت به عوض شدن نوع كيبورد عقبتر هست و هميشه زبان قبلي رو نشون ميده نه زبان فعال رو.
ممنون ميشم راهنماييم كنين

m-khorsandi
سه شنبه 26 شهریور 1387, 09:17 صبح
كاميار كدی كه نوشتی درست كار ميكنه،
شايد ميخوای وقتی كاربر توی فرم، زبان رو تغيير داد با Event مربوط به OnKeyDown فرم وضعيت كيبورد رو بدست بياری، احتمالاً تغيير زبان سيستم بعد از اجرای كدت انجام ميشه و به همين خاطر هميشه زبان قبلی رو نمايش ميده.

Kamyar.Kimiyabeigi
سه شنبه 26 شهریور 1387, 09:26 صبح
دقيقا" درست ميگين حالا نميشه كاري كرد؟

majid_ramak
سه شنبه 26 شهریور 1387, 10:42 صبح
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
S: string;
begin
if Shift = [ssShift, ssAlt] then
begin
S:= GetKeyboard;
if S = 'Far' then
Caption:= 'Eng'
else
Caption:= 'Far';
end;
end;

Kamyar.Kimiyabeigi
سه شنبه 26 شهریور 1387, 10:58 صبح
majid_ramak عزيز كدي كه شما نوشتين فقط براي حالتي كه ميدونيم بر روي كامپيوتر كاربر چه زبانهايي نصب هست جواب ميده. در صورتي كه ما نميدونيم چه زبانهايي بر روي كامپيوتر كاربر نصب هست

majid_ramak
سه شنبه 26 شهریور 1387, 11:10 صبح
اینش یکم مشکل شد، روش فکر می کنم اگه به جواب رسیدم پستش می کنم

m-khorsandi
سه شنبه 26 شهریور 1387, 11:12 صبح
با كد زير ميتونی ليست زبانهای موجود رو بدست بياری:


var
Count, i: Integer;
MyLang: PChar;
Layouts: array [0..16] of Integer;
const
Size: Integer = 250;
begin
GetMem(MyLang, Size);
Count:=GetKeyboardLayoutList(16, Layouts);
Memo1.Lines.Clear;
for i:=0 to Count-1 do
begin
VerLanguageName(Layouts[i], MyLang, Size);
Memo1.Lines.Add(StrPas(MyLang));
end;
FreeMem(MyLang);
end;

Kamyar.Kimiyabeigi
سه شنبه 26 شهریور 1387, 14:03 عصر
من اين نمونه برنامه رو براي چندين زبان مختلف كه نصب بود رو سيستم چك كردم درست كار ميكنه منتها بايد از Left Alt+Shift استفاده بشه همونطور كه تو setting خود Language bar گفته شده