Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.03.07;
Скачать: CL | DM;

Вниз

Буфер обмена   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
3-1235913922
sco
2009-03-01 16:25
2010.03.07
ошибка в SQL коде


2-1261998166
citizen
2009-12-28 14:02
2010.03.07
Дескрипторы дочерних окон


10-1164879867
salexn
2006-11-30 12:44
2010.03.07
Регистрация сервера


15-1261527698
KilkennyCat
2009-12-23 03:21
2010.03.07
VBA и application.processmessage


6-1214280494
Василий
2008-06-24 08:08
2010.03.07
WebBrowser отображение объектов