View Full Version : مشکل تغییر زبان پیش فرض در کلیک دی بی گرید
Delphi2010
پنج شنبه 07 خرداد 1394, 07:46 صبح
با سلام
کسی با این مشکل روبرو شده یا نه که وقتی روی دی بی گرید کلیک کنه زبان پیش فرض در نرم افزار به زبان پیش فرض ویندوز تغییر کند ،
لطفا راهنمایی کنید.
Delphi2010
پنج شنبه 07 خرداد 1394, 10:31 صبح
این مشکل مربوط به همه ی برنامه نویسان دلفی 2009 به بالا می باشد ، چون من بیش از چند سیستم دلفی 2010 را نصب کردم در همه ی سیستم ها این مشکل را داشت ،
وقتی روی DBGride کلیک میشه زبان پیش فرض نرم افزار مثلا اگه فارسی هست به زبان پیش فرض ویندوز که انگلیسی هست بر می گردد .
در یونیت پروژه
//Application.BiDiKeyboard:='00000429';
// Application.NonBiDiKeyboard := '00000409';
کد بالا را اضافه کردم در ویندوز 7 زبان صفحه کلید روی یک زبان قفل میشه و یا سرعت سوئیچ کند میشه.
Delphi2010
دوشنبه 11 خرداد 1394, 15:19 عصر
لطفا سایت یا منبعی را برای جستجو معرفی کنید ، جستجو کردم چیزی پیدا نکردم در همین سایت هم صحبت شده ولی کامل نیست
meysam_212
جمعه 15 خرداد 1394, 14:33 عصر
من یه بار این مشکل رو داشتم ولی دقیقا یادم نمیاد چه کاری براش کردم
از این استفاده کن ببین درست میشه
LoadKeyboardLayoutW('00000429',KLF_ACTIVATE)
احتمالا فقط روی سیستم خدوت این مشکل باشه
یا اینکه current language for non-Unicode program رو انگلیسی کن و دوباره فارسی کن، هر بارم ریستارت کن
درست شد خبرش رو بده
Delphi2010
جمعه 15 خرداد 1394, 15:20 عصر
روش
LoadKeyboardLayoutW('00000429',KLF_ACTIVATE
فرقی نداره بارها تست کردم ،
روی دوسیستم دیگه هم نصب کردم و مشکل از سیستم من نیست.
روش زیر را در کد پروژه قرار دادم جواب می ده ولی در ویندوز 7 کند میشه و یا اپوراتور زیاد ورود اطلاعات میکنه تغییر زبان قفل میکنه و از فارسی به انگلیسی دیگه بر نمی گرده
Application.BiDiKeyboard:='00000409';
Application.NonBiDiKeyboard := '00000429';
meysam_212
شنبه 16 خرداد 1394, 09:42 صبح
روش
LoadKeyboardLayoutW('00000429',KLF_ACTIVATE
فرقی نداره بارها تست کردم ،
روی دوسیستم دیگه هم نصب کردم و مشکل از سیستم من نیست.
روش زیر را در کد پروژه قرار دادم جواب می ده ولی در ویندوز 7 کند میشه و یا اپوراتور زیاد ورود اطلاعات میکنه تغییر زبان قفل میکنه و از فارسی به انگلیسی دیگه بر نمی گرده
Application.BiDiKeyboard:='00000409';
Application.NonBiDiKeyboard := '00000429';
//Application.BiDiKeyboard:='00000429';
// Application.NonBiDiKeyboard := '00000409';
این کدارو کجا قرار دادی؟
Delphi2010
شنبه 16 خرداد 1394, 12:27 عصر
این کدها را در یونیت پروژه قراردادم.
//Application.BiDiKeyboard:='00000429';
// Application.NonBiDiKeyboard := '00000409';
Delphi2010
یک شنبه 24 خرداد 1394, 06:18 صبح
مشکل را حل کردم :
وارد یونیت DBGrids.pas می شویم یک تابع بصورت زیر هست :
procedure TCustomDBGrid.WMKillFocus(var Message: TMessage);
begin
ImeName := Screen.DefaultIme;
ImeMode := imDontCare;
inherited;
if not ((InplaceEditor <> nil) and
(HWND(Message.WParam) = InplaceEditor.Handle)) then
ActivateKeyboardLayout(Screen.DefaultKbLayout, KLF_ACTIVATE);
end;
بجای کد های بالا کد های زیر را در تابع بالا جایگزین و سپس ذخیر می کنیم :
procedure TCustomDBGrid.WMKillFocus(var Message: TMessage);
var kblayout: HKL;
begin
kblayout := GetKeyboardLayout(0);
ImeName := Screen.DefaultIme;
ImeMode := imDontCare;
inherited;
if not ((InplaceEditor <> nil) and
(HWND(Message.WParam) = InplaceEditor.Handle)) then
ActivateKeyboardLayout(kblayout, KLF_ACTIVATE);
end;
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.