Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2007, 17:06   #11
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Именно средствамти WinAPI и регистрируется свой формат буфера
UINT RegisterClipboardFormat( LPCTSTR lpszFormat
);
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 31.10.2007, 11:25   #12
OrdJONY
.NET-чик
Форумчанин
 
Аватар для OrdJONY
 
Регистрация: 24.03.2007
Сообщений: 569
Радость

Можно использовать TMemoryStream или сделать что-то подобное:
Код:
PMyRecord = ^TMyRecord;
TMyRecord = Record
  Param1 : Byte;
  Param2 : Word;
  Param3 : String;
...
Var
  A: Pointer;
  B: TMyRecord;
Begin
  GetMem(A,SizeOf(TMyRecord или B));
  CopyMemory(A,@B,SizeOf(TMyRecord или B));
Для манипулирования A делай что-то похожее
Код:
PMyRecord(A)^.Param1 := 1;
Пробуй
"Разработка под веб - как работа с пылесосом: нихрена не прикольно, но засасывает"
Мо маленький городок
OrdJONY вне форума Ответить с цитированием
Старый 06.11.2007, 15:53   #13
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

OrdJONY, спасибо за способ. Но он будет действовать только в самой программе, а я должен выполнить операцию копирования структуры в dll. Но у меня появилась новая идея как все осуществить.
В общем я решил сделать модуль для общего случая- копировать буду указатель,который будет указывать на ту структуру, которая мне нужна(его собственно и буду копировать в буфер). Универсальный способ. Но я столкнулся с проблемой-
когда мне в программе возвращается указатель на ту структуру из dll(из буфера естественно), информация в label-х отображается ненормально- например надо чтобы отобразилось - Иван, а отображается подобные вещи- fkj8f. Что у меня неправильно? Привожу модуль(вложение) и часть программы(вставка из буфера).
Код:
procedure TForm1.LMDShapeButton1Click(Sender: TObject);
var l:pointer; info:tinfo;
myclipboard:tykaztelclipboard;
begin
myclipboard:=tykaztelclipboard.Create;
myclipboard.PasteFromClipboard;
l:=myclipboard.p;
info:=tinfo(l^);
label5.Caption:=info.number;
end;

Последний раз редактировалось bill; 23.12.2007 в 14:02.
bill вне форума Ответить с цитированием
Старый 08.11.2007, 16:24   #14
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
Восклицание Помогите, проект горит!

Я описал свой собственный формат для работы с буфером обмена. Процедура копирования структуры в буфер находится в 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.PasteFromClipboard;
myclipboard.LineData.name:=info.name;
myclipboard.LineData.number:=info.number;
myclipboard.free;  ...
end;
bill вне форума Ответить с цитированием
Старый 20.11.2007, 17:22   #15
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

Так-с, ответ был получен- структура(и вообще любая информация) копируются в буфер обмена, но потом при закрытии dll буфер очищается-уничтожается информация, которая в нем хранилась.
Кто-нибудь знает как можно запретить ему самоочищаться, программно конечно?
bill вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как очистить буфер обмена? StasSv Microsoft Office Excel 2 11.08.2008 17:38
Как скопировать текст в буфер обмена с одного edit-a и вставить в другой SeRhy Общие вопросы Delphi 2 26.07.2008 23:02
Буфер обмена за пределами нашего приложения soufee Win Api 17 15.07.2008 22:58
Скопировать в буфер обмена Dj_smart JavaScript, Ajax 8 15.05.2008 19:16
Копирование в буфер Windows NeiL Общие вопросы Delphi 3 23.04.2008 21:46