Форум: "Основная";
Текущий архив: 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