Показать сообщение отдельно
Старый 30.08.2011, 12:04   #10  
Alterant is offline
Alterant
Участник
 
378 / 10 (1) +
Регистрация: 31.03.2004
Если хотите использовать Automation, то 2 варианта.

1. С Microsoft Scripting Runtime простого пути нет. Получить данные можно через функцию-итератор, которых в NAV нет. На mibuso народ путем хитрых извращений использования 'Microsoft Script Control 1.0'.ScriptControl и кусков кода на VB Script, вызываемых из NAV добились таки нужного результата. Копайте тут, если интересно:
http://mibuso.com/forum/viewtopic.php?f=5&t=7855

2. Те кто ищет пути полегче могут использовать Microsoft Shell Controls And Automation.
Код:
CREATE(ShellCtrls);
ShellFolder := ShellCtrls.NameSpace('C:\Temp');
ShellItems := ShellFolder.Items;
FOR i := 0 TO ShellItems.Count - 1 DO BEGIN
 IF NOT ShellItems.Item(i).IsFolder OR ShellItems.Item(i).IsBrowsable THEN BEGIN
	INIT;
	"Row No." := i;
	"Cell Value as Text" := ShellItems.Item(i).Path;
	INSERT;
 END;
END;
где
ShellCtrls - 'Microsoft Shell Controls And Automation'.Shell
ShellFolder - 'Microsoft Shell Controls And Automation'.Folder
ShellItems - 'Microsoft Shell Controls And Automation'.FolderItems

можно еще использовать 'Microsoft Shell Controls And Automation'.FolderItem напрямую, добавив соответсвующее присвоение в цикле. Но можно и неявно, как в примере.

Со свойствами FolderItem есть некоторые заморочки. При тестировании выяснилось, что FolderItem = TRUE не только для папок, но и для zip архивов. К счастью, для архивов IsBrowsable = TRUE, в то время как для обычных папок FALSE. Возможны еще какие-то ньюансы. Можно, конечно, использовать свойство Type, но оно локализовано (на русской винде для папок выдает "Папка с файлами", что чревато проблемами.