Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / VBA: For each CollectionItem in Collection. Delphi: ? / 6 сообщений из 6, страница 1 из 1
08.10.2003, 16:44
    #32287948
Steel rat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: For each CollectionItem in Collection. Delphi: ?
Нашел этот пример в 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
09.10.2003, 06:59
    #32288312
Denis Uskov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: For each CollectionItem in Collection. Delphi: ?
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
09.10.2003, 07:01
    #32288313
Denis Uskov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: For each CollectionItem in Collection. Delphi: ?
Ага, опечатка получилась
Код: plaintext
СМ. НИЖЕ может d:=dc.Item[i]


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

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


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

Nobody faults but mine... (LZ)
...
Рейтинг: 0 / 0
09.10.2003, 17:49
    #32289250
ZrenBy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA: For each CollectionItem in Collection. Delphi: ?
Дебильный способ
Код: 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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / VBA: For each CollectionItem in Collection. Delphi: ? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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