Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как копировать/менять Clipboard text без использования VCL? 
:(
    Опции темы
Poseidon
Дата 19.5.2005, 04:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Код
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. 



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0574 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.