EagleXK
Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Вот, попытался написать плагин, который заменяет английскую раскладку на русскую и наоборот. Даже это не получилось: Цитата: library ChangeKeyboardLayout; uses Windows, SysUtils; function ShellExecute(hWnd: HWND; Operation, FileName, Parameters, Directory: PChar; ShowCmd: Integer): HINST; stdcall; external 'Shell32.dll' name 'ShellExecuteA'; function Init(hWndMain,hClientWnd:HWND;lpReserved:DWORD;lpParam:Pointer):DWORD;cdecl; begin Result:=1; end; function PluginName:LPWSTR;cdecl; begin Result:='Change Keyboard Layout Plugin'; end; function MenuItemName:LPWSTR;cdecl; begin Result:='Change Keyboard Layout'; end; function MenuItemNameRus:LPWSTR;cdecl; begin Result:='Изменить раскладку клавиатуры'; end; const EM_GETSEL: Word = $B0; EM_SETSEL: Word = $B1; EM_REPLACESEL: Word = $C2; EM_GETSELTEXT: Word = $400 + 62; function DoMyJob(hWndMain,hClientWnd,hActiveRtfWnd:HWND;lpReserved:DWORD;lpParam:Pointer):DWORD;cdecl; var SelStart, SelEnd, SelLen: Integer; Selection: array of WideChar; begin Result:=0; SendMessage(hActiveRtfWnd, EM_GETSEL, wParam(LPDWORD(@SelStart)), lParam(LPDWORD(@SelEnd))); if SelStart = SelEnd then Exit; SelLen := SelEnd - SelStart; if SelLen < 0 then SelLen := -SelLen; SetLength(Selection, SelLen + 2); ZeroMemory(Selection, (SelLen + 2) * SizeOf(WideChar)); SendMessage(hActiveRtfWnd, EM_GETSELTEXT, 0, lParam(Selection)); {DEBUG}SendMessage(hActiveRtfWnd, EM_SETSEL, wParam(SelStart), lParam(SelStart+2)); SendMessage(hActiveRtfWnd,EM_REPLACESEL, 1, lParam(LPCSTR(Selection))); // SendMessage(hActiveRtfWnd, EM_SETSEL, wParam(SelStart), lParam(SelEnd)); (* ::SendMessage(hActiveRtfWnd, EM_GETSELTEXT, 0, (LPARAM)pBuf); ::SendMessage(hActiveRtfWnd,EM_REPLACESEL,TRUE,(LPARAM)(LPCTSTR)pBuf); ::SendMessage(hActiveRtfWnd, EM_SETSEL, (WPARAM)selstart, (LPARAM) selend); *) Result:=1; end; function Setup(dwReserved:DWORD;lpReserved:Pointer):DWORD;cdecl; begin Result:=1; end; exports Init,PluginName,MenuItemName,MenuItemNameRus,DoMyJob,Setup; begin end. | Передирал из сишного примера СДК... |