Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Clipboard


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

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


Alex Konshin   (2005-02-09 22:57:00) [1]

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


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

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

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


О как...


Alex Konshin   (2005-02-09 12:12:00) [3]

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

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


MBo   (2005-02-09 10:01:00) [4]

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

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


REA   (2005-02-09 09:42:00) [5]

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

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


MBo   (2005-02-09 07:45:00) [6]

Нужно занести текст в буфер в 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;


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

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

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

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

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


-=SS=-   (2005-02-08 21:01:00) [8]

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


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


> -=SS=- ©

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


-=SS=-   (2005-02-07 20:49:00) [10]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо