Главная страница
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.034 c
15-1156709967
Petr V. Abramov
2006-08-28 00:19
2006.09.17
Еще раз про откаты


15-1156580689
Yura32
2006-08-26 12:24
2006.09.17
Срочно нужна книга по БД для начинаюших


15-1156851900
Zhekson
2006-08-29 15:45
2006.09.17
File Access Denied


3-1152805342
juice
2006-07-13 19:42
2006.09.17
2 датасета и ApplyUpdates


1-1154941352
Ega23
2006-08-07 13:02
2006.09.17
ImageList и типы bmp