Verzeichnisstruktur in einem vorbereitetem Formular anzeigen lassen
-
Hallo alle zusammen,
ich weiß, das Thema hatten wir schon, aber nicht in schon existiereneden Formular.
In unterem Code versuche ich die Verzeichnisstruktur in meinem Formular anzeigen lassen. Ich habe ein Formular Form1 und ein unten eingefügten Standardbutton Button1.In cpp:
int CALLBACK BrowsePathCallback(HWND hwnd,UINT msg,LPARAM lp,LPARAM pdata) { if (msg==BFFM_INITIALIZED) SendMessage(hwnd,BFFM_SETSELECTION,TRUE,pdata); return 0; } //--------------------------------------------------------------------------- bool selection(TForm* parent, char* wurzelordner) { char* pPathBuffer = new char[MAX_PATH]; strcpy(pPathBuffer, wurzelordner); BROWSEINFO mb; mb.hwndOwner = parent; mb.pidlRoot = NULL; mb.pszDisplayName = NULL; mb.lpszTitle = wurzelordner; mb.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT; mb.lpfn = BrowsePathCallback; mb.lParam = (LPARAM)pPathBuffer; LPITEMIDLIST ItemIDList = SHBrowseForFolder(&mb); if(ItemIDList != NULL) { char strPath[MAX_PATH]; SHGetPathFromIDList(ItemIDList,strPath); //Hier kan man noch was schreiben... return true; } return false; }Jetzt Aufruf über Button1:
void __fastcall TForm1::Button1Click(TObject *Sender) { selection(Form1,"C:\\0");//Form1 als übergeordneter Objekt, wirzelverzeichnis ist Laufwerk C: }Compiliert wird das zwar, aber nach dem Buttonclick() gibts keinen sichtbaren Erfolg.
Kann jemand mir helfen? Wo ist mein Fehler? Denke ich überhaupt richtig?
-
Hallo,
hwndOwner verlangt ein Handle auf das Ownerfenster. Probiers mal damit
mb.hwndOwner = parent->Handle;
-
Hi,
Vielleicht liegt es daran.
bool selection(TForm* parent, AnsiString wurzelordner) //char* wurzelordner) { char* pPathBuffer = new char[MAX_PATH]; strcpy(pPathBuffer, wurzelordner.c_str()); //wurzelordner);unverbindlich!
Grüsse
-
Vielen Dank Braunstein,
es funzt super!
Hatte das Handle übersehen. Dennnoch habe ich trotzdem eine Frage:
Wie kann ich die Verzeichnisstruktur in meinem existierendem Formular Form1 darstellen, nicht im extra Fenster? Welche Methoden gibts dafür?
-
Hallo
dazu brauchst du FindFirst/FindNext, um einzeln alle Verzeichnisse in zum Beispiel in eine TListBox einzutragen. Beispiele dazu findest du in der BCB-Hilfe und hier im Forum.
bis bald
akari
-
Du könntest dir das selber zusammenbasteln. Einfach die Verzeichnisstruktur irgendwie einlesen (FindFirst/FindNext oder was aus boost::filesystem) und dann in einem TreeView darstellen.
-
Danke allen für Eure Hilfe!
Ich werds versuchen.