Идёт загрузка страницы...

htp://aptem.net.ru





Просмотр буфера обмена 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]