Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 6 388

/ вопрос решён /

Здравствуйте!
Определяю тип диска через GetDriveType(); в Memo всё выводится как надо, но хочется, преобразовать огромный код в цикл. Уже второй день пытаюсь это сделать, но возникла проблема с типами переменных.

Изначально код имеет вид:

 
case GetDriveType('A:\') of 
  0 : Memo1.Lines.Add('Диск "A:" - не поддается опpеделению'); 
  1 : Memo1.Lines.Add('Диск "A:" - не существует'); 
  DRIVE_REMOVABLE: Memo1.Lines.Add('Диск "A:" - съёмный'); 
  DRIVE_FIXED : Memo1.Lines.Add('Диск "A:" - фиксированный'); 
  DRIVE_REMOTE : Memo1.Lines.Add('Диск "A:" - удалённый'); 
  DRIVE_CDROM : Memo1.Lines.Add('Диск "A:" - CD-ROM'); 
  DRIVE_RAMDISK : Memo1.Lines.Add('Диск "A:" - RAM-DISK'); 
end;

и так для каждого диска - А, B, C, D и т.д.

Вот так попыталась преобразовать в цикл (код указан в приложении).
Подскажите, пожалуйста, что делаю не так.

Приложение:
  1. var
  2. DiskInfo1: Int64;
  3. n: Integer;
  4.  
  5. procedure TForm4.Button1Click(Sender: TObject);
  6. begin
  7. GetDriveType(DiskInfo1) ;
  8. begin
  9. for n := 1 to 9 do
  10. begin
  11. DiskInfo1 := GetDriveType(n) ;
  12. case DiskInfo1 of
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20. end;
  21. end;
  22. end;


Цирцея Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задала: Цирцея (статус: Посетитель)
Вопрос отправлен: 16 марта 2013, 20:33
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 16 апреля 2013, 17:07; участников в обсуждении: 3.
Drinkenz

Drinkenz (статус: 1-ый класс), 16 марта 2013, 20:54 [#1]:

Есть много способов. Например можно использовать вот такой
n: char;
begin
GetDriveType(pointer(DiskInfo1)) ;
 begin
  for n := 'A' to 'F' do
   begin
   DiskInfo1 := GetDriveType(pchar(n)) ;
    case DiskInfo1 of
     0 : form1.Memo1.Lines.Add('Диск "'+n+ ':" - не поддается опpеделению');
... и т.д.
Цирцея

Цирцея (статус: Посетитель), 16 марта 2013, 21:05 [#2]:

Drinkenz, спасибо, но выдает ошибку

"First chance exception at $75DF969B. Exception class EAccessViolation with message 'Access violation at address 75DFD160 in module 'KERNELBASE.dll'. Read of address 00000041'. Process Project1.exe (5548)"
Самый страшный вирус всегда сидит перед компьютером.
Drinkenz

Drinkenz (статус: 1-ый класс), 16 марта 2013, 21:42 [#3]:

По невнимательности ошибку допустил. Надо добавить ':/'
DiskInfo1 := GetDriveType(pchar(n+':/')) ;
Цирцея

Цирцея (статус: Посетитель), 16 марта 2013, 21:47 [#4]:

Drinkenz, спасибо большое!
Всё заработало!

Немного исправила код и " GetDriveType(pchar(n+':\')) " записала прямо в case, а DiskInfo1 вообще не использовала
Самый страшный вирус всегда сидит перед компьютером.

16 марта 2013, 22:25: Статус вопроса изменён на решённый (изменил автор вопроса — Цирцея)

bugmenot

bugmenot (статус: 3-ий класс), 16 апреля 2013, 17:07 [#5]:

Так надо код вытащить в отдельную функцию и сразу станет чисто и аккуратно:
function DriveTypeToStr(DriveType: Cardinal): string;
begin
  case DriveType of
    DRIVE_UNKNOWN     : Result := 'не поддается опpеделению';
    DRIVE_NO_ROOT_DIR : Result := 'не существует';
    DRIVE_REMOVABLE   : Result := 'съёмный';
    DRIVE_FIXED       : Result := 'фиксированный';
    DRIVE_REMOTE      : Result := 'удалённый';
    DRIVE_CDROM       : Result := 'CD-ROM';
    DRIVE_RAMDISK     : Result := 'RAM-DISK';
  else
    Result := 'неожиданный O_o';
  end;
end;
виконання програми розпочинається з того самого мiсця, де призупинилося.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:46
Выполнено за 0.03 сек.