Creating TOpenDialog manually in C++ Builder XE 8 (firemonkey)

  

I am using C++ Builder XE8. As the TOpenDialog doesn’t work on Android, I am trying to make such thing myself. My logic is very simple. It’ll start to check file and folders from “/storage” and show all items on TListView. If I touch a folder (name) it’ll open that folder and if I touch a file, it should show the name on a label. So I assigned a function to TListView’s OnItemClick event.

Here is code. fpath is String, Label1 is showing current folder and Label2 is showing selected file.

void __fastcall TForm1::lviewitemclck(TObject * const Sender, TListViewItem * const AItem)
{
if (AItem->Text == “<< BACK”) {
if (!fpath.LastDelimiter(“/”) == 0) {
fpath = fpath.SubString(0, fpath.LastDelimiter(“/”));

Label1->Text = fpath;
Form1->showfiles(fpath);
}
}
else if ( DirectoryExists(fpath+ AItem->Text)) {
fpath = fpath+ AItem->Text;

Label1->Text = fpath;
Form1->showfiles(fpath);
}
else if (FileExists(fpath+ AItem->Text)) {
Label2->Text =”File: “+ fpath+ AItem->Text;
}
}

Below is the code of function to scan for files & folders and show them. stringlist is TStringList.

void __fastcall TForm1::showfiles (String path)
{

TSearchRec sr; // for scaning files and folders
TSearchRec fr; // to check whether the folder is accessible or not.

if (FindFirst(path+”/*”, faAnyFile, sr) == 0)
{
stringlist->Clear();
stringlist->Add(“<< BACK”); // being used to replace the “..”

do{
if(sr.Name != “.” && sr.Name != “..”){

if (DirectoryExists(path+”/”+sr.Name)) {
if (FindFirst(path+”/”+sr.Name+”/*”, faAnyFile, fr) == 0) { // to check if the folder is accessible
stringlist->Add(“/”+ sr.Name);
}
FindClose(fr);
}
else{
stringlist->Add(“/”+ sr.Name);
}

}
} while (FindNext(sr) == 0);
}
FindClose(sr);

stringlist->Sort();

Form1->Item->Free();

Form1->ListView1->BeginUpdate();

Form1->ListView1->ClearItems();

for( int i =0;i< stringlist->Count; i++){
Form1->Item = Form1->ListView1->Items->Add();
Form1->Item->Text = stringlist->Strings[i];
}
Form1->ListView1->EndUpdate();

}

Here the problem is, if I use ListView1->ClearItems() in TForm1::showfiles it shows me an error saying “Access violation at address (random no), accessing address 00000009”. And if I dont use ClearItems() it just add more lines with already existed lines. I am a beginer, so I dont know where I am doing wrong.

Comments are closed.