Re[6]: input type=file
От: DemonS  
Дата: 19.07.10 06:52
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, Аноним, Вы писали:


А>>Да у меня все просто — сохранить содержимое в файл. Никакой отправки на сервер — все локально.


CS>Я могу добавить <input type="file-name" /> — его значением будет имя файла, а не его содержимое.

CS>Соотв. можно разрешить программную установку оного. Пойдет?

Добрый день!
Я сам столкнулся с подобногй задачей несколько дней назад.
Решение — "<input type="file-name" />" для имени файла подойдет идеально.
Хотелось бы еще решение вида "<input type="dir-name" />" для выбора директории (именно это понадобилось мне).
Я вышел из положения созданием "буттона", при нажатии на который открывался стандартный виндовый "GetOpenFileName(&ofn)"
а выбранный путь записывался в "едит".
Что-то вроде:


void OnSelectPath( void )
{
    // выбрать каталог
    char    path[MAX_PATH];
    OPENFILENAME    ofn;
    ZeroMemory(&ofn, sizeof(OPENFILENAME));
    ofn.lStructSize        = sizeof(OPENFILENAME);
    ofn.hwndOwner        = m_hWnd;
    ofn.lpstrFilter        = "Swf-files\0*.swf\0All files\0*.*\0\0";
    ofn.nFilterIndex    = 1;
    ofn.lpstrFile        = path;
    ofn.nMaxFile        = MAX_PATH;
    ofn.lpstrInitialDir    = mSetValues.GetFullResPath();
    ofn.lpstrTitle        = "Выберите файл *.swf";
    ofn.Flags            = OFN_ENABLESIZING | OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_NODEREFERENCELINKS | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
    if (GetOpenFileName(&ofn))
    {
        std::string        temp;
        // выделяем только каталог
        temp.append(ofn.lpstrFile, ofn.nFileOffset - 1);
        htmlayout::dom::element    he = mHtmlRoot.find_first("#PathToRes");
        if (he.is_valid())
        {
            json::value        value;
            value = aux::a2w(temp.c_str()).operator const wchar_t*();
            he.set_value(value);
            this->PostMessage(WM_APPLY_PARAMETERS);
        }
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.