Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.30;
Скачать: CL | DM;

Вниз

Копирование из 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
14-97821
Knight
2003-06-11 22:11
2003.06.30
Есть тут те кто ещё помнит Diablo первой версии?


4-97920
Diamond Cat
2003-03-09 03:56
2003.06.30
Scrollbar, или спасите люди добрые


6-97767
Dober_m@N
2003-04-12 04:57
2003.06.30
как узнать IP если их несколько на 1 компьютере


1-97610
Skalp
2003-06-19 12:18
2003.06.30
Обычный пользователь и системный реестр


6-97768
wQH
2003-04-24 08:28
2003.06.30
TIdDNSresolver