Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Как копировать/менять Clipboard text без использования VCL?

Поиск:
Код
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls...;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   function GetClipBoardText: string;
   procedure SetClipBoardText(const Value: string);
   procedure Open;
   procedure SetBuffer(Format: Word; var Buffer; Size: Integer);
   procedure Adding;
   procedure Clear;
   constructor CreateRes(Ident: Integer);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   FOpenRefCount: Integer;
   FClipboardWindow: HWND;
   FAllocated: Boolean;
   FEmptied: Boolean;
   FMessage: string;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

resourcestring
 SCannotOpenClipboard = 'Cannot open clipboard';

implementation


{$R *.dfm}

//Create resource for resourceString
constructor TForm1.CreateRes(Ident: Integer);
begin
 FMessage := LoadStr(Ident);
end;

//Status: Adding
procedure TForm1.Adding;
begin
 if (FOpenRefCount <> 0) and not FEmptied then
 begin
   Clear;
   FEmptied := True;
 end;
end;

//Empty clipboard
procedure TForm1.Clear;
begin
 Open;
 try
   EmptyClipboard;
 finally
   Close;
 end;
end;

//Set buffer
procedure TForm1.SetBuffer(Format: Word; var Buffer; Size: Integer);
var
 Data: THandle;
 DataPtr: Pointer;
begin
 Open;
 try
   Data := GlobalAlloc(GMEM_MOVEABLE + GMEM_DDESHARE, Size);
   try
     DataPtr := GlobalLock(Data);
     try
       Move(Buffer, DataPtr^, Size);
       Adding;
       SetClipboardData(Format, Data);
     finally
       GlobalUnlock(Data);
     end;
   except
     GlobalFree(Data);
     raise;
   end;
 finally
   Close;
 end;
end;

//Open the clipboard
procedure TForm1.Open;
begin
 if FOpenRefCount = 0 then
 begin
   FClipboardWindow := Application.Handle;
   if FClipboardWindow = 0 then
   begin
     {$IFDEF MSWINDOWS}
     FClipboardWindow := Classes.AllocateHWnd(MainWndProc);
     {$ENDIF}
     {$IFDEF LINUX}
     FClipboardWindow := WinUtils.AllocateHWnd(MainWndProc);
     {$ENDIF}
     FAllocated := True;
   end;
   if not OpenClipboard(FClipboardWindow) then
     raise Exception.CreateRes(@SCannotOpenClipboard);
   FEmptied := False;
 end;
 Inc(FOpenRefCount);
end;

//Get the clipboard text
function TForm1.GetClipBoardText: string;
var
 Data: THandle;
begin
 Open;
 Data := GetClipboardData(CF_TEXT);
 try
   if Data <> 0 then
     Result := PChar(GlobalLock(Data))
   else
     Result := '';
 finally
   if Data <> 0 then GlobalUnlock(Data);
   Close;
 end;
end;

procedure TForm1.SetClipBoardText(const Value: string);
begin
 //Set ClipboardText
 SetBuffer(CF_TEXT, PChar(Value)^, Length(Value) + 1);
end;

//Get the clipboard text
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(GetClipboardText);
end;

//Set the clipboard text
procedure TForm1.Button2Click(Sender: TObject);
begin
 SetClipboardText('-> Big-X <-');
end;

end.






Просмотров: 1882

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную