Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2023, 15:05   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию Найти все диски

Использую такую вот процедуру. Но не покидает ощущение, что есть более прямой метод получения списка дисков. Вопрос: существует?
Код:
Procedure Disks(ss:TStrings);
var
  s1:string[2];
  c:char;
begin
  s1:='A:';
  ss.Clear;
  A.SetTextBuf(PChar_Computer);
  For c:='A' to 'Z' do begin
    s1[1]:=c;
    If DirectoryExists(s1) then begin
      ss.Add(s1);
    End;
  End;
end;
Kronos913 вне форума Ответить с цитированием
Старый 01.11.2023, 15:44   #2
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Код:
type
  TLogicalDrive = 'A'..'Z';
  TLogicalDrives = set of TLogicalDrive;

var
  Drive: TLogicalDrive;
  Drives: TLogicalDrives;
begin
  Drives := TLogicalDrives(GetLogicalDrives);
  for Drive := Low(Drive) to High(Drive) do
    if Drive in Drives then
      // do someting
end;
Vapaamies вне форума Ответить с цитированием
Старый 05.11.2023, 14:39   #3
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

когда-то делал вот так:
Код:
//----- определяем, есть ли съёмные диски --------------------------------------
procedure TForm1.DiskUSB;
var e:Byte;
    pn:array[1..26]of string;
    s:array[1..26]of Byte;
begin
   Form1.Memo1.Clear;
   //----- определяем тип диска: 1-не существует, 2-съёмный, 3-жёсткий, 5-CD-ROM
   for e:=1 to 26 do
   begin
      s[e]:=GetDriveType(d[e]);
      if(s[e]=1)then pn[e]:='False';
      if(s[e]<>1)then pn[e]:='True';
   end;
   //----- перебираем все съёмные диски ----------------------------------------
   for e:=1 to 26 do
   begin
      if(s[e]=2)and(ps[e]='False')and(pn[e]='True')then
      begin
         Form1.Timer1.Enabled:=False;
         CheckAutorun(d[e]);
         Form1.Timer1.Enabled:=True;
      end;
   end;
   for e:=1 to 26 do ps[e]:=pn[e];//новые данные делаем старыми
end;
лишнее можно убрать, оставив только жёсткий диск
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 05.11.2023, 17:05   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от NetSpace Посмотреть сообщение
procedure TForm1.DiskUSB;
Цитата:
Сообщение от NetSpace Посмотреть сообщение
Form1.Memo1.Clear;
Плохой стиль обращаться к объекту класса из самого класса...
Arigato вне форума Ответить с цитированием
Старый 08.11.2023, 10:54   #5
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Плохой стиль обращаться к объекту класса из самого класса...
это чего, получается, типа нежелательно обращаться? или просто класс TForm убрать из строки?
Код:
Memo1.Clear;
это влияет на быстродействие или какие-то ошибки и исключения или перегрузку вызвать может?
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 08.11.2023, 12:09   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Исключительно в рамках парадигмы ООП. Form1 это объект класса TForm1. Обращаться из класса к конкретному объекту этого же класса нелогично.
Arigato вне форума Ответить с цитированием
Старый 09.11.2023, 00:39   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

2 NetSpace
Цитата:
Form1 это объект класса TForm1
Правильнее сказать что Form1 это переменная, которая содержит ссылку на конкретный экземпляр класса TForm1. Если это автосозданный в модуле проекта экземпляр. Но конкретный экземпляр может быть создан и динамически, причем в количестве более одной штуки. На что тогда будет указывать ссылка в переменной Form1?
А любой метод класса имеет в параметрах неявный параметр Self, который как раз содержит ссылку на тот конкретный эклемпляр, для которого этот метод вызван. Таким образом если вы в методе класса обратитесь к любому полю класса например:
Код:
Memo1.Clear;
будьте уверены что очистится Мемо именно в том окне где вы и нажали кнопку.

Последний раз редактировалось northener; 09.11.2023 в 00:43.
northener вне форума Ответить с цитированием
Старый 09.11.2023, 14:52   #8
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Старожилы и модераторы решили в этой теме поучить друг друга программированию?
Vapaamies вне форума Ответить с цитированием
Старый 09.11.2023, 15:17   #9
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Vapaamies, присоединяйтесь
Arigato вне форума Ответить с цитированием
Старый 09.11.2023, 23:45   #10
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Я всегда против офтопика и флуда, а по теме уже отписался.
Vapaamies вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сд диски C++ Мичман Помощь студентам 0 19.12.2013 22:52
DVD-диски genrix Компьютерное железо 7 20.03.2011 20:59
SSD диски valerij Компьютерное железо 0 18.11.2010 00:48
Лазерная указка поможет найти пиратские диски mihali4 Свободное общение 11 22.12.2008 22:13