Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизКак скопировать строку WideString в ClipBoard и обратно Найти похожие ветки
← →
Галин А.М. (2004-04-08 22:24) [0]Если бы не широкие символы, то можно использовать
метод Assign Клипбоарда и его свойство AsText,
однако с юникодными символами это не работает,
особенно если они не со стандартной страницы Windows
(см таблицу символов)
Установка в систему юникодных шрифтов необходимое, но не
достаточное условие.
Посоветуйте что-нибудь, ведь вопрос достаточно стандартный.
Заранее благодарен.
← →
Романов Р.В. © (2004-04-09 07:05) [1]REA © (24.10.03 09:12)
Из форума (надо в FAQ вынести):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;
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 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.045 c