Здравствуйте!
Я описал свой собственный формат для работы с буфером обмена. Процедура копирования структуры в буфер находится в 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;