|
Вопрос # 2 485/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Помогите, пожалуйста, с "переводом" данной функции под Delphi 2009. Пробовал по-разному менять преобразование строковых типов, пересчёт длины через SizeOf - так и не получилось, в буфере обмена кракозябры всё время.
P.S. Использование модуля Clipbrd не предлагать - у него есть проблемы, потому и намеренно отказался от него. Аналогичную функцию для получения текста из буфера адаптировать под D2009 удалось.
Приложение: Переключить в обычный режим- function SetClipboardText(Wnd: HWND; Value: string): Boolean;
- var
- hData: HGlobal;
- pData: pointer;
- Len: integer;
- begin
- Result := True;
- if OpenClipboard(Wnd) then
- begin
- try
- Len := Length(Value) + 1;
- hData := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, Len);
- try
- pData := GlobalLock(hData);
- try
- Move(PChar(Value)^, pData^, Len);
- EmptyClipboard;
- SetClipboardData(CF_Text, hData);
- finally
- GlobalUnlock(hData);
- end;
- except
- GlobalFree(hData);
- raise
- end;
- finally
- CloseClipboard;
- end;
- end
- else
- Result := False;
- end;
 |
Вопрос задал: Sunshine (статус: Посетитель)
Вопрос отправлен: 6 марта 2009, 09:48
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 21; последнее сообщение — 6 марта 2009, 16:20; участников в обсуждении: 2.
Страницы: [« Предыдущая] [1] [2]
|
Sunshine (статус: Посетитель), 6 марта 2009, 16:20 [#21]:
Тоже верно.
function SetClipboardText(Wnd: HWND; Value: string): Boolean;
var
hData: HGlobal;
pData: pointer;
Len,M: integer;
begin
Result := True;
if OpenClipboard(Wnd) then
begin
try
Len := Length(Value);
M:=Len*SizeOf(Char);
hData := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE or GMEM_ZEROINIT, M+2);
try
pData := GlobalLock(hData);
try
Move((@Value[1])^, pData^, M);
EmptyClipboard;
SetClipboardData(CF_UNICODETEXT , hData);
finally
GlobalUnlock(hData);
end;
except
GlobalFree(hData);
raise
end;
finally
CloseClipboard;
end;
end
else
Result := False;
end;
P.S. Репутацию, к сожалению, на данный момент не могу повысить - ограничение не позволяет.
|
Страницы: [« Предыдущая] [1] [2]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|