Проблема кодировок
От: crazibill  
Дата: 25.09.04 12:32
Оценка:
Часто возникает проблема при передаче строки содержащей русские символы из приложение Delphi в другое приложение (Word, Excel) через буфер обмена (TClipboard), русские символы при этом превращаются в кашу из знаков препинания, вопросов и символов какого-то неизвестного языка .
С чем это связано, и как с этим бороться ?
Re: Проблема кодировок
От: alive Россия  
Дата: 25.09.04 16:51
Оценка:
Здравствуйте, 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>>
Keep yourself alive
Re: Проблема кодировок
От: Slava Antonov Россия http://deadbeef.narod.ru
Дата: 26.09.04 01:24
Оценка:
Hello crazibill, you wrote:

> Часто возникает проблема при передаче строки содержащей русские символы

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

Насколько мне известно, буфер обмена считает, что обычный текст написан на
языке который является на момент копирования активным. Отсюда и возникают
проблемы.

--
Всего хорошего, Слава
http://slava.users.otts.ru
Posted via RSDN NNTP Server 1.9 gamma
Re: Проблема кодировок
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 26.09.04 05:59
Оценка:
А Вы запихивайте в буфер уникодный текст, иначе идет привязка к текущему языку и т.п..

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[2]: Проблема кодировок
От: Diouzshev Россия  
Дата: 27.09.04 08:51
Оценка:
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
Re[3]: Проблема кодировок
От: Slava Antonov Россия http://deadbeef.narod.ru
Дата: 27.09.04 13:32
Оценка:
Hello Diouzshev, you wrote:

>> А Вы запихивайте в буфер уникодный текст, иначе идет привязка к

>> текущему языку и т.п..
> А как отловть то, что текст, например, из TMemo копируется в буфер
> обмена?

Я так полагю — обработать WM_COPY.

--
Всего хорошего, Слава
http://slava.users.otts.ru
Posted via RSDN NNTP Server 1.9 gamma
Re[2]: Проблема кодировок
От: crazibill  
Дата: 27.09.04 17:06
Оценка:
Здравствуйте, 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) тоже может быть, как быть в данном случае?
Как узнать какие языки стоят на машине и их коды?

Заранее благодарен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.