![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
кодировка и clipboard [D7, WinXP]
lehich © (2005-05-18 14:25:00)копирую в буфер значение Memo.Text но при вставке в Word русские буквы отображаются неверно... сбивается кодировка, что делаю не правильно?
Заранее премного благодарен!
Alex Konshin (2005-06-01 12:34:00) [1]
const
CODEPAGE = 1251;
procedure SetClipboardText( const AText : String );
var
len, ulen : Integer;
hClip : THandle;
pClip : Pointer;
begin
if Win32Platform=VER_PLATFORM_WIN32_NT then
begin
len := Length(AText)+1;
ulen := len+len;
hClip := GlobalAlloc(GMEM_MOVEABLE,ulen);
if hClip=0 then raise Exception.Create(SysErrorMessage(GetLastError))
else
try
pClip := PWideChar(GlobalLock(hClip));
if pClip=nil then raise Exception.Create(SysErrorMessage(GetLastError))
else
begin
try
MultiByteToWideChar(CODEPAGE,0,PChar(AText),len,pClip,ulen);
finally
GlobalUnlock(hClip);
end;
Clipboard.SetAsHandle(CF_UNICODETEXT,hClip);
end;
except
GlobalFree(hClip);
raise;
end;
end
else
begin
Clipboard.SetTextBuf(PChar(AText));
SetClipboardData(CF_LOCALE,LANG_RUSSIAN);
end;
end;
scolopax (2005-06-01 11:46:00) [2]а как и где использовать этот CF_UNICODETEXT ?
alpet (2005-05-18 20:00:00) [3]GetKeyboardLayout ( 0 )) - дает описатель раскладки.
function KbdLayout: string;
const KL_NAMELENGTH = 9;
var name: array [0..KL_NAMELENGTH] of char;
begin
GetKeyboardLayoutName (name);
result := name;
end;
З.Ы. На консольных приложениях не работает.
lehich (2005-05-18 17:25:00) [4]сразу еще один вопрос:
переключаю раскладку клавиатуры используя -
LoadKeyboardLayout( StrCopy(Layout,'00000419'),KLF_ACTIVATE);
LoadKeyboardLayout(StrCopy(Layout,'00000409'),KLF_ACTIVATE);
а как проверить какая текущая раскладка?
lehich (2005-05-18 16:11:00) [5]сенкс!
VMcL (2005-05-18 14:58:00) [6]>> lehich © (18.05.05 14:25)
1. CF_UNICODETEXT
2. Переключать раскладку на русскую перед операцией копирования в буфер.