Главная страница
    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.039 c
3-1106667952
S.A.S.
2005-01-25 18:45
2005.02.27
UpplyUpdates. FireBird Embedded. DBExpress.


6-1103017032
Ivolg
2004-12-14 12:37
2005.02.27
Прекачка!


1-1107938331
hgd
2005-02-09 11:38
2005.02.27
Перевод миллисекунд в часы


4-1105647335
volser
2005-01-13 23:15
2005.02.27
Список процессов, которые инет юзают


1-1108140257
Zilog
2005-02-11 19:44
2005.02.27
Можно корректно ли удалить TabSheet, с содержимым?





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