Недавно добавленные исходники

•  TDictionary Custom Sort  3 227

•  Fast Watermark Sources  2 992

•  3D Designer  4 751

•  Sik Screen Capture  3 259

•  Patch Maker  3 467

•  Айболит (remote control)  3 528

•  ListBox Drag & Drop  2 904

•  Доска для игры Реверси  80 792

•  Графические эффекты  3 843

•  Рисование по маске  3 172

•  Перетаскивание изображений  2 544

•  Canvas Drawing  2 674

•  Рисование Луны  2 501

•  Поворот изображения  2 094

•  Рисование стержней  2 121

•  Paint on Shape  1 525

•  Генератор кроссвордов  2 183

•  Головоломка Paletto  1 731

•  Теорема Монжа об окружностях  2 158

•  Пазл Numbrix  1 649

•  Заборы и коммивояжеры  2 017

•  Игра HIP  1 262

•  Игра Go (Го)  1 201

•  Симулятор лифта  1 425

•  Программа укладки плитки  1 178

•  Генератор лабиринта  1 512

•  Проверка числового ввода  1 297

•  HEX View  1 466

•  Физический маятник  1 322

•  Задача коммивояжера  1 357

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Получить уведомление при изменении содержимого буфера обмена



Оформил: DeeCo

{ 
  An application can be notified of changes in the data stored in the 
  Windows clipboard by registering itself as a Clipboard Viewer. 

  Clipboard viewers use two API calls and several messages to communicate 
  with the Clipboard viewer chain. SetClipboardViewer adds a window to the 
  beginning of the chain and returns a handle to the next viewer in the chain. 
  ChangeClipboardChain removes a window from the chain. When a clipboard change occurs, 
  the first window in the clipboard viewer chain is notified via the WM_DrawClipboard 
  message and must pass the message on to the next window. To do this, our application 
  must store the next window along in the chain to forward messages to and also respond 
  to the WM_ChangeCBChain message which is sent whenever any other clipboard viewer on 
  the system is added or removed to ensure the next window along is valid. 
}


 unit Unit1;

 interface

 uses
   Windows, Messages, Forms, Classes, Controls, StdCtrls;

 type
   TForm1 = class(TForm)
     Button1: TButton;
     Button2: TButton;
     procedure Button1Click(Sender : TObject);
     procedure Button2Click(Sender : TObject);
     procedure FormCreate(Sender : TObject);
     procedure FormDestroy(Sender : TObject);
   private
     FNextClipboardViewer: HWND;
     procedure WMChangeCBChain(var Msg : TWMChangeCBChain); message WM_CHANGECBCHAIN;
     procedure WMDrawClipboard(var Msg : TWMDrawClipboard); message WM_DRAWCLIPBOARD;
   end;

 var
   Form1 : TForm1;

 implementation

 {$R *.DFM}

 procedure TForm1.FormCreate(Sender : TObject);
 begin
   { Initialize variable }
   FNextClipboardViewer := 0;
 end;


 procedure TForm1.Button1Click(Sender : TObject);
 begin
   if FNextClipboardViewer <> 0 then
     MessageBox(0, 'This window is already registered!', nil, 0)
   else
     { Add to clipboard chain }
     FNextClipboardViewer := SetClipboardViewer(Handle);
 end;


 procedure TForm1.Button2Click(Sender : TObject);
 begin
   { Remove from clipboard chain }
   ChangeClipboardChain(Handle, FNextClipboardViewer);
   FNextClipboardViewer := 0;
 end;


 procedure TForm1.WMChangeCBChain(var Msg : TWMChangeCBChain);
 begin
   inherited;
   { mark message as done }
   Msg.Result := 0;
   { the chain has changed }
   if Msg.Remove = FNextClipboardViewer then
     { The next window in the clipboard viewer chain had been removed. We recreate it. }
     FNextClipboardViewer := Msg.Next
   else
     { Inform the next window in the clipboard viewer chain }
     SendMessage(FNextClipboardViewer, WM_CHANGECBCHAIN, Msg.Remove, Msg.Next);
 end;


 procedure TForm1.WMDrawClipboard(var Msg : TWMDrawClipboard);
 begin
   inherited;
   { Clipboard content has changed }
   try
     MessageBox(0, 'Clipboard content has changed!', 'Clipboard Viewer', MB_ICONINFORMATION);
   finally
     { Inform the next window in the clipboard viewer chain }
     SendMessage(FNextClipboardViewer, WM_DRAWCLIPBOARD, 0, 0);
   end;
 end;


 procedure TForm1.FormDestroy(Sender : TObject);
 begin
   if FNextClipboardViewer <> 0 then
   begin
     { Remove from clipboard chain }
     ChangeClipboardChain(Handle, FNextClipboardViewer);
     FNextClipboardViewer := 0;
   end;
 end;

 end.




Похожие по теме исходники

Примеры работы с БД

Примеры оформления DBGrid

Пример использования DBGrid

База предприятий и менеджеров 0.99

 

Консольное DOS приложение

Работа с принтером

Локализация приложений

Clipboard (буфер обмена)

 



Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте