ComboBox mit Laufwerken
-
ich verwende die LMD-Tools und möchte alle aktuellen Laufwerke in einer LMD-ComboBox anzeigen lassen genauso wie die DriveComboBox.
Ich habe mir dazu eine Methode geschrieben, die mit Hilfe der WinAPI-Funktion GetLogicalDriveStrings() die Laufwerke in ein char-Array speichert. Ich möchte nun, dass die Laufwerke in eine StringListe geschrieben werden und als Parameter der Methode zurückgegeben werden. Hier mal mein Anfang:void __fastcall TfrmImport::GetDrives(TStringList* value) { TStringList* stl = new TStringList(); const int lenght = 100; char buffer[lenght] = {0}; GetLogicalDriveStrings(lenght, buffer); for (int i=0; i<lenght; i++) { //hier müssten die Werte nach jeder /0 in die StringListe geschrieben werden } delete stl; }
Aufruf der Funktion im Konstruktor der Form und im OnChange-Ereignis der ComboBox:
GetDrives(drives); //drives ist eine definierte TStringList cmbDrives->Items->AddStrings(drives); //Combobox cmbDrive
-
Hallo
Und deine Frage ist?
In deinem Kommentar bei der for-Schleife hast du doch schon selber beschrieben, was du machen must.
Und wozu du in der Funktion GetDrives noch eine neue StringList brauchst, weiß ich auch nicht.bis bald
akari
-
Und wozu du in der Funktion GetDrives noch eine neue StringList brauchst, weiß ich auch nicht.
Das stimmt. Hab ich wohl vergessen zu löschen
In deinem Kommentar bei der for-Schleife hast du doch schon selber beschrieben, was du machen must.
Ich weiss nur nicht, wie ich das am besten umsetze. Hab es mal so versucht:
void __fastcall TfrmImport::GetDrives(TStringList* str) { AnsiString s; const int lenght = 100; char buffer[lenght] = {0}; GetLogicalDriveStrings(lenght, buffer); for (int i=0; i<lenght; i++) { s += buffer[i]; if (buffer[i] == '\0') { str->Add(s); s = ""; } } }
Dies hat nur den Nachteil, dass die StringListe länger ist, da sie die Nullwerte mitnimmt. Das kann man ja bestimmt besser machen. Der buffer sieht so aus:
buffer[0] = 'C'
buffer[1] = ':'
buffer[2] = '\'
buffer[3] = '\0'
buffer[4] = 'D'
buffer[5] = ':'
usw...Wenn, das dann funktioniert muss ich noch die Namen der Laufwerke auslesen, damit ich sie zusammen mit den Laufwerksbuchstaben in der Combobox darstellen kann. Gibt es eine Funktion um die Laufwerksbezeichnungen auszulesen?
Oder gibt es vielleicht eine andere Möglichkeit, die Funktion der DriveComboBox für die LMDComboBox zu übernehmen? Da ich in meinem Programm fast ausschließlich die etwas besser aussehenden LMD-Komponenten verwende, möchte ich keine veralteten Komponenten wie die DriveComboBox einsetzen.
-
Hallo
Dies hat nur den Nachteil, dass die StringListe länger ist, da sie die Nullwerte mitnimmt. Das kann man ja bestimmt besser machen
Du must doch nur noch die Bedingung ein bißchen anpassen
for (int i=0; i<lenght; i++) { if (buffer[i] == '\0') { str->Add(s); s = ""; } else { s += buffer[i]; } }
Wenn, das dann funktioniert muss ich noch die Namen der Laufwerke auslesen, damit ich sie zusammen mit den Laufwerksbuchstaben in der Combobox darstellen kann. Gibt es eine Funktion um die Laufwerksbezeichnungen auszulesen?
Frag im WinAPI-Forum nach, oder such in der MSDN.
bis bald
Stefan