Jetzt habe ich BassCD.Dll ausprobiert. Damit bekomme ich das, was ich wollte: Einen Laufwerksbuchstaben und den Namen des Laufswerkes. Dazu benötigt man von der Seite
http://www.un4seen.com/bass.html die bass und die basscd. Für das Projekt nimmt man daraus die bass.pas, bass.dll, basscd.pas und basscd.dll. Im Archiv zur basscd ist ein Beispielprojekt. Das habe ich zusammengestrichen. Außerdem noch die Variable LW: String und zwei Befehle eingefügt sowie einen geändert, um die Laufswerkbezeichnung auf den Namen zu kürzen. Das sind unten die drei Befehle nach dem Begin bei Zeile 50/51. Ich habe keine Lust nachzuzählen; auf jeden Fall ist hier die Zeilenhöhe in beiden Spalten unterschiedlich. Die unit1 sieht dann so aus:
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, SysUtils, Forms, Classes, Controls, StdCtrls, Bass, BassCD;
type
TForm1 =
class(TForm)
cmbDrives: TComboBox;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure cmbDrivesChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
MAXDRIVES = 10;
var
Form1: TForm1;
curdrive: Integer = 0;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
n: PChar;
a: Integer;
lw,
text:
String;
begin
// check that BASS 2.1 was loaded
if (BASS_GetVersion <> DWORD(MAKELONG(2,1)))
then
begin
MessageBox(0, '
BASS version 2.1 was not loaded', '
Error', MB_ICONERROR);
Halt;
end;
// Get list of available drives
a := 0;
n := BASS_CD_GetDriveDescription(a);
while (a < MAXDRIVES)
and (n <>
nil)
do
begin
lw := n;
lw := copy(lw, 0, pos('
v', lw) - 1);
text := Format('
%s: %s', [Char(BASS_CD_GetDriveLetter(a)
+ Ord('
A')), lw]);
// "letter: description"
cmbDrives.Items.Add(text);
a := a + 1;
n := BASS_CD_GetDriveDescription(a);
end;
if (a = 0)
then
begin
MessageBox(0, '
No CD drives found', '
Error', MB_ICONERROR);
Halt;
end;
cmbDrives.ItemIndex := 0;
// select 1st drive
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
BASS_Free;
end;
procedure TForm1.cmbDrivesChange(Sender: TObject);
begin
// change current drive
curdrive := cmbDrives.ItemIndex;
end;
end.
Auf der Form befindet sich nur noch eine ComboBox.
Bleibt nur eine Sache. Die BassCD.Dll findet ein CD-Laufwerk, was am Promise-Raidcontroller hängt, nicht.
PS: Bei Interesse könnte ich auch mal die Projekte anhängen.