Форум: "Система";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];
ВнизКопирование из clipboard с указанием языка текста Найти похожие ветки
← →
YuVoUA (2003-04-21 16:49) [0]Каким образом сгенерировать текст на русском языке в clipboard, чтобы он потом корректно отображался после вставки в Notepad или Ms Word ?
После использования такой процедуры:
Clipboard.AsText := "Это тест";
и последующей вставки текста в Notepad или Ms Word текст отображается некорректно и это нельзя изменить в Ms Word принудительной установкой языка текста.
← →
MBo (2003-04-21 17:13) [1]Сформировать юникодную строку и setashandle
Можно и тупо переключать раскладку клавы на русский перед копированием
← →
Anatoly Podgoretsky (2003-04-21 18:10) [2]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;
← →
YuVoUA (2003-04-21 18:45) [3]Большое спасибо !!!
← →
Alex Konshin (2003-04-22 03:20) [4]2AP: Я четко помню, что нужно делать по-разному под W9x и под NT+. И еще это также работает по-разному с разными версиями с MS Office.
И у меня дома есть кусок кода, который точно хорошо работает под обоими семействами систем. Вообще-то я когда-то кидал его в ФИДО и он разошелся, так что если поискать, то можно найти.
Дойду до дому - заброшу.
← →
Alex Konshin (2003-04-22 08:00) [5]Вот так это у меня выглядит.
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;
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c