Просмотр буфера обмена II
Просмотр буфера обмена в Delphi совсем не сложен. Вот участок кода программы, вешающий цепочки в буфере обмена и просто отображающий его текст. Расположите компонент Memo на главной форме нового проекта, присвойстве свойству Align значение alClient, добавьте необходимые private-поля и методы и создайте их реализацию следующим образом:
...
private
{ Private declarations }
PrevHwnd : Hwnd;
procedure WMChangeCBChain(VAR Msg: TWMChangeCBChain);
message WM_CHANGECBCHAIN;
procedure WMDrawClipboard(VAR Msg: TWMDrawClipboard);
message WM_DRAWCLIPBOARD; ... procedure TForm1.WMChangeCBChain(VAR Msg: TWMChangeCBChain); begin IF PrevHWnd = Msg.Remove THEN PrevHWnd := Msg.Next; IF Msg.Remove <> Handle THEN SendMessage(PrevHWnd, WM_CHANGECBCHAIN, Msg.Remove, Msg.Next); end; procedure TForm1.WMDrawClipboard(VAR Msg: TWMDrawClipboard); VAR P : PChar; H : THandle; begin SendMessage(PrevHWnd, WM_DRAWCLIPBOARD, 0, 0); IF Clipboard.HasFormat(CF_TEXT) THEN BEGIN H := Clipboard.GetAsHandle(CF_TEXT); Len := GlobalSize(H)+1; P := GlobalLock(H); Memo1.SetTextBuf(P); GlobalUnlock(H); END; Msg.Result := 0; end; procedure TForm1.FormCreate(Sender: TObject); begin PrevHwnd := SetClipboardViewer(Handle); end; procedure TForm1.FormDestroy(Sender: TObject); begin ChangeClipboardChain(Handle, PrevHwnd); end; |
Обращаю ваше внимание на то, что у меня не было никакой конкретной идеи прежде, чем я это сделал; я просто внимательно прочел файлы помощи по SetClipboardViewer и во всех связанных темах.
- Neil [000523]