![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 ... Это её проблемы ... при копировании и вставке необходимо чтобы была русская раскладка клавиатуры.
Если я правильно понял вопрос ... при латынских буквах всё должно быть ок.