на главную предыдущая страница следующая страница

Получение списка выбранных файлов

Чтобы манипулировать со списоком файлов, достаточно выделить их с помощью insert. Но каим образом передать этот список плагину?

Итого: еще одна типичная задача - получить список выделенных файлов.

struct PanelInfo PInfo;
Info.PanelControl(PANEL_ACTIVE,FCTL_GETPANELINFO,0,&PInfo);
wchar_t FullName[MAX_PATH];
int Size=(int)Info.PanelControl(PANEL_ACTIVE,FCTL_GETPANELDIR,0,0);
wchar_t* CurDir=new wchar_t[Size];
Info.PanelControl(PANEL_ACTIVE,FCTL_GETPANELDIR,Size,CurDir);
size_t I;

if (PInfo.SelectedItemsNumber==0){

showMessage(L"Not files selected");
return false;
}
else{
for (I=0; I < PInfo.SelectedItemsNumber; I++)
{
size_t Size = Info.PanelControl(PANEL_ACTIVE,FCTL_GETSELECTEDPANELITEM,I,0);
PluginPanelItem* PPI=(PluginPanelItem*)malloc(Size);
if (PPI)
{
FarGetPluginPanelItem gpi={Size, PPI};
Info.PanelControl(PANEL_ACTIVE,FCTL_GETSELECTEDPANELITEM,I,&gpi);
GetFullName(FullName,CurDir,PPI->FileName);
showMessage(FullName);
free(PPI);
}
}
delete[] CurDir;
}

В итоге получим выдачу на экран сообщений - в каждом полный путь до файла.

http://api.farmanager.com/ru2/service_functions/control.html

Использована функция :


wchar_t *GetFullName(wchar_t *Dest,const wchar_t *Dir,const wchar_t *Name)
{
lstrcpy(Dest,Dir);
int len=lstrlen(Dest);

if (len)
{

if (Dest[len-1]==L'\\') --len;
else Dest[len]=L'\\';
lstrcpy(Dest+len+1,GetOnlyName(Name));
}
else lstrcpy(Dest, Name);

return Dest;

}