دوست عزیز این برنامه شما پیش فرض زبانش فارسی هست و اون دکمه کار خاصی نیز انجام نمیده.
نخیر دوست عزیز وقتی برنامه من رو اجرا میکنید زبان پیشفرض ویندوز برای برنامه من روی EN قرار میگیره و من اومدم تو رویداد OnEnter ادیتم دستور ابتکاری خودم رو قرار دادم تا وقتی فوکوسش میکنید زبان سیستم رو به فارسی تغییر بده و اون دکمه هم که قرار دادم برای این بود که اگه خواستین مدام تغییر زبان ادیت رو تست کنید نیاز نباشه مدام خودتون زبان سیستم رو تغییر بدین و دستورات توی دکمه هم زبان سیستم رو برای برنامه من روی EN تغییر میده اگه هم توجه کنید وقتی روی دکمه برای تغییر زبان به انگلیسی کلیک میکنید به هیچ وجه برنامه فریز نمیشه و سریع عمل تغییر زبان انجام میشه.
بله اینم کدی که من تو رویداد OnEnter ادیت نوشتم:
procedure TForm1.Edit1Enter(Sender: TObject);
var
i: Longint;
AList: array [0..9] of Hkl;
b: Longint;
GKLN: array [0..8] of Char;
begin
i := GetKeyboardLayoutList(SizeOf(AList), AList);
for b:=1 to i do begin
GetKeyboardLayoutName(GKLN);
if GKLN='00000429' then GKLN:='FA';
if GKLN<>'FA' then begin
ActivateKeyboardLayout(HKL_PREV ,0);
end else begin
break;
end;end;end;
ضمنا دلیل اینکه تو تابع ActivateKeyboardLayout به جای HKL_NEXT از HKL_PREV استفاده کردم این بود که اگه شما تو ویندوز چه 7 و چه XP زبانهای دیگری رو اضافه کنید با پارامتر HKL_NEXT به مشکل برمیخورین مثلا شما 3 یا 4 تا زبان یا بیشتر رو نصب کرده باشین بین دو زبان گیر میکنید مثلا بین EN و FA پس اگه از HKL_PREV استفاده کنید این مشکل بوجود نمیاد و میشه زبان دیگری رو انتخاب کرد.