Форум: "Начинающим";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];
ВнизБуфер обмена Найти похожие ветки
← →
webpauk © (2010-01-06 12:56) [0]Подскажите как отловить попадание информации в буфер обмена.
Через таймер - не катит!
← →
stas © (2010-01-06 13:15) [1]это?
http://www.delphisources.ru/pages/faq/base/clipboard_hook.html
← →
webpauk © (2010-01-06 13:34) [2]ок
← →
sniknik © (2010-01-06 14:00) [3]> это?
вряд ли. судя по второму его вопросу. автор за долгое время на форуме так и не научился задавать вопросы.
← →
Anatoly Podgoretsky © (2010-01-06 14:11) [4]Это навечно.
← →
Юрий Зотов © (2010-01-06 14:52) [5]> All
Хороший пример по ссылке в [1], но я бы поместил регистрацию/разрегистрацию вьювера не в обработчики событий OnCreate/OnDestroy, а в замещенные методы CreateWindowHandle/DestroyWindowHandle соответственно.
Иначе при пересоздании окна вьювера (а такое бывает нередко - например, при изменении стиля окна) его функциональность нарушится.
Короче, вот мой вариант (выдрано из какого-то старого примера):
type
TForm1 = class(TForm)
private
FNextViewer: HWND;
procedure WMChangeCBChain(var Message: TWMChangeCBChain); message WM_CHANGECBCHAIN;
procedure WMDrawClipboard(var Message: TWMDrawClipboard); message WM_DRAWCLIPBOARD;
protected
procedure CreateWindowHandle(const Params: TCreateParams); override;
procedure DestroyWindowHandle; override;
end;
uses
Clipbrd;
procedure TForm1.CreateWindowHandle(const Params: TCreateParams);
begin
inherited CreateWindowHandle(Params);
FNextViewer := SetClipboardViewer(Handle)
end;
procedure TForm1.DestroyWindowHandle;
begin
ChangeClipboardChain(Handle, FNextViewer);
inherited
end;
procedure TForm1.WMChangeCBChain(var Message: TWMChangeCBChain);
begin
with Message do
begin
Result := 0;
if Remove = FNextViewer then
FNextViewer := Next
else
if FNextViewer <> 0 then
Result := SendMessage(FNextViewer, Msg, Remove, Next)
end
end;
procedure TForm1.WMDrawClipboard(var Message: TWMDrawClipboard);
begin
if Clipboard.HasFormat(CF_TEXT) then
Caption := "Есть текст"
else
Caption := "Нет текста";
with Message do
if FNextViewer <> 0 then
Result := SendMessage(FNextViewer, Msg, 0, 0)
else
Result := 0
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c