Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.09;
Скачать: CL | DM;

Вниз

Свой формат в буфер обмена   Найти похожие ветки 

 
HRustBB   (2009-06-12 12:04) [0]

Имеется переменная типа

type
modul=record
name:string;
roomadd,installadd,menuadd:TStringList;
adminscripts,prevuscripts:array of TStringList;
path:string;                          
parametrs:TStringList;                
end;


Как ее скопировать в буфер обмена, и обратно. Я пытался так:
копирую

var i:integer;
   m:modul;
   Data: THandle;
   DataPtr: Pointer;
begin
i:=Form1.ListBox1.ItemIndex;
m:=prj.moduls[i];
Clipboard.Open;
Clipboard.Clear;
Data := GlobalAlloc(GMEM_MOVEABLE, SizeOf(m));
DataPtr := GlobalLock(Data);
Move(m, DataPtr^, SizeOf(m));
Clipboard.SetAsHandle(MyClpFormat,Data);
Clipboard.Close;
GlobalUnlock(Data);
GlobalFree(Data);
end;


вставляю

var i:integer;
   m:modul;
   Data: THandle;
   DataPtr: Pointer;
   Size: Integer;
begin
Data := ClipBoard.GetAsHandle(MyClpFormat);
if not(Data = 0) then begin
DataPtr := GlobalLock(Data);
if SizeOf(modul) > GlobalSize(Data) then
 Size := GlobalSize(Data)
else
 Size := SizeOf(modul);
Move(DataPtr^, m, Size);
GlobalUnlock(Data);
end;
end;


что здесь нетак подскажите пожалуйсто


 
HRustBB   (2009-06-12 12:11) [1]

да забыл еще

MyClpFormat:=RegisterClipboardFormat("mod");

какже без этого


 
Buffer   (2009-06-12 13:13) [2]

А мне, почему то, всегда казалось, что буферу абсолютно  "до лампочки", что в него помещают, и каким образом потом этим пользуются.


 
oldman ©   (2009-06-12 14:12) [3]


> что здесь нетак подскажите пожалуйсто


А что происходит при компиляции/запуске?
Ошибку-то опиши.


 
MBo ©   (2009-06-12 17:22) [4]

1. Зачем нужно копирование через буфер обмена?
2.  SizeOf(m)) равно 32 байтам, и при копировании скопируется несколько указателей, но не данные. Вряд ли так задумывалось


 
HRustBB   (2009-06-12 17:23) [5]

после того как благополучно получили\вставили переменную из буфера обмена, программа начинает то и дело выплевывать AccessVolvation при попытке прочитать\изменить значения других переменных типа modul в программе


 
HRustBB   (2009-06-12 17:26) [6]


> SizeOf(m)) равно 32 байтам, и при копировании скопируется
> несколько указателей, но не данные. Вряд ли так задумывалось


я вначале также подумал, но данные тоже копируются


 
MBo ©   (2009-06-12 17:41) [7]

Если ты это делаешь в одной программе, то указатели могут какое-то время
указывать на реальные данные. Но их копирования не происходит.


 
HRustBB   (2009-06-12 17:51) [8]

а, нуда, какже быть?


 
MBo ©   (2009-06-12 18:10) [9]

Цель какая?


 
HRustBB   (2009-06-12 18:15) [10]

благородная.


type
modul=record
name:string; //имя модуля
roomadd,installadd,menuadd:TStringList;// строчки php скрипта
adminscripts,prevuscripts:array of TStringList;// строчки php скрипта
path:string;                          // путь к модулю
parametrs:TStringList;              //   параметры модуля
end;



вобщем программка в целом должна из модулей в оконцове сделать управляемый сайт, нужно чтобы модули из одного проекта переставлялись в другой через буфер обмена


 
MBo ©   (2009-06-12 18:20) [11]

собрать все данные вместе с идентификационной информацией (например, подобно ini-файлу, или XML), потом передать одним блоком (строкой)


 
MBo ©   (2009-06-12 18:22) [12]

кроме того, есть и другие способы межпроцессного взаимодействия (через буфер - не слишком удачная идея). См Demos/IPC



Страницы: 1 вся ветка

Текущий архив: 2009.08.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.007 c
2-1244880706
leonidzaharov
2009-06-13 12:11
2009.08.09
TTpageControl


2-1244961097
Udrt
2009-06-14 10:31
2009.08.09
Указатель на класс по его Handle


15-1244734543
12
2009-06-11 19:35
2009.08.09
Кодировка в неком мобильном устройстве + ADOquery


2-1245046647
Iriss
2009-06-15 10:17
2009.08.09
Перевод цветав строку


2-1244756223
lubanic
2009-06-12 01:37
2009.08.09
Изменение формы