Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Свой формат в буфер обмена [D6, XP]


HRustBB ©   (2009-06-12 12:04:00) 

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

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;


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


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

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


MBo   (2009-06-12 18:20:00) [2]

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


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

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


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:10:00) [4]

Цель какая?


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

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


MBo   (2009-06-12 17:41:00) [6]

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


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


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


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


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

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


MBo   (2009-06-12 17:22:00) [9]

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


oldman   (2009-06-12 14:12:00) [10]


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


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


Buffer   (2009-06-12 13:13:00) [11]

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


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

да забыл еще

MyClpFormat:=RegisterClipboardFormat('mod');

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо