Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

treeview como explorador
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: treeview como explorador Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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:, DConfused gracias amigo
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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 Crying or Very sad , espero me puedas ayudar.
gracias y saludos
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Embarassed 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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.