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

Вниз

Clipboard   Найти похожие ветки 

 
Алексей Петухов   (2005-02-07 20:43) [0]

Здравствуйте, уважаемые мастера.
Вот такая проблема:
Хочу програмно поместить в clipboard текст:
Clipboard.AsText:=StringList.Text;
все нормально, но при вставке, к примеру в Word, вместо кирилицы кракозябры :-)
Помогите побороть кодировку...


 
-=SS=- ©   (2005-02-07 20:49) [1]

У тебя наверное winxp ... Это её проблемы ... при копировании и вставке необходимо чтобы была русская раскладка клавиатуры.
 Если я правильно понял вопрос ... при латынских буквах всё должно быть ок.


 
Алексей Петухов   (2005-02-08 18:35) [2]


> -=SS=- ©

Вы правы: Win XP, но в независимости от раскладки
Вместо русских букв - кракозябры.
Пример:
Îò÷åò - Отчет
Ïîäôîðìà1 - Подформа
Ê - К


 
-=SS=- ©   (2005-02-08 21:01) [3]

Да при занесении в буфер при анг. раскладке получаеться чёрти-что но если копировать при рус. то у меня всё ок.


 
Алексей Петухов   (2005-02-09 06:49) [4]

У меня при любой раскладке - такая ерунда.
Может различия в ситуации с -=SS=- в том, что у меня на используется ctfmon.exe.

Дело в том, что программулька должна работать хотя-бы в WXP и W98 при различных конфигурациях ОС, а так-же независимо от текущей раскладки.

Может будут советы или предложения как решить эту проблему с учетом такой "маштабируемости"

Заранее благодарен.


 
MBo ©   (2005-02-09 07:45) [5]

Нужно занести текст в буфер в UNICODE-формате
Хороший пример от Alex Konshin ©  :


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;


 
REA   (2005-02-09 09:42) [6]

Видел компонент на королевстве, который заменяет стандартный Clipboard и можно пользоваться обычными функциями. Делает он почти тоже самое - копирует текст и отдельно информацию о Codepage.

PS: Exception.Create(SysErrorMessage(GetLastError)) не тоже самое что RaiseLastOSError?


 
MBo ©   (2005-02-09 10:01) [7]

>PS: Exception.Create(SysErrorMessage(GetLastError)) не тоже самое что RaiseLastOSError?

Практически то же самое


 
Alex Konshin ©   (2005-02-09 12:12) [8]

Но не зависит от версии Delphi.

От ведь, и тут за меня все сказали...


 
Алексей Петухов   (2005-02-09 18:16) [9]

Огромное спасибо за помощь.
Код от Alex Konshin © спас отца руской демократии © :-)
Но надо-бы добавить:
const
 CODEPAGE=CP_ACP;
.

Какими не были-б напасти -
Всегда поможет DelphiMaster!


О как...


 
Alex Konshin ©   (2005-02-09 22:57) [10]

IMHO, ты не прав.
Если мне склероз не изменяет, то CP_ACP это умолчиваемая CP, который может быть вовсе не тем, что ты думаешь. Если ты знаешь, что ты работаешь с русским текстом, то и для CODEPAGE установи явно русскую страницу - 1251.
Короче, дело твое, но я вас предупреждал.



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

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

Наверх




Память: 0.49 MB
Время: 0.031 c
1-1108338095
neXOR
2005-02-14 02:41
2005.02.27
Вызов процедуры для динамического объекта


1-1108475127
Muh
2005-02-15 16:45
2005.02.27
Как связать расширение файла с моей программой


14-1107432469
Ega23
2005-02-03 15:07
2005.02.27
Я плакал!


9-1102088422
San'ka
2004-12-03 18:40
2005.02.27
Описание концепции игры кликомания.


1-1107967914
alexa
2005-02-09 19:51
2005.02.27
Динамическое меню