Часто возникает проблема при передаче строки содержащей русские символы из приложение Delphi в другое приложение (Word, Excel) через буфер обмена (TClipboard), русские символы при этом превращаются в кашу из знаков препинания, вопросов и символов какого-то неизвестного языка

.
С чем это связано, и как с этим бороться ?
Здравствуйте, crazibill, Вы писали:
C>С чем это связано, и как с этим бороться ?
Вот рабочая процедура (когда-то нашел на Мастерах Delphi)
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(1251,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;
Только для русского языка, но можно переделать под любой другой

... << RSDN@Home 1.1.4 beta 3 rev 190 >> <<silent>>
Hello crazibill, you wrote:
> Часто возникает проблема при передаче строки содержащей русские символы
> из приложение Delphi в другое приложение (Word, Excel) через буфер
> обмена (TClipboard), русские символы при этом превращаются в кашу из
> знаков препинания, вопросов и символов какого-то неизвестного языка
.
> С чем это связано, и как с этим бороться ?
Насколько мне известно, буфер обмена считает, что обычный текст написан на
языке который является на момент копирования активным. Отсюда и возникают
проблемы.
--
Всего хорошего, Слава
http://slava.users.otts.ruPosted via RSDN NNTP Server 1.9 gamma
А Вы запихивайте в буфер уникодный текст, иначе идет привязка к текущему языку и т.п..
Slicer
Hello, Slicer!
You wrote on Sun, 26 Sep 2004 05:59:58 GMT:
SM> А Вы запихивайте в буфер уникодный текст, иначе идет привязка к
SM> текущему языку и т.п..
А как отловть то, что текст, например, из TMemo копируется в буфер обмена?
With best regards, Alexander Diouzshev-Maltsev.
Posted via RSDN NNTP Server 1.9 gamma
Hello Diouzshev, you wrote:
>> А Вы запихивайте в буфер уникодный текст, иначе идет привязка к
>> текущему языку и т.п..
> А как отловть то, что текст, например, из TMemo копируется в буфер
> обмена?
Я так полагю — обработать WM_COPY.
--
Всего хорошего, Слава
http://slava.users.otts.ruPosted via RSDN NNTP Server 1.9 gamma
Здравствуйте, alive, Вы писали:
A>Здравствуйте, crazibill, Вы писали:
C>>С чем это связано, и как с этим бороться ?
A>Вот рабочая процедура (когда-то нашел на Мастерах Delphi)
A>A>procedure SetClipboardText(const AText : String);
A>var
A> len, ulen : Integer;
A> hClip : THandle;
A> pClip : Pointer;
A>begin
A>..................
A>end;
A>
A>Только для русского языка, но можно переделать под любой другой
Спасиб вроде работает
Вот такая еще мысь у меня возникла: если это с русским так значит из с други языками (не eng) тоже может быть, как быть в данном случае?
Как узнать какие языки стоят на машине и их коды?
Заранее благодарен.