|
Вопрос # 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);
- begin
- GetDriveType(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сця, де призупинилося.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|