Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.044 c
15-1156396740
konrads
2006-08-24 09:19
2006.09.17
Ридеры магнитных карт


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


15-1156908198
Slider007
2006-08-30 07:23
2006.09.17
Случай на работе


2-1157090505
Rubey
2006-09-01 10:01
2006.09.17
Справочник в виде дерева


1-1154430550
Redline
2006-08-01 15:09
2006.09.17
игнорирование ошибок





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский