Einzelnen Beitrag anzeigen

Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#13

Re: Falsche Reihenfolge der Laufwerke!

  Alt 13. Nov 2005, 00:58
Moin,

jetzt sind es doch drei Stunden geworden, bis ich alle Units und das Projekt beisammen hatte. Dabei habe ich festgestellt, dass die Laufwerke von cdrip und cddb in derselben Reihenfolge aufgelistet werden. Die Beschreibung ist lediglich etwas anders.

Für cdrip sieht es so aus:

Delphi-Quellcode:
procedure lw_cdrip;
type
  TCDROMName = array[0..255] of char;
var
  i : Byte;
  anz_CDRom : Byte;
  text : String;
  CDRomName : TCDROMName;
  FParams : TCDROMParams;
  TargetID,
  AdapterID,
  LunID : Byte;
begin
  if CR_Init = CDEX_ERROR
  then begin
    ShowMessage('Fehler beim Initialisieren von CD Rip');
    Exit;
  end;

  Anz_CDRom := CR_GetNumCDROM;

  cmb_Drives_cdrip.Clear;

  for i := 0 to anz_CDROM - 1
  do begin
    CR_SetActiveCDROM(i);
    if CR_GetCDROMParameters(FParams)<> CDEX_ERROR
    then begin
      CDRomName1 := TCDROMName(FParams.lpszCDROMID);
      TargetID := FParams.btTargetID;
      AdapterID := FParams.btAdapterID;
      LunID := FParams.btLunID;

      Text := IntToStr(TargetID) + ':'
                   + IntToStr(AdapterID) + ':'
                   + IntToStr(LunID) + ' - '
                   + CDRomName;

      cmb_Drives_cdrip.Items.Add(Text);
    end;
  end;

  CR_SetActiveCDROM(0);
  cmb_Drives_cdrip.ItemIndex := CR_GetActiveCDROM;
end;
Für CDDB:

Delphi-Quellcode:
procedure lw_cddb;
var
  i : Byte;
  anz_CDRom : Byte;
  text : String;
  CDRomName : ShortString;
  TargetID,
  AdapterID,
  LunID : Byte;
begin
  CDDB := TCDDB.Create(self);

  anz_CDRom := CDDB.CDRoms.CdRomCount;

  for i := 0 to anz_CDRom - 1 do
  begin
    CDRomName := CDDB.CDRoms.CdRom[i].Description;
    TargetID := CDDB.CDRoms.CdRom[i].Target;
    AdapterID := CDDB.CDRoms.CdRom[i].HaID;
    LunID := CDDB.CDRoms.CdRom[i].Lun;

    Text := IntToStr(TargetID) + ':'
                 + IntToStr(AdapterID) + ':'
                 + IntToStr(LunID) + ' - '
                 + CDRomName;

    cmb_Drives_cddb.Items.Add(Text);
  end;

  cmb_Drives_cddb.ItemIndex := CDDB.CdRoms.ActiveCdRom;
end;
In den proceduren werden verschiedene ComboBoxen verwendet. Bei Auswahl des selben Laufwerkes sind die Werte für den ItemIndex identisch. Jedoch muss die Auswahl an beide Komponenten weitergeben werden.

Gesetzt werden sie mit:
Delphi-Quellcode:
CR_SetActiveCDROM(cmb_Drives.ItemIndex); // CD Rip
CDDB.ChangeActiveDrive(cmb_Drives.ItemIndex); // CDDB
Und ausgelesen mit:
Delphi-Quellcode:
cmb_Drives.ItemIndex := CR_GetActiveCDROM; // CD Rip
cmb_Drives.ItemIndex := CDDB.CdRoms.ActiveCdRom; // CDDB
Ach so, CDDB ist unter Var für die unit mit dem Typ TCCDB vereinbart. Die Units cdrip_dll und cddb stehen in den uses.

Wenn jetzt die Reihenfolge bei Dir nicht übereinstimmt, hast Du Fehler in Deinem Sourcen.
Angehängte Dateien
Dateityp: zip cdtest_source_306.zip (237,9 KB, 15x aufgerufen)
Dateityp: 7z cdtest_binary_342.7z (201,5 KB, 11x aufgerufen)
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat