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

Вниз

Передача текста из буфера обмена по сети   Найти похожие ветки 

 
Chaser ©   (2006-05-03 15:04) [0]

Передаю текстовые данные из буфера обмена с помощью Indy idTCPClient и idTCPServer.
При передаче серверу латинского текста, сервер принимает его в нормальном виде.
Если передавать кириллицу например из Memo, то все также ОК.

Если же брать такст из буфера обмена - Str.Text:=ClipBoard.AsText;, то на сервер все передается в сбитой кодировке (всякая абракодабра).

Хотя в Str.Text из буфера записываеься нормальный русский текст (ели смотреть отладчиком).

В чем может быть проблема?


 
Alex Konshin ©   (2006-05-03 15:16) [1]

В кодовой странице. Это известная проблема и я когда-то даже приводил конкретное место в исходниках Delphi, где собака порылась. Но сейчас не помню где. Помню, что связано с установкой кодовой страницы для текущей нити.

procedure SetClipboardText(s:string);
type PDWord = ^DWord;
var
 i : integer;
 StrPtr,LocPtr : PChar;
 StrHandle,LocHandle: THandle;
begin
 i := Length(s);
 StrHandle:=GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE,i+1);
 if StrHandle=INVALID_HANDLE_VALUE then RaiseLastWin32Error;
 try
   StrPtr:=GlobalLock(StrHandle);
   if StrPtr=nil then RaiseLastWin32Error;
   try
     LocHandle:=GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE,SizeOf(DWord));
     if LocHandle=INVALID_HANDLE_VALUE then RaiseLastWin32Error;
     try
       LocPtr:=GlobalLock(LocHandle);
       if LocPtr=nil then RaiseLastWin32Errorж
       try
         Move((@s[1])^,StrPtr^,i); (StrPtr+i)^ := #0;
         PDWord(LocPtr)^ := (DWord(SORT_DEFAULT) shr 16) or
           (SUBLANG_DEFAULT shl 10) or LANG_RUSSIAN;
         Win32Check(OpenClipboard(0));
         try
           Win32Check(EmptyClipboard);
           if SetClipboardData(CF_TEXT,StrHandle)=0 then
             RaiseLastWin32Error;
           if SetClipboardData(CF_LOCALE,LocHandle)=0 then
             RaiseLastWin32Error;
         finally
           CloseClipboard;
         end;
       finally
         GlobalUnlock(LocHandle);
       end;
     except
       GlobalFree(LocHandle);
       raise;
     end;
   finally
     GlobalUnlock(StrHandle);
   end;
 except
   GlobalFree(StrHandle);
   raise;
 end;
end;


 
Chaser ©   (2006-05-03 15:24) [2]

Спасибо!
Как раз то что нужно!



Страницы: 1 вся ветка

Текущий архив: 2006.09.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.05 c
4-1147860119
Izyum
2006-05-17 14:01
2006.09.17
Работа с физической памятью


15-1156709569
Дураг
2006-08-28 00:12
2006.09.17
Встретишь феминистку – убей ее или лекарство от феминизма.


15-1156327419
dera
2006-08-23 14:03
2006.09.17
Вопрос для тех, кто учился на Украине.


15-1156369077
jack128
2006-08-24 01:37
2006.09.17
Планеты Плутон больше нет...


4-1147929968
vodvorezlaya
2006-05-18 09:26
2006.09.17
Помогите разобраться с COM портом