*Просто создайте новую форму и назовите его ClipFormats.

*Поместите TButton и вызывай его btnUpdate.

*Поместите лист бокс и вызывай его lbFormats.

 

Затем просто добавьте приведенный ниже код и подключить все обработчики событий.

Все это делает дисплей в настоящее время все форматы в буфере обмена и

обновления как только изменения буфера обмена.

 

Code:

unit DynaClip;

 

interface

 

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ExtCtrls;

 

type

  TClipFormats = class(TForm)

    btnUpdate: TButton;

    lbFormats: TListBox;

    procedure FormCreate(Sender: TObject);

    procedure FormDestroy(Sender: TObject);

    procedure btnUpdateClick(Sender: TObject);

  private

    { Private declarations }

    NextWindow: HWND;

    procedure WMChangeCBChain(var Message: TWMChangeCBChain); message

    WM_CHANGECBCHAIN;

    procedure WMDrawClipboard(var Message: TWMDrawClipboard); message

    WM_DRAWCLIPBOARD;

  public

    { Public declarations }

  end;

 

var

  ClipFormats: TClipFormats;

 

implementation

 

{$R *.DFM}

 

procedure TMDIChildClipFormats.FormCreate(Sender: TObject);

begin

  NextWindow := SetClipboardViewer(Handle);

end;

 

procedure TClipFormats.FormDestroy(Sender: TObject);

begin

  ChangeClipboardChain(Handle, NextWindow);

end;

 

procedure TClipFormats.WMChangeCBChain(var Message: TWMChangeCBChain);

begin

  with Message do

   begin

    if (Remove = NextWindow) then

     begin

      NextWindow := Next;

    end

    else

     begin

      SendMessage(NextWindow, WM_CHANGECBCHAIN, Remove, Next);

    end;

  end;

end;

 

procedure TClipFormats.WMDrawClipboard(var Message: TWMDrawClipboard);

begin

  btnUpdate.Click;

  SendMessage(NextWindow, WM_DRAWCLIPBOARD, 0, 0);

end;

 

procedure TClipFormats.btnUpdateClick(Sender: TObject);

const

  PreDefinedFormats: array[1..16] of string = ('CF_TEXT',

    'CF_BITMAP',

    'CF_METAFILEPICT',

    'CF_SYLK',

    'CF_DIF',

    'CF_TIFF',

    'CF_OEMTEXT',

    'CF_DIB',

    'CF_PALETTE',

    'CF_PENDATA',

    'CF_RIFF',

    'CF_WAVE',

    'CF_UNICODETEXT',

    'CF_ENHMETAFILE',

    'CF_HDROP',

    'CF_LOCALE');

var

  ClipFormat: TClipFormat;

  szBuffer: array[0..511] of Char;

  FormatID: string;

begin

  if not OpenClipboard(Handle) then Exit;

  try

    lbFormats.Items.BeginUpdate;

    try

      lbFormats.Items.Clear;

 

      ClipFormat := EnumClipboardFormats(0);

      while (ClipFormat <> 0) do

       begin

        if (ClipFormat in [1..16]) then

         begin

          FormatID := PreDefinedFormats[ClipFormat];

        end

        else

         begin

          GetClipboardFormatName(ClipFormat, szBuffer, SizeOf(szBuffer));

          FormatID := string(szBuffer);

        end;

        lbFormats.Items.Add(Format('%s [%d]', [FormatID, ClipFormat]));

        ClipFormat := EnumClipboardFormats(ClipFormat);

      end;

    finally

      lbFormats.Items.EndUpdate;

    end;

  finally

    CloseClipboard;

  end;

end;

 

end.

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить