چند روز پيش يکي از دوستان با من تماس گرفت و سوالي از من کرد.
سوال ايشون اين بود: يک برنامه را مي خواهيم با دلفي 2010 کامپايل کنيم. اين برنامه شامل يک DBGrid و يک کنترل ديگه مثل Edit هستش. حال اگر در زمان اجرا، Layout کيبورد رو عوض کنيم، مثلا به فارسي تغيير بديم و از DBGrid خارج بشيم، Layout کيبورد، هنگام خارج شدن به حالت اولش برمي گرده. حالا چطور ميشه جلوي اين کار رو گرفت.
حالا خود من به اين مشکل برخوردم و به روش زير حلش کردم:
اول به "source\Win32\db" در مسير نصب دلفي بريد، به عنوان مثال
C:\Program Files (x86)\Embarcadero\RAD Studio\7.0\source\Win32\db
فايل DBGrids.pas رو پيدا کنيد و به مسير ديگري کپي کنيد.
در فايلي که کپي کرديد، دنبال پروسيجر "TCustomDBGrid.WMKillFocus" بگرديد. که به صورت زير نوشته شده
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;
حالا بايد اين فايل رو کامپايل کنيد. براي اين کار اين فايل رو در پوشه پروژتون قرار بديد و کل برنامه را Build کنيد.
شاد باشيد.
شاد باشيد.