![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Копирование из clipboard с указанием языка текста [D5, D6, D7, Win95/98, WinME, NT4, Win2k, WinXP]
YuVoUA © (2003-04-21 16:49:00)Каким образом сгенерировать текст на русском языке в clipboard, чтобы он потом корректно отображался после вставки в Notepad или Ms Word ?
После использования такой процедуры:
Clipboard.AsText := "Это тест";
и последующей вставки текста в Notepad или Ms Word текст отображается некорректно и это нельзя изменить в Ms Word принудительной установкой языка текста.
Alex Konshin (2003-04-22 08:00: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;
Alex Konshin (2003-04-22 03:20:00) [2]2AP: Я четко помню, что нужно делать по-разному под W9x и под NT+. И еще это также работает по-разному с разными версиями с MS Office.
И у меня дома есть кусок кода, который точно хорошо работает под обоими семействами систем. Вообще-то я когда-то кидал его в ФИДО и он разошелся, так что если поискать, то можно найти.
Дойду до дому - заброшу.
YuVoUA (2003-04-21 18:45:00) [3]Большое спасибо !!!
Anatoly Podgoretsky (2003-04-21 18:10:00) [4]procedure TForm1.Button1Click(Sender: TObject);
const
RusLocale = SUBLANG_DEFAULT shl 10 or LANG_RUSSIAN;
var
Mem: THandle;
P: Pointer;
begin
Clipboard.Open;
Clipboard.AsText := "Русский текст в кодировке ANSI 1251";
Mem := GlobalAlloc(GMEM_MOVEABLE, SizeOf(DWORD));
P := GlobalLock(Mem);
DWORD(P^) := RusLocale;
GlobalUnlock(Mem);
Clipboard.SetAsHandle(CF_LOCALE, Mem);
Clipboard.Close;
end;
MBo (2003-04-21 17:13:00) [5]Сформировать юникодную строку и setashandle
Можно и тупо переключать раскладку клавы на русский перед копированием