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

Ваш аккаунт

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

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

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

SHBrowseForFolder

583
13 апреля 2003 года
#define
150 / / 03.12.2002
Как вызвать диалог выбора директории? Без использования компонент билдера - как например в винампе добавление директории - SHBrowseForFolder - как пользоваться? И чем SHBrowseForFolder отличается от SHBrowseForFolderA?
427
13 апреля 2003 года
Glazunov Oleg
79 / / 20.03.2000
Любые виндузятные функции имеют два вида - функции работающие в кодировке ANSI и функции работающие в кодировке Unicode. Соответственно первые функции оканчиваются на A, а вторые - на W. Так, например, есть функция DispatchMessageA() и DispatchMessageW(). Чтобы вручную не выбирать тот или иной вариант функции, процесс автоматизировали - за нас это делает компилятор. Выбор функций осуществляется определением (#define), на сколько я знаю, по умолчанию используется ANSI, тоесть функции, оканчивающиеся на A.
583
14 апреля 2003 года
#define
150 / / 03.12.2002
Так как все-таки вызвать эту функцию в билдере? Что необходимо подключить?
427
16 апреля 2003 года
Glazunov Oleg
79 / / 20.03.2000
Цитата:
Originally posted by #define
Так как все-таки вызвать эту функцию в билдере? Что необходимо подключить?



Привожу пример использования функции SHBrowseForFolder.

//-------------------------------

//ниже идущее определение и подключение хедера должно быть обязательно до подключения vcl.h
//иначе будут при компиляции возникать ошибки
#define NO_WIN32_LEAN_AND_MEAN
#include <shlobj.h>

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//-------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
//определяем и заполняем структуру BROWSEINFOA
BROWSEINFOA brinfo;
char dispname[256];
brinfo.hwndOwner = Form1->Handle;
brinfo.lpszTitle = "Browse for folder";
brinfo.pszDisplayName =(char *) &dispname;
brinfo.ulFlags = BIF_RETURNONLYFSDIRS ;
brinfo.lpfn = NULL;

//вызываем функцию SHBrowseForFolder и передаем ей заполненную выше структуру
SHBrowseForFolder(&brinfo);

}
//-------------------------------

1.9K
16 апреля 2003 года
XilefNori
34 / / 28.02.2003
Цитата:
Originally posted by Glazunov Oleg


Привожу пример использования функции SHBrowseForFolder.

//-------------------------------

//ниже идущее определение и подключение хедера должно быть обязательно до подключения vcl.h
//иначе будут при компиляции возникать ошибки
#define NO_WIN32_LEAN_AND_MEAN
#include <shlobj.h>

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//-------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
//определяем и заполняем структуру BROWSEINFOA
BROWSEINFOA brinfo;
char dispname[256];
brinfo.hwndOwner = Form1->Handle;
brinfo.lpszTitle = "Browse for folder";
brinfo.pszDisplayName =(char *) &dispname;
brinfo.ulFlags = BIF_RETURNONLYFSDIRS ;
brinfo.lpfn = NULL;

//вызываем функцию SHBrowseForFolder и передаем ей заполненную выше структуру
SHBrowseForFolder(&brinfo);

}
//-------------------------------



Лично у меня данный код вызвал следующую ошибку:
Access violation at address 77610542 in module SHELL.DLL. Read of address 00000000

Интересно почему?

ОС - Win2000
Компилятор - С++Builder 6 (Enterprize)

362
17 апреля 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by XilefNori


Лично у меня данный код вызвал следующую ошибку:
Access violation at address 77610542 in module SHELL.DLL. Read of address 00000000

Интересно почему?

ОС - Win2000
Компилятор - С++Builder 6 (Enterprize)



А у меня вроде заработало, на тех же условиях

294
23 июля 2004 года
Plisteron
982 / / 29.08.2003
Цитата:
Originally posted by Glazunov Oleg

Код:
void __fastcall TForm1::FormShow(TObject *Sender)
{
//определяем и заполняем структуру BROWSEINFOA
  BROWSEINFOA brinfo;
  char dispname[256];
  brinfo.hwndOwner = Form1->Handle;
  brinfo.lpszTitle = "Browse for folder";
  brinfo.pszDisplayName =(char *) &dispname;
  brinfo.ulFlags = BIF_RETURNONLYFSDIRS ;
  brinfo.lpfn = NULL;

//вызываем функцию SHBrowseForFolder и передаем ей заполненную выше структуру
  SHBrowseForFolder(&brinfo);


Лично у меня это вызывает некоторый сомнения...
А не

 
Код:
brinfo.pszDisplayName = dispname;

случайно писать надо? Афаир, принимается char*, а не char**.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог