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

Вниз

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

Наверх





Память: 0.47 MB
Время: 0.051 c
1-1108236277
TBeginner
2005-02-12 22:24
2005.02.27
Cохранить в файл содержимое TListView


1-1108374954
Marat
2005-02-14 12:55
2005.02.27
MaskEdit


1-1108128503
Джинн
2005-02-11 16:28
2005.02.27
Поведение Debuger а


9-1101386017
Pentium133
2004-11-25 15:33
2005.02.27
3D Action или PBEM


1-1108402517
Гость
2005-02-14 20:35
2005.02.27
Почему не прорисовывается форма?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский