Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Nicht belegte Laufwerksbuchstaben als Pulldown- Menü (https://www.delphipraxis.net/94688-nicht-belegte-laufwerksbuchstaben-als-pulldown-menue.html)

hagen28 25. Jun 2007 15:46


Nicht belegte Laufwerksbuchstaben als Pulldown- Menü
 
Hi,
ich programmiere noch nicht lange und hatte auch gerade erst ein dreiviertel Jahr Unterricht in der Schule. Jetzt bin ich über schweres Problem gestolpert und hoffe ihr könnt mir helfen.
Ich will ein Programm schreiben, was bestimmte Ordner als Laufwerke einbindet. Wie das geht, ist kein Problem, da es den schönen MS-Dos Befehl subst gibt. Ich bräuchte aber in meinem Programm eine Pulldown- Liste, in der alle noch nicht belegten Laufwerksbuchstaben aufgeführt sind. Wenn man einen Buchstaben auswählt, soll dieser in einem String gespeichert werden. Ich habe überhaupt keine Ahnung wie man sowas angehen kann und auch Google war nicht hilfreich.
Ich hoffe ihr könnt mir da weiterhelfen.

Ich wäre euch für leicht verständliche Erklärungen, bzw. Code- Beispiele sehr dankbar.
Jan

DeddyH 25. Jun 2007 15:48

Re: Nicht belegte Laufwerksbuchstaben als Pulldown- Menü
 
Hallo, herzlich Willkommen in der DP :dp: .
Schau Dir mal die Win32-API-Funktion GetDriveType an.

hagen28 25. Jun 2007 15:52

Re: Nicht belegte Laufwerksbuchstaben als Pulldown- Menü
 
So viel hilft mir das aber nicht weiter. Laut Delphi Hilfe kann man damit den DatenträgerTYP bestimmen.
Zitat:

The GetDriveType function determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive.

Matze 25. Jun 2007 15:53

Re: Nicht belegte Laufwerksbuchstaben als Pulldown- Menü
 
Hi,

wen du diesen Code ein wenig umschreibst, kommst du damit zum gewünschten Ergebnis.
Versuche den Code zu verstehen, führe ihn mal 1:1 aus und dann siehst du sicher schnell, was du abändern musst. :)

SirThornberry 25. Jun 2007 15:55

Re: Nicht belegte Laufwerksbuchstaben als Pulldown- Menü
 
Ich glaube er meint du sollst es anhand des Rückgabewertes machen. Auf diese Art und Weise kannst du auch GetVolumeInformation nutzen.
Am besten ist natürlich einfach die Verwendung von GetLogicalDrives weil man daran genau erkennt welche Laufwerksbuchstaben genutzt werden und welche nicht.

DeddyH 25. Jun 2007 15:57

Re: Nicht belegte Laufwerksbuchstaben als Pulldown- Menü
 
@SirThornberry :zwinker:

hagen28 25. Jun 2007 16:07

Re: Nicht belegte Laufwerksbuchstaben als Pulldown- Menü
 
Vielen Dank soweit. Besonders an Matze. Der Link hat mich ein ganzes Stück weiter gebracht. Musste ja auch nur drei Buchstaben und ein Leerzeichen einfügen :-D :-D
Nur wie kann ich jetzt ein Pulldown Menü erstellen und dort die Einträge der Listbox speichern? Hab leider noch nie mit Pulldown Menüs gearbeitet, denke aber dass es nicht allzu schwer ist, oder?

Matze 25. Jun 2007 16:12

Re: Nicht belegte Laufwerksbuchstaben als Pulldown- Menü
 
Hi,

dafür nutzt du einfach eine TComboBox. Diese kannst du gleich füllen wie eine TListBox.

Edit: Ich kenne deine Änderungen nicht, aber so hätte ich's wohl gelöst:

Delphi-Quellcode:
for I := 0 to 25 do
  if not DriveExists[I] then
    ComboBox1. // ...

hagen28 25. Jun 2007 16:24

Re: Nicht belegte Laufwerksbuchstaben als Pulldown- Menü
 
Mit den drei Buchstaben + ein Leerzeichen meinte ich das "not ". Damit hatte ich dann ja schon eine Auflistung aller nicht belegten Laufwerksbuchstaben. Natürlich kann man die obere Funktion komplett löschen, da ich ja nicht wissen will, ob der Buchstabe vllt. ein CD- Rom Laufwerk ist. Ich weiß ja, dass er noch nicht vergeben ist.

Dem Tipp mit der ComboBox werde ich gleich nachgehen.

marabu 25. Jun 2007 16:25

Re: Nicht belegte Laufwerksbuchstaben als Pulldown- Menü
 
Hallo Jan,

es gibt noch mehr Möglichkeiten. Insbesondere interessieren mich die Laufwerkstypen nicht, wenn ich die freien Laufwerksbuchstaben wissen möchte:

Delphi-Quellcode:
procedure GetLogicalDriveLetters(s: TStrings; mounted: Boolean = False);
var
  dw: DWORD;
  i: Integer;
  letter: Char;
begin
  s.BeginUpdate;              // Visualisierung abschalten
  s.Clear;                    // Mit leerer Liste beginnen
  dw := GetLogicalDrives;     // Mount-Status aller Laufwerksbuchstaben
  for letter := 'A' to 'Z' do // Schleife über alle Laufwerke
  begin
    if not mounted xor Odd(dw) then // Ein Rätsel für dich
      s.Add(letter + ':');    // Dann ist Laufwerksbuchstabe frei
    dw := dw shr 1;           // Nächstes Status-Bit auf Bit-Position 0 schieben
  end;
  s.EndUpdate;                // Visualisierung wieder einschalten
end;

procedure TDemoForm.FormCreate(Sender: TObject);
begin
  GetLogicalDriveLetters(ComboBox.Items);
end;
Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:55 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz