• Буфер обмена
  • Просмотр буфера обмена
  • Копирование в буфер обмена
  • Форма как графический объект
  • Операционная система

    Буфер обмена

    Просмотр буфера обмена

    Пример на основе простого модуля-класса, осуществляющего просмотр буфера обмена.

    unit ClipboardViewer;


    interface


    uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;


    type TForm1 = class(tform)

     procedure FormCreate(Sender: TObject);

     procedure FormDestroy(Sender: TObject);

    private

     FNextViewerHandle : THandle;

     procedure WMDrawClipboard(var message: TMessage); message WM_DRAWCLIPBOARD;

     procedure WMChangeCBCHain(var message: TMessage); message WM_CHANGECBCHAIN;

    public

    end;


    var Form1: TForm1;


    implementation

    {$R *.DFM}


    procedure TForm1.FormCreate(Sender: TObject);

    begin

     // Проверяем работоспособность функции.

     // При невозможности просмотра буфера обмена

     // функция возвратит значение Nil.

     FNextViewerHandle:= SetClipboardViewer(Handle);

    end;


    procedure TForm1.FormDestroy(Sender: TObject);

    begin

     // Восстанавливаем цепочки.

     ChangeClipboardChain(Handle, FNextViewerHandle);

    end;


    procedure TForm1.WMDrawClipboard(var message: TMessage);

    begin

     // Вызывается при любом изменении содержимого буфера обмена

     message.Result := SendMessage(WM_DRAWCLIPBOARD, FNextViewerHandle, 0, 0);

    end;


    procedure TForm1.WMChangeCBCHain(var message: TMessage);

    begin

     // Вызывается при любом изменении цепочек буфера обмена.

     if message.wParam = FNextViewerHandle then begin

      // Удаляем следующую цепочку просмотра. Корректируем внутреннюю переменную.

      FNextViewerHandle:= message.lParam;

      // Возвращаем 0 чтобы указать, что сообщение было обработано

      message.Result:= 0;

     end else begin

      // Передаем сообщение следующему окну в цепочке.

      message.Result:= SendMessage(FNextViewerHandle, WM_CHANGECBCHAIN, message.wParam, message.lParam);

     end;

    end;


    end.

    Копирование в буфер обмена

    Две вспомогательных процедуры:

    procedure CopyButtonClick(Sender: TObject);

    begin

     If ActiveControl is TMemo then TMemo(ActiveControl).CopyToClipboard;

     If ActiveControl is TDBMemo then TDBMemo(ActiveControl).CopyToClipboard;

     If ActiveControl is TEdit then TEdit(ActiveControl).CopyToClipboard;

     If ActiveControl is TDBedit then TDBedit(ActiveControl).CopyToClipboard;

    end;

    procedure PasteButtonClick(Sender: TObject);

    begin

     If ActiveControl is TMemo then TMemo(ActiveControl).PasteFromClipboard;

     If ActiveControl is TDBMemo then TDBMemo(ActiveControl).PasteFromClipboard;

     If ActiveControl is TEdit then TEdit(ActiveControl).PasteFromClipboard;

     If ActiveControl is TDBedit then TDBedit(ActiveControl).PasteFromClipboard;

    end;

    Форма как графический объект

    Каким образом можно скопировать форму в буфер обмена в виде графического изображения?

    uses clipbrd;


    procedure TShowVRML.Kopieren1Click(Sender: TObject);

    var bitmap:tbitmap;

    begin

     bitmap:=tbitmap.create;

     bitmap.width:=clientwidth;

     bitmap.height:=clientheight;

     try

      with bitmap.Canvas do CopyRect (clientrect,canvas,clientrect);

      clipboard.assign(bitmap);

     finally

      bitmap.free;

     end;

    end;







     


    Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх