![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Свой формат в буфер обмена [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');
какже без этого