powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / VBA: For each CollectionItem in Collection. Delphi: ?
6 сообщений из 6, страница 1 из 1
VBA: For each CollectionItem in Collection. Delphi: ?
    #32287948
Steel rat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел этот пример в Visual Basic for MS Office 2000:
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

Так вот, не могу перенести в Delphi цикл For Each ... :

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 ; ОШИБКА --- СМ. НИЖЕ
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 'Параметр задан неверно'."
...
Рейтинг: 0 / 0
VBA: For each CollectionItem in Collection. Delphi: ?
    #32288312
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 проверь, отсчет может(не уверен) начинаться с 1
begin
d:=dc.Item; ОШИБКА --- СМ. НИЖЕ может d:=dc.Item
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;

С уважением, Denis Uskov
...
Рейтинг: 0 / 0
VBA: For each CollectionItem in Collection. Delphi: ?
    #32288313
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, опечатка получилась
Код: plaintext
СМ. НИЖЕ может d:=dc.Item[i]


С уважением, Denis Uskov
...
Рейтинг: 0 / 0
VBA: For each CollectionItem in Collection. Delphi: ?
    #32289029
Steel rat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет!!!!!!!!!! Это опечатка в моем сообщении, а в программе у меня так и есть
Код: plaintext
d:=dc.Item[i]
Я цикл начинал: и с нуля, и с единицы; и тип переменной i брал другой!!!

И, ВООБЩЕ, ПРЕЖДЕ ЧЕМ ПУБЛИКОВАТЬ ОТВЕТ - ЖЕЛАТЕЛЬНО ЕГО ПРОВЕРИТЬ САМОМУ!!!!!!!!!!!!!!!!!!!!!!!!!!!!! По-крайней мере Я - поступаю ТАК!!!
...
Рейтинг: 0 / 0
VBA: For each CollectionItem in Collection. Delphi: ?
    #32289213
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй перед получением привести к Variant:
Код: plaintext
1.
2.
3.
...
INo := OleVariant(I);
d:=dc.Items[I]
...


Во всяком случае, аналогичный цикл у меня работает именно так

Nobody faults but mine... (LZ)
...
Рейтинг: 0 / 0
VBA: For each CollectionItem in Collection. Delphi: ?
    #32289250
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дебильный способ
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
var
fs:IFileSystem;
dc:IDriveCollection;
d: IDrive;
s, n: String;
i: Integer;
begin
  fs := CreateComObject(CLASS_FileSystemObject) as IFileSystem;
  dc := fs.Drives;
  s := '';
  for i:=Ord('A') to Ord('Z') do begin
    if(fs.DriveExists(Chr(i))=True)then begin
      d := dc.Item[Chr(i)];
      if(d.IsReady=True)then begin
        s := s + d.DriveLetter+' - ';
        if d.DriveType= 3 
          then n:=d.ShareName
          else n:=d.VolumeName;
        s := s + n + chr( 13 );
      end else begin
        s := Chr(i) + ' Not Ready' + chr( 13 );
      end;
    end;
  end;
  ShowMessage(s);
  dc := nil;
  d  := nil;
  fs := nil;
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / VBA: For each CollectionItem in Collection. Delphi: ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]