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

Вниз

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

 
Aleksandr.   (2005-05-19 18:54) [0]

Пришлось повесить свой обработчик на Ctrl+C и копирование в программе:

var
 s : string;
begin
 s:="";
 if (Screen.ActiveControl IS TDBGrid)
 AND (TDBGrid(Screen.ActiveControl).SelectedField<>nil) then
   s:=TDBGrid(Screen.ActiveControl).SelectedField.DisplayText
 else if (Screen.ActiveControl IS TCustomEdit) then
   s:=TCustomEdit(Screen.ActiveControl).SelText
 else if (Screen.ActiveControl IS TCustomComboBox) then
   s:=TCustomComboBox(Screen.ActiveControl).SelText
 else if (Screen.ActiveControl IS TCustomMemo) then
   s:=TCustomMemo(Screen.ActiveControl).SelText;
 if s<>"" then
   ClipBoard.AsText:=s
end

Но у копируемого текста ломается кодировка - при вклейке из буфера на сайт, в ворд и т.д., вместо, например, "меридиан" отображается "&#236;&#229;&#240;&#232;&#228;&#232;&#224;&#237;", а вот в доки 1С - все правильно. В чем тут проблема и как ее лечить?


 
SteppesSon ©   (2005-05-20 09:34) [1]

Попробуй поменять программно раскладку клавиатуры на русский перед копированием в буфер


 
Aleksandr.   (2005-05-20 11:41) [2]

Хм. Вот когда раскладку вручную меняешь на русскую, то все нормально становится, а когда программно - фигня, нет эффекта.


 
REA   (2005-05-20 14:22) [3]

Например так (цитата):
const
CODEPAGE = 1251;

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(CODEPAGE,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;



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

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

Наверх




Память: 0.47 MB
Время: 0.037 c
1-1116495478
Delphi_is_cool
2005-05-19 13:37
2005.06.06
Как убрать иконку с формы ?


3-1115092792
hawkins
2005-05-03 07:59
2005.06.06
Как у interbase базы данных определить диалект с которым она созд


14-1116494164
BJValentine
2005-05-19 13:16
2005.06.06
Описалово компонентов RxLib


3-1114769959
DIS
2005-04-29 14:19
2005.06.06
Мастера помогите пожайлуста составить SQL запрос


1-1116631879
Masta Hookah
2005-05-21 03:31
2005.06.06
Canvas