Получить или занести текст в буфер без использования VCLDelphi , ОС и Железо , Буфер обменаПолучить или занести текст в буфер без использования VCL
Оформил: DeeCo 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. Программа на языке Delphi, демонстрирующая получение и установку содержимого системного буфера обмена без использования VCL (Visual Component Library). Программа содержит два кнопки: одну для получения текущего текста из буфера обмена и другую для установки нового текста в буфер обмена. Разбивка кода:
Обратите внимание, что это программное обеспечение использует функции Windows API, такие как Некоторые предложения по улучшению кода:
В целом, это программное обеспечение демонстрирует основные операции с буфером обмена, используя функции Windows API и встроенные возможности Delphi. В статье описана реализация способа получения и занесения текстового контента в буфер обмена без использования VCL (Visual Component Library) в языке программирования Delphi. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Буфер обмена ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |