Autor Beitrag
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 463
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Fr 26.08.16 12:33 
Ein freundliches Hallo an alle,

ich möchte eine Liste der vorhandenen Laufwerke haben. Die kann ich natürlich mit "TDriveComboBox" erhalten. Vielleicht gibt es aber auch noch eine Möglichkeit direkt eine Stringliste zu erhalten, ohne eine ComboBox zu bemühen.

Ich habe in der Hilfe jedenfalls nichts gefunden. Manchmal muß man eben wissen wie das heißt, was man sucht.

Grüße von der etwas warmn und sonnigen Nordsee ( 26° 85% [tropf, tropf] )

Peter
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2274
Erhaltene Danke: 419

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 26.08.16 13:01 
Halli Hallo Peter18,

das lässt sich mit WinAPI Funktionen wie GetLogicalDrive oder GetLogicalDriveStrings gut lösen.
Wenn es dir noch um bestimmte Laufwerke geht, so verwende hinzu GetDriveType.

Ob die Methoden schon im D4 importiert wurden, weiss ich leider nicht, aber daran sollte es nicht scheitern. ;)

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 463
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Fr 26.08.16 13:31 
Hallo Frühlingsrolle, (schmackhafter Name)

Dank Dir für die Antwort! (Sie sind importiert) In der Tat, ich will die Liste der Laufwerke mit "GetDriveType" prüfen und das CD/DVD-Laufwerk finden. Es gibt also keine Funktion, die eine Stringliste erstellt, wie sie für "TDriveComboBox" gebraucht wird, (darauf hatte ich spekuliert) oder kann ich das Ergebnis von GetLogicalDriveStrings direkt als Stringliste verwenden?

Ich glaube ein bischen Bitpulerei ist da warscheinlich einfacher.

Grüße von der Nordsee

Peter
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2274
Erhaltene Danke: 419

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 26.08.16 15:38 
Ja, so ungefähr:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
private
  procedure GetMyDrives(AList: TStrings);

procedure TForm1.GetMyDrives(AList: TStrings);
const
  //DRIVE_FIXED = 3;
  DRIVE_CDROM = 5;
var
  size: DWord; // oder Cardinal
  buffer: array [0..128of AnsiChar;
  temp: PAnsiChar;
begin
  size := GetLogicalDriveStrings(SizeOf(buffer), buffer);
  if (size = 0)  then
    exit;
  temp := buffer;
  while temp[0] <> #0 do
  begin
    if GetDriveType(temp) = DRIVE_CDROM then
      AList.Add(temp);
    temp := StrEnd(temp) + 1;
  end;
end;

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
t.roller
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 118
Erhaltene Danke: 34



BeitragVerfasst: Fr 26.08.16 18:11 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
procedure List_CDROM_Drives;
const
  DRIVE_UNKNOWN = 0;
  DRIVE_NO_ROOT_DIR = 1;
  DRIVE_REMOVABLE = 2;
  DRIVE_FIXED = 3;
  DRIVE_REMOTE = 4;
  DRIVE_CDROM = 5;
  DRIVE_RAMDISK = 6;
var
  r: LongWord;
  Drives: array[0..128of char;
  pDrive: PChar;
begin
  Form1.DriveComboBox1.Items.clear;  // Form evtl. anpassen
  r := GetLogicalDriveStrings(SizeOf(Drives), Drives);
  if r = 0 then Exit;
  if r > SizeOf(Drives) then
    raise Exception.Create(SysErrorMessage(ERROR_OUTOFMEMORY));
  pDrive := Drives;
  while pDrive^ <> #0 do
  begin
    if GetDriveType(pDrive) = DRIVE_CDROM then
       Form1.DriveComboBox1.Items.Add(pDrive); // Form evtl. anpassen
    Inc(pDrive, 4);
  end;
  Form1.DriveComboBox1.ItemIndex := 0// Form evtl. anpassen
  Form1.DriveComboBox1.Items.AddObject('vsIcon', TObject(vsIcon)); // Form evtl. anpassen
end;
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 463
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Mi 07.09.16 13:28 
Ein freundliches Hallo an alle,

Dank Euch für Eure Lösungen! Habe ganz vergessen, dass diese Frage noch offen war. Mit etwas Bitpulerei bin ich zu folgender Lösung gekommen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
function GetCD_Drive: String;
var
  Dr : DWORD  ;
  I  : Integer;
  Cd : String ;

begin
  Result := ''              ;
  Dr     := GetLogicalDrives;
  I      := 0               ;
  While (Result = ''and (I < 27do
  begin
    if Dr and $0001 > 0 then
    begin
      Cd := Chr( 65 + I ) + ':\';
      if GetDriveType( PChar( Cd ) ) = DRIVE_CDROM then Result := Cd;
    end;
    Dr := Dr shr 1;
    I  := I + 1   ;
  end;
end;

Grüße von der sonnigen Nordsee (noch 22°)

Peter