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

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

несколько FileDescriptor в FileGroupDescriptor [D5, WinXP]


kami ©   (2005-06-03 21:02:00) 

Собственно нужно для того, чтобы по Drag & Drop передавать несколько файлов, сам вопрос возник в продолжение ветки http://www.delphimaster.ru/cgi-bin/forum.pl?id=1117317253&n=0Вот хоть убейте, не пойму, как в массив [0.. 0] of TFileDesciptor можно засунуть больше одного описания файла. Кто знает, подскажите :)


Игорь Шевченко   (2005-06-06 12:18:00) [1]

kami ©   (04.06.05 00:07) [5]


> А имеет ли значение количество элементов в массиве fgd?
> Или действительно резервируй память хоть до Max(cItems)=MaxLongWord
> ?


Не имеет до тех пор, пока не наткнешься на ограничения компилятора. Ты же работаешь с указателем на эту структуру, а ее размер определяется количеством элементов, указанных в первом слове.


kami   (2005-06-04 00:07:00) [2]

2 [4] Игорь Шевченко ©   (03.06.05 23:17)

Спасибо, попробую переобъявить в модуле это дело :)
Если я что-нибудь в чем-нибудь понимаю, то [(с) Винни-Пух]  :
элементы массива не будут перекрываться, т.к. TFileDescriptor тоже не содержит динамических элементов.

А имеет ли значение количество элементов в массиве fgd? Или действительно резервируй память хоть до Max(cItems)=MaxLongWord ?


Игорь Шевченко   (2005-06-03 23:17:00) [3]

kami ©   (03.06.05 21:56) [2]

Я бы объявил по-другому:

_FILEGROUPDESCRIPTORA = record
  cItems: UINT;
  fgd: array[0..255] of TFileDescriptor;
end;

_PFILEGROUPDESCRIPTORA = ^_FILEGROUPDESCRIPTORA;

При вызове же указатель приходит, поэтому, если реально в нем больше одного элемента, то обращаться удобно, разыменовав этот указатель.

P: _PFILEGROUPDESCRIPTORA;
....

P^.fgd[1].dwFlags ...

Объявление, похоже, перекочевало прямой трансляцией из C

typedef struct _FILEGROUPDESCRIPTOR {
   UINT cItems;
   FILEDESCRIPTOR fgd[1];
} FILEGROUPDESCRIPTOR, *LPFILEGROUPDESCRIPTOR;

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

xShadow ©   (03.06.05 21:33) [1]


> Dynamic arrays F1


Мимо кассы.


xShadow   (2005-06-03 22:54:00) [4]

Что то одни противоречия к сожелению нету у меня под рукой D5 только D7 и эти конструкции, в нём, прокатывают на ура.


kami   (2005-06-03 21:56:00) [5]

Почитал F1, не знаю, может у меня после масштабных изучений DragDrop-интерфейсов по MSDN (и n-го количества принятого по поводу решенной задачи пива) голова не соображает, но Out-of-range indexes are not reported at compile time- цитата из хелпа.
{ShlObj.Pas}
_FILEGROUPDESCRIPTORA = record
   cItems: UINT;
   fgd: array[0..0] of TFileDescriptor; // - объявлен как статический массив
end;

Попытка обращения к <for example> 10 элементу ведет к ошибке на этапе компиляции :(


xShadow   (2005-06-03 21:33:00) [6]

Dynamic arrays F1


Наверх

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