 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Lun 21 Dic, 2009 7:15 pm Asunto: treeview como explorador |
|
|
hola amigos del foro, lo que me lleva de cabezas es la posibilidad de crear un treeview que tenga los siguientes requicitos
1-que muestre todos los directorios y carpetas (como el explorer de windows)
2-que cada elemento mostradao tenga delante un checkbox
He intentado por dos dias y he encontrado en internet tremendos componentes que hacen lo que explique aqui, pero realmente he tratado de optar por no componentes de terceros aunque sean free y quiciera porder hacerlo yo mismo con un poco de ayuda.
Si alguien sabe como guiarme o ayudarme por favor espero respuesta, muchas gracias de antemano _________________ Todos somos ignorantes, lo que no todos ignoramos lo mismo... |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 05 Ene, 2010 2:29 pm Asunto: |
|
|
Un poco complicado de explicar así que trataré de hacerlo con algunas imágenes.
1.- Dentro de un Form nuevo, insertas los siguientes componentes.
TListView (con la propiedad name = LocalListView)
TComboBox (con la propiedad name = LocalComboBox)
TDirectoryListBox (con la propiedad name = LocalDirectory)
y el TForm le cambiamos en su propiedad name a Principal
Los nombres los he puesto para que tengas una idea del código.
2.- En el constructor del Form estableces el siguiente codigo, la función para rellenar el ListView de nombre ArchivosToListView la explico más abajo, creo que la puso _Leo (Feliz año!!)
| Código: |
//---------------------------------------------------------------------------
__fastcall TPrincipal::TPrincipal(TComponent* Owner)
: TForm(Owner)
{
// para LOCAL
Windows::THandle hImg;
SHFILEINFO fi;
// Imagenes para Small Icon
hImg = SHGetFileInfo("", 0, &fi, sizeof(fi), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
ListView_SetImageList(this->LocalListView->Handle, hImg, LVSIL_SMALL);
// Imagenes para Large Icon
hImg = SHGetFileInfo("", 0, &fi, sizeof(fi), SHGFI_SYSICONINDEX| SHGFI_LARGEICON);
ListView_SetImageList(this->LocalListView->Handle, hImg, LVSIL_NORMAL);
// Add Las constantes de visualizacion para el ListView
this->LocalCombBox->Items->AddObject("vsIcon", (TObject *)vsIcon);
this->LocalCombBox->Items->AddObject("vsList", (TObject *)vsList);
this->LocalCombBox->Items->AddObject("vsReport", (TObject *)vsReport);
this->LocalCombBox->Items->AddObject("vsSmallIcon", (TObject *)vsSmallIcon);
this->LocalCombBox->ItemIndex = 0;
// LLenamos el ListView con el directorio actual
ArchivosToListView(GetCurrentDir(), this->LocalListView);
}
//--------------------------------------------------------------------------- |
3.- En el evento OnChange del TComboBox ponemos el siguiente codigo, para que cuando se cambie, actualizamos la vista del TListView
| Código: | void __fastcall TPrincipal::LocalCombBoxChange(TObject *Sender)
{
TComboBox *cbL = dynamic_cast<TComboBox*>(Sender);
this->LocalListView->ViewStyle = (TViewStyle) cbL->Items->Objects[cbL->ItemIndex];
}
//---------------------------------------------------------------------------
|
4.- En el componente TDirectoryListBox, insertamos el siguiente código en el evento OnChange con la finalidad que cuando cambien el directorio se actualize nuestro TListView con la nueva ruta de archivos.
| Código: | void __fastcall TPrincipal::LocalDirectoryChange(TObject *Sender)
{
Application->ProcessMessages();
TDirectoryListBox *pDLB = dynamic_cast<TDirectoryListBox*>(Sender);
ArchivosToListView(pDLB->Directory, this->LocalListView);
}
//--------------------------------------------------------------------------- |
5.- En el componente TListView, solo he modificado la propiedad MultiSelect a true, para seleccionar varios archiv al mismo tiempo
6.- Por último, escribimos la función que rellena el ListView cada vez que hay un cambio en el componente TDirectoryListBox, puedes ponerla en la parte private de tu form (en el archivo .h)
| Código: | #ifndef Unit1H //<-- no se ha grabado el archivo por ello del Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TPrincipal : public TForm
{
__published: // IDE-managed Components
private: // User declarations
void __fastcall ArchivosToListView( String dir, TListView *FileView);
public: // User declarations
__fastcall TPrincipal1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TPrincipal *Principal;
//---------------------------------------------------------------------------
#endif |
7.- En el archivo .cpp del Form escribimos la función declarada en la parte private del punto 6
| Código: |
//------------------------------------------------------------------------------
// Funcion para Enviar los Archivos a un TStringList
// se le pasa la Ruta "dir" y el TListView para
// Ponerselo
//------------------------------------------------------------------------------
void __fastcall TPrincipal::ArchivosToListView( String dir, TListView *FileView)
{
CoInitialize(NULL);
// inserccion de Columnas
dir = dir.Trim();
Application->ProcessMessages();
FileView->Columns->Clear();
TListColumn *ListCol;
// Columna Archivo
ListCol = FileView->Columns->Add();
ListCol->Caption = "Archivo";
ListCol->Width = 200;
ListCol->AutoSize = true;
// Columna Size
ListCol = FileView->Columns->Add();
ListCol->Caption = "Tipo de Archivo";
ListCol->Width = 150;
ListCol->Alignment = taLeftJustify;
ListCol->AutoSize = true;
// Columna Ruta
ListCol = FileView->Columns->Add();
ListCol->Caption = "Ruta";
ListCol->Width = 250;
ListCol->Alignment = taLeftJustify;
ListCol->AutoSize = true;
// FileView->ViewStyle = vsReport;
// limpiamos el objeto para nuevas busquedas.
FileView->Items->Clear();
SHFILEINFO fi;
memset(&fi, 0x00, sizeof(fi));
TSearchRec sr;
TListItem* lvItem;
if (Pos(dir,"..")>0)
{
dir = dir.SubString(1,dir.Length()-2);
}
if (Pos(dir,".")>0)
{
dir = dir.SubString(1,dir.Length()-1);
}
bool finalizado = FindFirst(dir + "\\*.*", faAnyFile, sr);
String ArchivoNombre;
while (!finalizado)
{
Application->ProcessMessages();
ArchivoNombre = dir.Trim()+"\\"+sr.Name;
SHGetFileInfo(ArchivoNombre.c_str(), 0, &fi, sizeof(SHFILEINFO),
SHGFI_SYSICONINDEX | SHGFI_LARGEICON |SHGFI_TYPENAME | SHGFI_OPENICON | SHGFI_SMALLICON | SHGFI_DISPLAYNAME);
if(sr.Name != "." && sr.Name != "..")
{
Application->ProcessMessages();
lvItem= FileView->Items->Add();
lvItem->Caption= fi.szDisplayName;
lvItem->ImageIndex = fi.iIcon;
lvItem->SubItems->Add(fi.szTypeName);// size
lvItem->SubItems->Add(ExtractFilePath(ArchivoNombre));// ruta
}
finalizado = FindNext(sr);
}
FindClose(sr);
}
//--------------------------------------------------------------------------- |
y por ultimo una imágen en ejecucción del Formulario
Saludos _________________
 |
|
| Volver arriba |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Mar 05 Ene, 2010 6:07 pm Asunto: |
|
|
Hola Cesar Feliz Año nuevo para ti también...!!!
Muchas gracias por el código, super, solo que tengo algunos inconvenientes, he tratado de que no solo aparezca (por ejemplo) C: como la raíz o D: , sino que se vea como el explorador de windows que comienza con miPC y de allí si se ven C:, D:, etc, es decir se ve todo. Porque te planteo mi dilema cuando pongo los combobox al ListView , selecciono algun fichero y luego vario de directorio estos valores de los combobox se resetean y aparece como si no los hubioese seleccionado antes. Este dilema lo resolvi por la unica via que puedo dominar , a traves de un .INI pregunto y comparo, se que este es un metodo algo rustico pero no me se otra. Tambien esta el tema de casi siempre hay una maraña de carpeta y subcarpetas para llegar al fichero que uno desea y si cambias de ubicacion tambien se resetea el treeview y para volver a buscar la marcada es un gran rollo.....bueno Cesar espero me halla hecho entender.... Existe la posibilidad de poder mostrar MiPC y no solo una unidad logica como C:, D gracias amigo _________________ Todos somos ignorantes, lo que no todos ignoramos lo mismo... |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 06 Ene, 2010 11:49 am Asunto: |
|
|
Realmente es algo más complicado, pues literalmente me encuentro realizando un proyecto similar, asi que me puse manos a la obra y tomando como base la información de esta página. http://www.4oa.com/Article/html/6/33/486/2005/17479.html
Que presenta las rutas de la red de Windows y realizando algunas modificaciones estoy a punto de dar en el clavo para mostrar correctamtente la información.
Por el momento voy algo avanzado con el tema de paso te envio una imágen para que determines si esto es lo que necesitas.
Saludos _________________
 |
|
| Volver arriba |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Mie 06 Ene, 2010 1:45 pm Asunto: |
|
|
Hola Cesar, similar a la imagen es lo que necesito yo, solo que con la posibilidad de hacer una multiple seleccion de los ficheros o carpetas a traves de comboboxes, es con el objetivo de hacer una aplicacion de backups para la empresa donde trabajo...
Como ves seria mas sencillo marcar los ficheros o carpetas que el usuario necesita salvar con el metodo que te planteo (seleccion a traves del comboboxes) un ejemplo es el ntbackup que trae windows por defecto -en herramientas del sistema-. Espero haberme hecho entender y contar con tu apoyo. Estamos en contacto
saludos michel _________________ Todos somos ignorantes, lo que no todos ignoramos lo mismo... |
|
| Volver arriba |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Jue 14 Ene, 2010 1:38 pm Asunto: |
|
|
Hola Cesar, he intentado con algunas cabeceras
| Código: | #include <FileCtrl>
#include <ComCtrls> |
para el trabajo con el codigo de la pagina que dejas
| Cita: |
LPSHELLFOLDER desk;
LPITEMIDLIST net;
SHFILEINFO fi;
STRRET nome;
char scom[255];
TTreeNode *n;
TDir * d; |
el LPSHELLFOLDER desk; no me funcionaba pero con incluir #include <shlobj>ya funciona, ahora el codigo se me para con TDir*d; dice que no conoce esto. Alguna formade solucionarlo, he buscado en la ayuda y nada, he buscado texto en .hpp y .h y nada con esto...Alguna sugerencia?
gracias y saludos _________________ Todos somos ignorantes, lo que no todos ignoramos lo mismo... |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 14 Ene, 2010 3:28 pm Asunto: |
|
|
TDir es una estructura la cual debes declararla asi, antes de que se usada
| Código: | //--------------------------
// Estructura
typedef struct
{
LPSHELLFOLDER ParentShellFolder;
LPITEMIDLIST pidl;
LPITEMIDLIST ppidl;
bool Sfogliato;
}TDir; |
Saludos. _________________
 |
|
| Volver arriba |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Jue 14 Ene, 2010 4:55 pm Asunto: |
|
|
EDITADO CODIGO CORREGIDO
Hola Cesar ya el codigo me compila, gracias a tu colaboracion, solo que no veo aun ningun resultado y eso me tiene deconcertado, espero me puedas ayudar a hecharlo a andar. Aca dejo mi codigo para que lo veas y por si a alguien del for le interesa no tener que chocar con mis errores y demas
.cpp
| Código: | // ---------------------------------------------------------------------------
#include <vcl>
#pragma hdrstop
#include <shlobj>
#include <shellapi>
#include <stdio>
#include <FileCtrl>
#include <ComCtrls>
#include "Unit1.h"
// ---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TImageList *List;
LPMALLOC mem;
LPMALLOC pShellMalloc; // para SHGetMalloc
// Estructura para TDir
typedef struct {
LPSHELLFOLDER ParentShellFolder;
LPITEMIDLIST pidl;
LPITEMIDLIST ppidl;
bool Sfogliato;
}TDir;
// ---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {
LPSHELLFOLDER desk;
LPITEMIDLIST net;
SHFILEINFO fi;
STRRET nome;
char scom[255];
TTreeNode *n;
TDir * d;
List = new TImageList(this);
List->ShareImages = true;
List->Handle = SHGetFileInfo("", 0, &fi, sizeof(SHFILEINFO),
SHGFI_SMALLICON | SHGFI_SYSICONINDEX);
TreeView->Images = List;
SHGetMalloc(&mem);
SHGetDesktopFolder(&desk);
SHGetSpecialFolderLocation(NULL, CSIDL_NETWORK, &net);
desk->GetDisplayNameOf(net, SHGDN_NORMAL, &nome);
GetNome(&nome, net, scom);
SHGetFileInfo((LPCSTR)net,0,&fi,sizeof(SHFILEINFO),
SHGFI_PIDL|SHGFI_SYSICONINDEX|SHGFI_DISPLAYNAME |SHGFI_ATTRIBUTES|SHGFI_TYPENAME );
n = TreeView->Items->Add(NULL,scom);
n->ImageIndex = fi.iIcon;
n->StateIndex = fi.iIcon;
n->SelectedIndex = fi.iIcon;
d = new TDir;
d->ParentShellFolder = desk;
d->pidl = net;
d->ppidl = net;
d->Sfogliato = true;
n->Data = d;
BrowseFolder(desk, net, net, n);
}
// ---------------------------------------------------------------------------
void __fastcall TForm1::GetNome(LPSTRRET nome, LPITEMIDLIST id, char * display)
{
LPSTR lpsz;
int cch;
switch(nome->uType) {
case STRRET_WSTR:
cch = WideCharToMultiByte(CP_ACP, 0, nome->pOleStr, -1, NULL, 0, NULL,
NULL);
lpsz = (LPSTR)mem->Alloc(cch);
if (lpsz != NULL) {
WideCharToMultiByte(CP_ACP, 0, nome->pOleStr, -1, lpsz, cch, NULL,
NULL);
sprintf(display, "%s", lpsz);
mem->Free(lpsz);
}
break;
case STRRET_OFFSET:
sprintf(display, "%s", ((char*)id) + nome->uOffset);
break;
case STRRET_CSTR:
sprintf(display, "%s", nome->cStr);
break;
}
}
// ----------------
LPITEMIDLIST __fastcall TForm1::MergeIDList(LPITEMIDLIST a, LPITEMIDLIST b) {
int cb1, cb2;
if (a)
cb1 = GetPIDLSize(a);
if (cb1)
cb1 = cb1 - 2;
if (b)
cb2 = GetPIDLSize(b);
if (cb2)
cb2 = cb2 - 2;
int total_size = cb1 + cb2 + 2;
LPITEMIDLIST lpidlNew;
if (!a || !b)
return NULL;
lpidlNew = (LPITEMIDLIST)mem->Alloc(total_size);
if (lpidlNew) {
ZeroMemory(lpidlNew, total_size);
CopyMemory(lpidlNew, a, cb1);
CopyMemory(((LPBYTE)lpidlNew) + cb1, b, cb2);
FillMemory(((LPBYTE)lpidlNew) + cb1 + cb2, 2, 0);
return lpidlNew;
}
return NULL;
}
// ------------------
void __fastcall TForm1::BrowseFolder(LPSHELLFOLDER padre, LPITEMIDLIST pidl,
LPITEMIDLIST ppidl, TTreeNode *nodo) {
TTreeNode *c;
if (nodo != NULL) {
while (nodo->Count > 0)
nodo->Item[0]->Delete();
}
if (padre != NULL) {
LPSHELLFOLDER ShellFolder = NULL;
padre->BindToObject(pidl, NULL, IID_IShellFolder, (void**)
& ShellFolder);
if (ShellFolder != NULL) {
LPENUMIDLIST enumlist = NULL;
ShellFolder->EnumObjects(NULL,
SHCONTF_FOLDERS | SHCONTF_INCLUDEHIDDEN, &enumlist);
if (enumlist != NULL) {
int i;
LPSTRRET nome;
LPITEMIDLIST idfiglio;
LPITEMIDLIST pp;
char scom[255];
SHFILEINFO fi;
TDir *d;
int r;
int conta1, conta2;
enumlist->Reset();
while (enumlist->Next(1, &idfiglio, NULL) != S_FALSE) {
LPITEMIDLIST lpNew = MergeIDList(ppidl, idfiglio);
if (!idfiglio)
break;
if (lpNew == NULL)
continue;
nome = (LPSTRRET)mem->Alloc(sizeof(STRRET));
memset(&fi, 0, sizeof(SHFILEINFO));
r = SHGetFileInfo((LPCSTR)lpNew, 0, &fi, sizeof(fi),
SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_DISPLAYNAME |
SHGFI_ATTRIBUTES | SHGFI_TYPENAME | SHGFI_SMALLICON);
ZeroMemory(nome, sizeof(STRRET));
nome->uType = STRRET_CSTR;
ShellFolder->GetDisplayNameOf(idfiglio, SHGDN_NORMAL, nome);
GetNome(nome, idfiglio, scom);
c = TreeView->Items->AddChild(nodo, scom);
c->ImageIndex = fi.iIcon;
c->StateIndex = fi.iIcon;
c->SelectedIndex = fi.iIcon;
// Cre elelemnto fittizio
if (fi.dwAttributes & SFGAO_HASSUBFOLDER)
TreeView->Items->AddChild(c, "PP");
d = new TDir;
d->ParentShellFolder = ShellFolder;
d->pidl = idfiglio;
d->ppidl = lpNew;
d->Sfogliato = false;
c->Data = d;
}
enumlist->Release();
}
}
}
}
// -----------
int __fastcall TForm1::GetPIDLSize(LPITEMIDLIST lpidl) {
unsigned short cb = 0;
while (lpidl) {
cb = (unsigned short)(cb + lpidl->mkid.cb);
lpidl = GetNextItem(lpidl);
}
return(unsigned short)(cb + 2);
}
// ------------
LPITEMIDLIST __fastcall TForm1::GetNextItem(LPITEMIDLIST pidl) {
unsigned short nLen = pidl->mkid.cb;
if (nLen == 0)
return NULL;
return(LPITEMIDLIST)((LPBYTE)pidl + nLen);
}
void __fastcall TForm1::TreeViewExpanding(TObject *Sender, TTreeNode *Node, bool &AllowExpansion)
{
TDir *d;
if (Node != NULL) {
d = (TDir*)Node->Data;
if (!d->Sfogliato) {
BrowseFolder(d->ParentShellFolder, d->pidl, d->ppidl, Node);
}
d->Sfogliato = true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TreeViewClick(TObject *Sender)
{
TDir *d;
if (TreeView->Selected) {
char scom[MAX_PATH];
d = (TDir*)(TreeView->Selected->Data);
SHGetPathFromIDList(d->ppidl, scom);
Label1->Caption = scom;
}
}
//--------------------------------------------------------------------------- |
.h
| Código: | //---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes>
#include <Controls>
#include <StdCtrls>
#include <Forms>
#include <ComCtrls>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TTreeView *TreeView;
TLabel *Label1;
void __fastcall TreeViewExpanding(TObject *Sender, TTreeNode *Node, bool &AllowExpansion);
void __fastcall TreeViewClick(TObject *Sender);
private: // User declarations
void __fastcall GetNome(LPSTRRET nome, LPITEMIDLIST id, char *display);
void __fastcall BrowseFolder(LPSHELLFOLDER padre, LPITEMIDLIST pidl,
LPITEMIDLIST ppidl, TTreeNode *nodo);
LPITEMIDLIST __fastcall MergeIDList(LPITEMIDLIST a, LPITEMIDLIST b);
int __fastcall GetPIDLSize(LPITEMIDLIST lpidl);
LPITEMIDLIST __fastcall GetNextItem(LPITEMIDLIST pidl);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
|
tuve la necesidad de añadir la condicional : | Código: | NO_WIN32_LEAN_AND_MEAN | para poder utilizar #include <shlobj>
Espero la ayuda si es posible
muchas gracias y saludos. _________________ Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Ultima edición por ifrit el Vie 15 Ene, 2010 4:29 pm, editado 1 vez |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 14 Ene, 2010 7:00 pm Asunto: |
|
|
Cambia la información de esta linea
| Código: | SHGetSpecialFolderLocation(NULL, CSIDL_NETWORK, &net); |
por esta linea
| Código: | // indicamos el root principal;
SHGetSpecialFolderLocation(NULL,CSIDL_DRIVES, &net); |
La primera linea te sirve para mostrar las unidades de Red (computadoras) y la segunda linea te sirve para mostrar las unidades de tu computadora.
Saludos. _________________
 |
|
| Volver arriba |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Jue 14 Ene, 2010 7:19 pm Asunto: |
|
|
Hola Cesar realmente agadezco tu ayuda e interes pero mi treeview aun sigue vacio, no muestra nada, el codigo que tengo actualmente es el que postee mas esta ultima modificacion que me sugieres que realice...pero aun sin resultados , espero me puedas ayudar.
gracias y saludos _________________ Todos somos ignorantes, lo que no todos ignoramos lo mismo... |
|
| Volver arriba |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Vie 15 Ene, 2010 3:46 pm Asunto: |
|
|
Hola Ifrit,
Yo me he basado en tu codigo, luego he ojeado el enlace de Cesar y he visto que en el contructor del form te has olvidado esto:
| Código: | SHGetFileInfo((LPCSTR)net,0,&fi,sizeof(SHFILEINFO),
SHGFI_PIDL|SHGFI_SYSICONINDEX|SHGFI_DISPLAYNAME |SHGFI_ATTRIBUTES|SHGFI_TYPENAME );
n = TreeView->Items->Add(NULL,scom);
n->ImageIndex = fi.iIcon;
n->StateIndex = fi.iIcon;
n->SelectedIndex = fi.iIcon;
d = new TDir;
d->ParentShellFolder = desk;
d->pidl = net;
d->ppidl = net;
d->Sfogliato = true;
n->Data = d;
BrowseFolder(desk, net, net, n);
|
A mi en un ejemplo de prueba me funciona perfectamente. Si no lo consiges, avisa y pongo aqui el cpp completo de mi form.
Saludos,
Juanma |
|
| Volver arriba |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Vie 15 Ene, 2010 4:23 pm Asunto: |
|
|
Tremenda pena juanma, si no lo veo no lo creo, me comi el codigo sin darme cuenta , tienes toda la razon.... Con el problemilla de que algunas librerias no ivan y mi interes por hacerlo (rápido) se me fue ese trozo de codigo.
Muchas gracias y disculpa Cesar por no mirar detenidamente el codigo antes de postear y preguntar, de veras mis disculpas amigos. _________________ Todos somos ignorantes, lo que no todos ignoramos lo mismo... |
|
| Volver arriba |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Vie 15 Ene, 2010 4:36 pm Asunto: |
|
|
Todo perfecto, solo me faltarian dos cosas
1-Creo que es muy importante que se pudieran explorar tambien los ficheros de cada directorio.
2-Checboxes en cada Item o nodo con el objetivo de hacer una multiple seleccion de este tipo
Yo me estaba planteando la idea de un Virtual TreeView , porque en la pagina principal viene una imagen que tiene las caracteristicas pero a pesar de descargarlo e instalarlo aun no encuentro modo de hacer lo que planteo, tambien me descargue un ejemplo que trae implementado lo del os checkboxes y cuando selecciono un padre tambien se seleccionan los hijos y demas (muy bueno el ejemplo), pero esta falta del codigo fuente para guiarme. Si pueden aportar algo a mi idea estaria mas agradecido.
Mucha gracias amigos saludos. _________________ Todos somos ignorantes, lo que no todos ignoramos lo mismo... |
|
| Volver arriba |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Lun 08 Feb, 2010 9:20 pm Asunto: |
|
|
Hola amigos buscando en el foro me he encontre con un tema de edwinhp2 al cual responde cecito el tema tiene como titulo: Treeview con Checkbox. Para _Leo el caso es que pude poner checkbox en los items del treeview con las configuraciones que ya tenia este de poder ver los directorios de mi pc, cuando lo despliego es decir doy clic sobre c:\ y cuando me muestra los subdirectorios no me muestra los checkbox y sinembrago estan alli.Alguien me podria ayudar a poder mostrar los checkbox , es decir como hacer un refresh al treeview?
muchas gracias _________________ Todos somos ignorantes, lo que no todos ignoramos lo mismo... |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mar 09 Feb, 2010 12:06 am Asunto: |
|
|
En alguna ocasión me he visto obligado a forzar que una ventana se repinte en el momento que yo quiera. Para ello escribí este código que espero tre refresque tu TreeWiew:
| Código: | void ReDrawWindow(HWND hWnd)
{
TRect cr;
::GetClientRect(hWnd, &cr);
InvalidateRect(hWnd, &cr, true);
SendMessage(hWnd, WM_NCPAINT, 0, 0);
RedrawWindow(hWnd, &cr, 0, RDW_FRAME|RDW_ERASE|RDW_INVALIDATE|RDW_UPDATENOW|RDW_ALLCHILDREN);
} |
Saludos. |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|