Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.23;
Скачать: CL | DM;

Вниз

VBA: For each CollectionItem in Collection. Delphi: ?   Найти похожие ветки 

 
RomanB ©   (2003-10-07 16:45) [0]

Sub ShowDriveList
Dim fs, d, dc, s, n
Set fs = CreateObject("Scripting.FileSystemObject")
Set dc = fs.Drives
For Each d in dc
s = s & d.DriveLetter & " - "
If d.DriveType = 3 Then
n = d.ShareName
Else
n = d.VolumeName
End If
s = s & n & vbCrLf
Next
MsgBox s
End Sub


Нашел этот пример в Visual Basic for MS Office 2000. Так вот, не могу перенести в Delphi цикл For Each ...?


 
Palladin ©   (2003-10-07 16:50) [1]

в цикле for по всем элементам коллекции...


 
RomanB ©   (2003-10-08 16:06) [2]

Сам-то пробовал??????????????????

procedure TForm1.Button1Click(Sender: TObject);
var
fs, d, dc: Variant;
s, n: String;
i: Integer;
begin
fs:=CreateOleObject("Scripting.FileSystemObject");
dc:=fs.Drives;
s:="";
for i:=0 to dc.Count-1 do
begin
d:=dc.Item[i]; //ОШИБКА --- см. ниже
s:=s+d.DriveLetter+" - ";
if d.DriveType=3 then
n:=d.ShareName
else
n:=d.VolumeName;
s:=s+n+chr(13);
end;
ShowMessage(s);
fs:=Unassigned;
dc:=Unassigned;
d:=Unassigned;
end;


ОШИБКА: "Project Project1.exe raised exception class EOleException with message "Параметр задан неверно"."


 
Palladin ©   (2003-10-08 19:42) [3]


> Сам-то пробовал??????????????????

не нервничай

procedure TForm1.Button1Click(Sender: TObject);
var
fs, d: Variant;
s: String;
s1:WideString;
i: Integer;
begin
fs:=CreateOleObject("Scripting.FileSystemObject");
s:="";
for i:=0 to 24 do
begin
s1:=chr(i+65)+":\";
try
d:=fs.GetDrive(s1);
s:=s+d.DriveLetter+" - ";
if d.DriveType=3 then s:=s+d.ShareName
else s:=s+d.VolumeName;
s:=s+#13#10;
except
end;
end;
ShowMessage(s);
fs:=Unassigned;
d:=Unassigned;
end;


 
Ломброзо Цезарь ©   (2003-10-08 20:16) [4]

В грёбаном бейсике коллекции нумеруются с единицы, а не с нуля, и до Count, а не Count - 1


 
Palladin ©   (2003-10-08 20:25) [5]


> Ломброзо Цезарь © (08.10.03 20:16) [4]

да и это тоже...
в случае с Scripting.FileSystemObject.Drives, в Items принимает строку пути... вобщем чтонибудь откуда можно взять имя диска...
ну оно и понятно, все основывается на GetLogicalDriveStrings...


 
RomanB ©   (2003-10-09 16:46) [6]

>Palladin

GetDrive() - это не выход!!!
В Drive есть еще Folders, SubFolders и Files --- их как как перебирать, Ааааа!

>Ломброзо Цезарь

А, в чем связь между Scripting.FileSystemObject и Бейсиком??? Это же не внутренний, а внешний объект для Бейсика!!! Просто в Help`е Бейсика все очень толково описано про Scripting.FileSystemObject и его подобъекты! Но там все через цикл For Each ...! Вот и чешу тыкву!


 
Palladin ©   (2003-10-10 00:07) [7]

Выход не выход, решать тебе конечно...
для Files есть GetFile, для Folders есть GetFolder

в статье Тенцера про ScriptControl про for each сказано следующее
"Реализация For Each предусматривает следующее:

Исполняющее ядро ScriptControl вызывает метод Invoke объекта, по элементам которого должен производиться цикл с DispID = DISPID_NEWENUM (-4).
Объект должен вернуть интерфейс IenumVariant.
Далее ядро использует методы IEnumVariant для получения элементов коллекции. "


Ищи, ковыряй, чеши свою тыкву.


 
Ломброзо Цезарь ©   (2003-10-10 02:19) [8]

Слушай, тебе _непременно_ надо с FSO через Delphi работать? Если в MS сделали индексирование коллекций через ж..., и причем так, что даже ITypeInfo хрен получишь, то у них на то свои соображения - что-то прячут, видать. Выходов несколько

1) FindFirst/FindNext
2) Прикрутить Microsoft Script Control и внедрить код на VB в свою программу
3) Работать через SHGetDesktopFolder, IShellFolder и т.п. (см. статью Акжана Абдулина здесь или на Королевстве)



Страницы: 1 вся ветка

Текущий архив: 2003.10.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
1-74278
Le!
2003-10-13 08:10
2003.10.23
Народ помогите с простым вопросом!


14-74463
Knight
2003-10-02 23:52
2003.10.23
Кто какие сайты посещает?


14-74460
sashcan
2003-10-03 15:57
2003.10.23
оКНА


9-73957
Palladin
2003-04-19 11:42
2003.10.23
аналитическая геометрия и линейная алгебра


1-74320
Zhirnov Maxim
2003-10-11 17:43
2003.10.23
Как определить видимо ли окно?