Rambler's Top100

Твой мир ПРОграммирования-Delphi, Pascal, C++

Объявление

Если это Ваш первый визит на форум, то советуем зарегистрироваться. Зарегистрированные пользователи могут задавать вопросы и просматривать темы со скрытым текстом. Чтобы зарегистрироваться, нажмите Регистрация.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Твой мир ПРОграммирования-Delphi, Pascal, C++ » Общие вопросы Delphi » Универсальный формат для буфера обмена.


Универсальный формат для буфера обмена.

Сообщений 1 страница 2 из 2

1

Здравствуйте!
Я описал свой собственный формат для работы с буфером обмена. Процедура копирования структуры в буфер находится в dll. Почему при вставке структуры(в программе) информация структуры отображается ненормально(совсем не то что надо) или не отображается вообще?Например, процедура в dll должна скопировать "Иван" в буфер и вставить в программу "Иван", а вставляет "Lfw51". Почему?

Код:
unit ClipboardFormatUnit;   
interface  
uses  
 Clipbrd, Windows, SysUtils;   
type  
  PLineData=^TLineData;   
  TLineData=record  
   Name:String[100];   
   Number:String[100];   
  end;   
  
  TLineClipboard=class  
  public  
   LineData:TLineData;   
   procedure CopyToClipboard;   
   procedure PasteFromClipboard;   
  end;   
  
var  
 CF_PERSONDATA:word;   
  
implementation  
procedure TLineClipboard.CopyToClipboard;   
var  
 Data:THandle;   
 DataPtr:Pointer;   
begin  
 Data:=GlobalAlloc(GMEM_MOVEABLE, SizeOf(LineData));   
 try  
  DataPtr:=GlobalLock(Data);   
  Move(LineData, DataPtr^, SizeOf(TLineData));   
  Clipboard.Open;   
  Clipboard.SetAsHandle(CF_PERSONDATA, Data);   
  Clipboard.Close;   
  GlobalUnlock(Data);   
 except  
  GlobalFree(Data);   
 end;   
end;   
  
procedure TLineClipboard.PasteFromClipboard;   
var  
 Data:THandle;   
 DataPtr:Pointer;   
begin  
 Data:=ClipBoard.GetAsHandle(CF_PERSONDATA);   
 if Data=0 then exit;   
 DataPtr:=GlobalLock(Data);   
 Move(DataPtr^, LineData, SizeOf(TLineData));   
 GlobalUnlock(Data);   
end;   
initialization  
 CF_PERSONDATA:=RegisterClipboardFormat('CF_PDATA');   
end.

копирование в dll
 

Код:
.. var myclipboard:TLineClipboard;   
begin  
myclipboard:=TLineClipboard.Create;   
myclipboard.LineData.Name:=info.name;   
myclipboard.LineData.Number:=info.number;   
myclipboard.CopyToClipboard;   
myclipboard.Free; ...   
end;  

.. var myclipboard:TLineClipboard;
begin
myclipboard:=TLineClipboard.Create;
myclipboard.LineData.Name:=info.name;
myclipboard.LineData.Number:=info.number;
myclipboard.CopyToClipboard;
myclipboard.Free; ...
end;

Вставка(основная прога):

Код:
 
... var myclipboard:TLineClipboard;   
begin  
myclipboard:=TLineClipboard.Create;   
myclipboard.PasteFromClipboard;   
myclipboard.LineData.name:=info.name;   
myclipboard.LineData.number:=info.number;   
myclipboard.free;  ...   
end;

0

2

У меня идея была что возможно буфер самоочищается и поэтому инфа выдается некорректно. Если это так то как мне запретить это самочищение?

0


Вы здесь » Твой мир ПРОграммирования-Delphi, Pascal, C++ » Общие вопросы Delphi » Универсальный формат для буфера обмена.