![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Замена буфера обмена [D5, D6, D7, NT4, Win2k, WinXP]
buben © (2007-05-25 16:52:00)Изменяю буфер обмена
[code]
procedure CopyStringToClipboard(s: string);
var
hg: THandle;
P: PChar;
begin
hg:=GlobalAlloc(GMEM_DDESHARE or GMEM_MOVEABLE, Length(S)+1);
P:=GlobalLock(hg);
StrPCopy(P, s);
GlobalUnlock(hg);
OpenClipboard(0);
SetClipboardData(CF_TEXT, hg);
CloseClipboard;
GlobalFree(hg);
end;
[/code]
Но этот изменённый буфер, в дальнейшем, вставляется не во все приложения, есть такие, в которые он вставляется, как захваченный до изменения. Как реализовать вставку во все приложения?
Пробовал так,
[code]
SetClipboardData(CF_TEXT, hg);
SetClipboardData(CF_LOCALE, hg);
SetClipboardData(CF_OEMTEXT, hg);
[/code]
результат прежний.
Сергей М. (2007-05-28 10:07:00) [1]
procedure TClipboard.SetBuffer(Format: Word; var Buffer; Size: Integer);
var
Data: THandle;
DataPtr: Pointer;
begin
Open;
try
Data := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, Size);
try
DataPtr := GlobalLock(Data);
try
Move(Buffer, DataPtr^, Size);
Adding;
SetClipboardData(Format, Data);
finally
GlobalUnlock(Data);
end;
except
GlobalFree(Data);
raise;
end;
finally
Close;
end;
end;
ElectriC (2007-05-27 02:59:00) [2]Удалено модератором
ElectriC (2007-05-27 02:57:00) [3]
> Belorus ©
Это, типа, крутое объявление того, что дальше идёт исходник ;)))))))))
Belorus (2007-05-26 12:05:00) [4]А что за модный тег [code] ?