![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
При копировании в буфер обмена строки портятся, как исправить?
Kolan © (2007-06-16 14:39:00)Копирую так:
Clipboard.SetTextBuf(PAnsiChar(SomeText));
SomeText русские символы
Вставляю, одини кракозябры, как правильно?
Kolan (2007-06-16 14:56:00) [1]> Вот содержимое недавней ветки, может подойдет:
А стандартная выходит не годится? :(
Kolan (2007-06-16 14:56:00) [2]> стандартная
В смысле Clipboard
Loginov Dmitry (2007-06-16 14:51:00) [3]Вот содержимое недавней ветки, может подойдет:
Не работает копирование в буфер в win9x
[0] A Programmer (26.05.07 16:10)
SelLen:= Length(ws);
if (SelLen > 0) then
begin
OpenClipboard(Application.Handle);
try
EmptyClipboard;
hg:=GlobalAlloc(GMEM_DDESHARE or GMEM_MOVEABLE, SelLen*2+2);
try
if (hg <> 0) then
begin
P:=GlobalLock(hg);
if P <> nil then
begin
Move(PWideChar(ws)^, P^, SelLen * 2 + 2);
SetClipboardData(CF_UNICODETEXT,hg);
end;
end;
finally
GlobalUnlock(hg);
GlobalFree(hg);
end;
finally
CloseClipboard;
end;
end;
В Win2000 всё работает, в win9x не происходит копирования в буфер, хотя переменная ws содержит юникод-символы.
Как это исправить?
[цитата]
--------------------------------------------------------------------------------
[1] begin...end © (26.05.07 17:30)
CF_UNICODETEXT
Windows NT/2000/XP: Unicode text format. Each line ends with a carriage return/linefeed (CR-LF) combination. A null character signals the end of the data.
(c) MSDN
[цитата]
--------------------------------------------------------------------------------
[2] A Programmer (26.05.07 18:02)
>CF_UNICODETEXT
Ясно,но я пробовал и CF_TEXT, всё равно не работает - указатель P указывает на адрес, по которому находится мусор или одни нули (если обнулить hg:=GlobalAlloc(GMEM_DDESHARE or GMEM_MOVEABLE or GMEM_ZEROINIT, SelLen*2+2);).
А как же поместить юникод в буфер обмена в win9x, опера ведь это как-то делает?
[цитата]
--------------------------------------------------------------------------------
[3] A Programmer (26.05.07 19:15)
Нашёл в чём дело:
GlobalFree(hg);
должен быть после
CloseClipboard;