FAQ VCL
Буфер обмена

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

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

function SetClipboardText( Wnd: HWND; Value: string ): boolean;
var
  hData: HGlobal;
  pData: pointer;
  Len: integer;
begin
   Result := true;
   if OpenClipboard( Wnd ) then
   begin
      try
         Len := Length( Value ) + 1;
         hData := GlobalAlloc( GMEM_MOVEABLE or GMEM_DDESHARE, Len );
         try
            pData := GlobalLock( hData );
            try
               Move( PChar( Value )^, pData^, Len );
               EmptyClipboard;
               SetClipboardData( CF_Text, hData );
            finally
               GlobalUnlock( hData );
            end;
         except
            GlobalFree( hData );
            raise
         end;
      finally
         CloseClipboard;
      end;
   end
   else
      Result := false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   SetClipboardText( Handle, 'qwerty' );
end;


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

function GetClipboardText( Wnd: HWND; var Str: string ): boolean;
var
  hData: HGlobal;
begin
   Result := true;
   if OpenClipboard( Wnd ) then
   begin
      try
         hData := GetClipboardData( CF_TEXT );
         if hData <> 0 then
         begin
            try
               SetString( Str, PChar( GlobalLock( hData ) ), GlobalSize( hData ) );
            finally
               GlobalUnlock( hData );
            end;
         end
         else
            Result := false;
         Str := PChar( @Str[1] );
      finally
         CloseClipboard;
      end;
   end
   else
      Result := false;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Str: string;
begin
   GetClipboardText( Handle, Str );
   ShowMessage( Str );
end;


Как получить имена файлов из буфера обмена?

uses
  {...,} ClipBrd, ShellAPI;

procedure TForm1.Button1Click(Sender: TObject);
var
  f: THandle;
  Buffer: array [0..MAX_PATH] of Char;
  i, numFiles: Integer;
begin
   Clipboard.Open;
   try
      f := Clipboard.GetAsHandle( CF_HDROP ) ;
      if f <> 0 then
      begin
         numFiles := DragQueryFile( f, $FFFFFFFF, nil, 0 ) ;
         Memo1.Clear;
         for i := 0 to numFiles-1 do
         begin
            Buffer[0] := #0;
            DragQueryFile( f, i, Buffer, SizeOf( Buffer ) ) ;
            Memo1.Lines.Add( Buffer ) ;
         end;
      end;
   finally
      Clipboard.Close;
   end;
end;


Как поместить скриншот формы в буфер обмена?

procedure TForm1.Button1Click(Sender: TObject);
begin
   keybd_event( VK_SNAPSHOT, 1, 0, 0 );
   keybd_event( VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0 );
end;


Как скопировать текст в буфер обмена?

uses
  {...,} Clipbrd;

type
  TClipboardAccess = class( TClipboard );

implementation

procedure CopyToClipboard( const aText: string );
var
  wText: WideString;
begin
   if Win32Platform = VER_PLATFORM_WIN32_NT then
   begin
      wText := aText;
      TClipboardAccess( Clipboard ).SetBuffer( CF_UNICODETEXT, wText[1], ( Length( wText ) + 1 ) * 2 );
   end
   else
      Clipboard.AsText := aText;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   CopyToClipboard( 'Произвольный текст' );
end;

При использовании материала - ссылка на сайт обязательна