Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Load & Save диалоги

249
23 июля 2005 года
DissDoc
639 / / 01.10.2004
Вопрос собственно в том, какие функции нужно использовать, чтобы загрузить или сохранить файл в директории, выбранную вручную?
406
23 июля 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by DissDoc
Вопрос собственно в том, какие функции нужно использовать, чтобы загрузить или сохранить файл в директории, выбранную вручную?


SHBrowseForFolder

249
23 июля 2005 года
DissDoc
639 / / 01.10.2004
Цитата:
Originally posted by vitaly2003s
SHBrowseForFolder


Я че-то около часа провозился
, так и не врубился как эта функция работает! ПОМОГИТЕ!
PS В MSDN лазил!

249
24 июля 2005 года
DissDoc
639 / / 01.10.2004
Цитата:
Originally posted by DissDoc
Я че-то около часа провозился
, так и не врубился как эта функция работает! ПОМОГИТЕ!
PS В MSDN лазил!



собственно меня интересует только вот какой вопрос (я в англ языке не силен, поэтому прошу помощи)
typedef struct _browseinfo {
HWND hwndOwner;
LPCITEMIDLIST pidlRoot; [COLOR=red]// что это[/COLOR]
LPTSTR pszDisplayName;[COLOR=red]// что это[/COLOR]
LPCTSTR lpszTitle;[COLOR=red]// что это[/COLOR]
UINT ulFlags;[COLOR=red]// что это[/COLOR]
BFFCALLBACK lpfn;[COLOR=red]// что это[/COLOR]
LPARAM lParam;
int iImage;[COLOR=red]// что это[/COLOR]
} BROWSEINFO

406
24 июля 2005 года
vitaly2003s
481 / / 27.07.2004
Посмотри сюда:
http://forum.codenet.ru/showthread.php?s=&threadid=24460&perpage=25&pagenumber=1

Тут я уже давал ответ как использовать данную функцию
249
25 июля 2005 года
DissDoc
639 / / 01.10.2004
Цитата:
Originally posted by vitaly2003s
Посмотри сюда:
http://forum.codenet.ru/showthread.php?s=&threadid=24460&perpage=25&pagenumber=1

Тут я уже давал ответ как использовать данную функцию



Может я чего не понимаю, но там не слова о данной функции....:D

13K
25 июля 2005 года
YuryGeorge
1 / / 25.07.2005
Пример кода

// используется стандартный диалог сохранения
static char BASED_CODE szFilter[] = "AutoCAD R12/LT2 DXF (*.dxf)|*.dxf||";
CFileDialog dlg(FALSE,"dxf",strFileName,OFN_HIDEREADONLY | OFN_PATHMUSTEXIST |OFN_OVERWRITEPROMPT | OFN_ENABLESIZING,szFilter,NULL);
// делаем активным фильтр "AutoCAD R12/LT2 DXF"
dlg.m_ofn.nFilterIndex = 1;
// задаем начальную директорию
dlg.m_ofn.lpstrInitialDir = strDir;
// задаем заголовок диалогового окна
LoadString(hInstStr,IDS_TITLE_SAVE_EXPORT,(LPSTR)szBuff,DIMBUFF);
dlg.m_ofn.lpstrTitle = szBuff;
// показываем диалог
if(dlg.DoModal() == IDOK)
249
25 июля 2005 года
DissDoc
639 / / 01.10.2004
Цитата:
Originally posted by YuryGeorge
Пример кода

// используется стандартный диалог сохранения
static char BASED_CODE szFilter[] = "AutoCAD R12/LT2 DXF (*.dxf)|*.dxf||";
CFileDialog dlg(FALSE,"dxf",strFileName,OFN_HIDEREADONLY | OFN_PATHMUSTEXIST |OFN_OVERWRITEPROMPT | OFN_ENABLESIZING,szFilter,NULL);
// делаем активным фильтр "AutoCAD R12/LT2 DXF"
dlg.m_ofn.nFilterIndex = 1;
// задаем начальную директорию
dlg.m_ofn.lpstrInitialDir = strDir;
// задаем заголовок диалогового окна
LoadString(hInstStr,IDS_TITLE_SAVE_EXPORT,(LPSTR)szBuff,DIMBUFF);
dlg.m_ofn.lpstrTitle = szBuff;
// показываем диалог
if(dlg.DoModal() == IDOK)



Спасибо конечно, но это [COLOR=red]MFC[/COLOR], а хотелось бы WinAPI!

13K
25 июля 2005 года
Smi|e
1 / / 25.07.2005
Цитата:
Originally posted by DissDoc
Спасибо конечно, но это [COLOR=red]MFC[/COLOR], а хотелось бы WinAPI!



Пишешь обработчик нажатия на кнопку:

procedure TForm1.Button1Click(Sender: TObject);
type
s = string[40];
var
Dialog: BROWSEINFO; //переменная, в которой хранятся все параметры диалога
Folder: ^s; //переменная, в которую возвращается незвание выбранной папка
begin
New(Folder);

//задаем параметры диалога
Dialog.hwndOwner:= Handle;
Dialog.pidlRoot:= nil; //начальная дирнктория(если nil, то рабочий стол)
Dialog.pszDisplayName:= PChar(Folder); //переменная, в которую возвращается незвание выбранной папка
Dialog.lpszTitle:= 'Выберите папку'; //текст, отображаемый в диалоге
Dialog.ulFlags:= 0; //параметры диалога(если 0, то стандартный диалог)
Dialog.lpfn:= nil; //адрес ф-ии, которая выполняется после выбора папки(в нашем случае она отсутствует)
Dialog.lParam:= 0; //параметры, передаваемые предыдущей ф-ии, если она определена
Dialog.iImage:= 0; //в эту переменную возвращается индекс иконки выбранной папки
SHBrowseForFolder(Dialog); //показываем диалог
SetWindowText(Handle, PChar(Folder)); //показываем название выбранной папки

Dispose(Folder);
end;

249
25 июля 2005 года
DissDoc
639 / / 01.10.2004
Цитата:
Originally posted by Smi|e
Пишешь обработчик нажатия на кнопку:

procedure TForm1.Button1Click(Sender: TObject);
type
s = string[40];
var
Dialog: BROWSEINFO; //переменная, в которой хранятся все параметры диалога
Folder: ^s; //переменная, в которую возвращается незвание выбранной папка
begin
New(Folder);

//задаем параметры диалога
Dialog.hwndOwner:= Handle;
Dialog.pidlRoot:= nil; //начальная дирнктория(если nil, то рабочий стол)
Dialog.pszDisplayName:= PChar(Folder); //переменная, в которую возвращается незвание выбранной папка
Dialog.lpszTitle:= 'Выберите папку'; //текст, отображаемый в диалоге
Dialog.ulFlags:= 0; //параметры диалога(если 0, то стандартный диалог)
Dialog.lpfn:= nil; //адрес ф-ии, которая выполняется после выбора папки(в нашем случае она отсутствует)
Dialog.lParam:= 0; //параметры, передаваемые предыдущей ф-ии, если она определена
Dialog.iImage:= 0; //в эту переменную возвращается индекс иконки выбранной папки
SHBrowseForFolder(Dialog); //показываем диалог
SetWindowText(Handle, PChar(Folder)); //показываем название выбранной папки

Dispose(Folder);
end;



О! ТО ЧТО НАДО! Спасибо!

249
25 июля 2005 года
DissDoc
639 / / 01.10.2004
Цитата:
Originally posted by DissDoc
О! ТО ЧТО НАДО! Спасибо!



Продолжаем поднятую мною тему!
Как мне теперь загрузить определенный файл?
Вот мой код. Для диалога открытия

Код:
BOOL FGetDirectory(LPTSTR szDir)
{
    BOOL fRet;
    TCHAR szPath[MAX_PATH];
    LPITEMIDLIST pidl;
    LPITEMIDLIST pidlRoot;
    LPMALLOC lpMalloc;
    BROWSEINFO bi =   {
       NULL, NULL,
       szPath, "Выберите папку",
       BIF_RETURNONLYFSDIRS,
       NULL, 0, 0
      };
       
    if (0 != SHGetSpecialFolderLocation(HWND_DESKTOP, CSIDL_DRIVES, &pidlRoot))
                return FALSE;
    if (NULL == pidlRoot)
                return FALSE;
    bi.pidlRoot = pidlRoot;
    pidl = SHBrowseForFolder(&bi);
    if (NULL != pidl)
                fRet = SHGetPathFromIDList(pidl, szDir);
    else
                fRet = FALSE;
    if (!SHGetMalloc(&lpMalloc) && (NULL != lpMalloc))
    {
      if (NULL != pidlRoot)
      {
       lpMalloc->Free(pidlRoot);
      }
      if (NULL != pidl)
      {
       lpMalloc->Free(pidl);
      }
    lpMalloc->Release();
    }
    return fRet;
}

LPTSTR PAlloc(int cch)
{
    return (LPTSTR) LocalAlloc(LMEM_FIXED, sizeof(TCHAR) * (cch+1));
}

BOOL PDeAlloc(HLOCAL mem_ptr)
{
    return (LocalFree(mem_ptr)==NULL) ? true : false;
}

Для загрузки файла
Код:
void LoadBMTrue(HWND hWnd, char *fin, BITMAP bmp)
{
    hbitmap = (HBITMAP)LoadImage(hInst,"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    if (!hbitmap)
        MessageBox(hWnd, "Alarm! (: File not found", "Error", MB_ICONERROR|MB_OK);
    else
    {  
        GetObject(hbitmap, sizeof(BITMAP), &bmp);
        hWidth = bmp.bmWidth;
        hHeight = bmp.bmHeight;

        HDC hdc = GetDC(hWnd);
        image_dc = CreateCompatibleDC(hdc);
        HBITMAP old_hbitmap = (HBITMAP)SelectObject(image_dc,hbitmap);
    }
}

И собственно сборка файла
 
Код:
case ID_FILE_OPEN:
            LPTSTR fname;
            fname=PAlloc(250);
            FGetDirectory(fname);
            LoadBMTrue(hWnd, fname, bitmap);
            PDeAlloc((HLOCAL)fname);
            break;


Вопрос! Чего мне не хватает, чтобы выбрать определенный файл?
406
25 июля 2005 года
vitaly2003s
481 / / 27.07.2004
C помощью функции SHBrowseForFolder можно получить имя каталога а не файла,а для получения диалога файла воспользуйся функцией GetOpenFileName.
За информацией обращяйся к той же ссылке,там данная функция была точно освещена.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог