| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Копирование массива в памяти |
| Автор: Svetkin 22.12.2009, 10:25 | ||||||||||
| Суть проблемы следующая: хочу сделать копирование данных в буфер из грида (стороннего). Идея в том чтобы зарегистрировать свой формат в Clipboard и его использовать если копируешь и вставляешь в своем приложение а для остальных сделать представление в виде текста. Формат состоит из двумерного динамического массива в котором соответственно колонки это поля, а ряды - записи. собственно вот регистрируем
далее определяем тип данных
выделяем память под массив
дальше копируем данные из массива в память и заносим их зарегистрированным форматом
ну и вставка данных делается так
и вторая проблем даже если поставить в определении типа фиксированный массив и соответственно копировать соответственное количество данных то при копировании происходит искажение данных массива отсюда вопрос можно ли вообще так обращаться с массивами????? и с динамическими в частности????? |
| Автор: dvamaster 28.12.2009, 07:03 |
Динамический массив кроме данных содержит служебную информацию о длине, так что врядли |
| Автор: sCreator 28.12.2009, 09:51 | ||||
| Похоже идея Ваша не сработает. GlobalSize(ArrayField) выдает размер памяти, выделенной функцией GlobalAlloc. TcxCopy = array of array of string; по сути объявление указателя на массив указателей на массив указателей строк. Например
если остановиться после SetLength то получим: sizeOf(tc) = 4 байта ( tc - указатель на TcxCopy ) sizeOf(tc[0]) = 4 байта ( tc[0] - указатель на array of string) sizeOf(tc[0,0]) = 4 байта ( tc[0,0] - указатель на string) Т.е. Вам надо расчитать требуемый размер буфера ( с учетом записи в него размерностей массивов и длин строк). Выделить ему память и собрать в него все свои ячейки. Из буфера обратный порядок. Может проще собирать ячейки в одну строку? ( вычитал недавно:
|