Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.01 c
3-73982
Zhouck
2003-10-01 11:59
2003.10.23
IBExpert


3-73968
OVAD
2003-10-01 15:07
2003.10.23
Помогите с фильтром.


14-74437
павел
2003-10-03 01:19
2003.10.23
глобальные переменные


11-74102
Immortal_
2003-02-08 20:13
2003.10.23
String 2 File


1-74231
MakNik
2003-10-09 15:07
2003.10.23
CRC-код файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский