PDA

View Full Version : تغییر توماتیک زبان از فارسی به انگلیسی



Batman
چهارشنبه 18 آذر 1388, 06:26 صبح
با سلام
من زمانیکه برنامه رو Run میکنم از کد زیر برای فارسی کردن برنامه استفاده میکنم:

LoadKeyboardLayout('00000429',1);
اما نمیدونم چرا بعضی اوقات به صورت اتوماتیک زبان فارسی به انگلیسی تبدیل میشه(EN به Fa تبدیل میشه).
با تشکر

Batman
پنج شنبه 19 آذر 1388, 06:05 صبح
آقا تورو خدا یکی جواب بده.
لااقل کدهای مشابه رو بذارید شاید درست شد

Felony
پنج شنبه 19 آذر 1388, 06:37 صبح
میخوای اول چک کن اگه فارسی نبود بعد فارسیش کن ، توسط کد زیر میتونی چک کنی زبان فارسی هست یا نه :


if GetKeyBoardLayout(0)=69796905 then

Felony
پنج شنبه 19 آذر 1388, 06:40 صبح
این هم یک روال برای تغییر زبان :


type
TLanguage=(Farsi, English);



procedure TForm1.SetLanguage (Lan:TLanguage) ;
begin
if Lan = Farsi then
Begin
If HIBYTE(LOWORD(GetVersion)) = 0 Then
LoadKeyBoardLayout ( '00000429', KLF_ACTIVATE)
Else LoadKeyBoardLayout ( '00000429', KLF_ACTIVATE)
End
else

نحوه ی استفاده :


SetLanguage(Farsi);
SetLanguage(English);

MToloo
یک شنبه 22 آذر 1388, 18:25 عصر
اين هم يك كد ديگه:

function GetLangName: string;
var
a: array[0..9] of Char;
begin
GetKeyboardLayoutName(a);
Result:= a;
end;

function IsArabic: Boolean;
begin
Result:= GetLangName= '00000401';
end;
function IsEnglish: Boolean;
begin
Result:= GetLangName= '00000409';
end;
function IsFarsi: Boolean;
begin
Result:= GetLangName= '00000429';
end;
function SetFarsi: boolean;
var
Count: integer;
begin
Count:= 0;
{Try to set Farsi}
while (not IsFarsi) and (Count< 5) do
begin
ActivateKeyboardLayout(HKL_NEXT, 0);
inc(Count);
end;

{If failed try to set arabic}
if Count>= 5 then
begin
Count:= 0;
while (not (IsArabic or IsFarsi)) and (Count< 5) do
begin
ActivateKeyboardLayout(HKL_NEXT, 0);
inc(Count);
end;
end;

Result:= Count< 5;
end;
function SetEnglish: Boolean;
var
Count: integer;
begin
Count:= 0;
while (not IsEnglish) and (Count< 5) do
begin
ActivateKeyboardLayout(HKL_NEXT, 0);
Inc(Count);
end;
Result:= Count< 5;
end;

masoud_z_65
سه شنبه 24 آذر 1388, 22:06 عصر
من این کد رو توی رویداد onshow فرم اصلی گزاشتم و هروت برنامه اجرا میشه زبان فارسی میشه و مشکلی نداره
یکی از بچه های سایت گزاشته بود


Application.BiDiKeyboard:='00000429';

1سوال؟
هرجای خاصی از برنامه بخوام انگلیسی بشه مثلا وقتی کاربر یک Edit خاص را کلیک کرد باید چیکار کنم؟
رویداد Onclick رو بنویسم؟؟؟؟
اگه درست گفتم برا انگلیسی کدش چیه؟؟؟
بجای 00000429 برا انگلیسی چیه؟؟

Pr0grammer
سه شنبه 24 آذر 1388, 22:11 عصر
هرجای خاصی از برنامه بخوام انگلیسی بشه مثلا وقتی کاربر یک Edit خاص را کلیک کرد باید چیکار کنم؟


از این کد استفاده کنید :

Application.BiDiKeyboard:='00000409';
رویداد Onclick رو بنویسم؟؟؟؟هر جا که بخواین می تونید از این کد استفاده کنید، مثلا در OnClick یک شئ یا OnEnter یک Edit و ...

masoud_z_65
پنج شنبه 26 آذر 1388, 02:03 صبح
من توی show فرم اصلی این کد رو گزاشتم:

Application.BiDiKeyboard:='00000409';

ام توی جاهای خاصی میخواستم به انگلیسی عوض نمیشد

ام از تابع دوست عزیز silver soft استفاده کردم درست شد:

procedure TForm_system.SetLanguage (Lan:TLanguage) ;
begin
if Lan = Farsi then
Begin
If HIBYTE(LOWORD(GetVersion)) = 0 Then
LoadKeyBoardLayout ( '00000429', KLF_ACTIVATE)
Else LoadKeyBoardLayout ( '00000429', KLF_ACTIVATE)
End
else LoadKeyBoardLayout ( '00000409', KLF_ACTIVATE)

end;

procedure TForm_system.Edit5Click(Sender: TObject);
begin
// LoadKeyboardLayout('00000429',1);
SetLanguage(English);
end;