| 
| 
 | Вопрос # 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 и т.д.
 
 Вот так попыталась преобразовать в цикл (код указан в приложении).
 Подскажите, пожалуйста, что делаю не так.
 Приложение:Переключить в обычный режим var DiskInfo1: Int64; n: Integer;  procedure TForm4.Button1Click(Sender: TObject);beginGetDriveType(DiskInfo1) ;  begin   for n := 1 to 9 do    begin    DiskInfo1 := GetDriveType(n) ;     case DiskInfo1 of           end;  end; end; 
|  |   Вопрос задала: Цирцея (статус: Посетитель)Вопрос отправлен: 16 марта 2013, 20:33
 Состояние вопроса: решён, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 16 апреля 2013, 17:07; участников в обсуждении: 3. 
|   | 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 (статус: 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 (статус: 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сця, де призупинилося.
 
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |