Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-03-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Usar TListView fuera de un form

Hola amigos, tengo un problema, quiero usar un TListview que trabaje en un .h diferente del Unit.cpp de la aplicacion, o sea, que lo guardo por ejemplo en lista.h y lista.cpp y pueda usarlo con cualquier proyecto sin tener que modificarlo.
El problema es que tengo esto:

Código:
#include <ComCtrls.hpp>

BOOL SearchBPOnList(DWORD address, unsigned char original)
{
    TListView *listaBPs;
    char original = 'c';
    int valor = 1000;

    //Creo el listview
    listaBPs = new TListView(Application->MainForm);

    //le indico cual es su parent
    listaBPs->Parent = Application->MainForm;

    //Añadimos una columna por cada subitem
    listaBPs->Columns->Add();
    listaBPs->Columns->Add();

    //Añado un item y le añado dos subitems
    listaBPs->Items->Add();
    listaBPs->Items->Item[listaBPs->Items->Count]->SubItems->Add(valor);
    listaBPs->Items->Item[listaBPs->Items->Count]->SubItems->Add(original);

    //Añado un item y le añado dos subitems
    listaBPs->Items->Add();
    listaBPs->Items->Item[listaBPs->Items->Count]->SubItems->Add(valor + 1);
    listaBPs->Items->Item[listaBPs->Items->Count]->SubItems->Add(original);

    //borro el listview
    delete listaBPs;
}
y si intento añadir un item lo hace pero si intento añadir una columna no da error pero si intento añadir un item me tira el error "Control '' has no parent window"
¿como tendria que hacerlo para que trabaje bien?
Responder Con Cita
  #2  
Antiguo 12-03-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Código:
    TListView *listaBPs;
    original = 'c';
    int valor = 1000;

    //Creo el listview
    listaBPs = new TListView(Application->MainForm);
    listaBPs->ViewStyle = vsReport; // Para visualizar con columnas
    //le indico cual es su parent
    listaBPs->Parent = Application->MainForm;

    //Añadimos una columna por cada subitem SON TRES COLUMNAS
    listaBPs->Columns->Add();  // Para Caption
    listaBPs->Columns->Add();  // Para Subitem1
    listaBPs->Columns->Add();  // Para Subitem2

    //Añado un item y le añado dos subitems
    TListItem  *ListItem = listaBPs->Items->Add();
    // El array listaBPs->Items->Item comienza en CERO !!!!
    listaBPs->Items->Item[listaBPs->Items->Count-1]->SubItems->Add(valor);   
    listaBPs->Items->Item[listaBPs->Items->Count-1]->SubItems->Add(original);

    //Añado un item y le añado dos subitems
    ListItem = listaBPs->Items->Add();
    listaBPs->Items->Item[listaBPs->Items->Count-1]->SubItems->Add(valor+1);
    listaBPs->Items->Item[listaBPs->Items->Count-1]->SubItems->Add(original);

    listaBPs->Update();   // Para visualizar los cambios
    Sleep(1000);            // Para ver que ha pasado
    //borro el listview
    delete listaBPs;

Saludos.
Responder Con Cita
  #3  
Antiguo 12-03-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Me sigue dando el mismo problema ya que el problema me lo daba en esta linea:

Código:
TListItem  *ListItem = listaBPs->Items->Add();
El problema tiene que venir por otro lado

Gracias por el interes.
Responder Con Cita
  #4  
Antiguo 12-03-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Pues algo haces en tu código pues lo que te he expuesto funciona perfectamente (BCB5 y BCB6), siempre que exista un formulario principal (Application->MainForm)

Revisa los errores que he puesto comentados.

Te expongo lo que usé para probar:
Código:
#include <ComCtrls.hpp>
BOOL SearchBPOnList(DWORD address, unsigned char original)
{
    TListView *listaBPs;
    original = 'c';
    int valor = 1000;

    //Creo el listview
    listaBPs = new TListView(Application->MainForm);
    listaBPs->ViewStyle = vsReport; // Para visualizar con columnas
    //le indico cual es su parent
    listaBPs->Parent = Application->MainForm;

    //Añadimos una columna por cada subitem SON TRES COLUMNAS
    listaBPs->Columns->Add();  // Para Caption
    listaBPs->Columns->Add();  // Para Subitem1
    listaBPs->Columns->Add();  // Para Subitem2

    //Añado un item y le añado dos subitems
    listaBPs->Items->Add();
    // El array listaBPs->Items->Item comienza en CERO !!!!
    listaBPs->Items->Item[listaBPs->Items->Count-1]->SubItems->Add(valor);   
    listaBPs->Items->Item[listaBPs->Items->Count-1]->SubItems->Add(original);

    //Añado un item y le añado dos subitems
    listaBPs->Items->Add();
    listaBPs->Items->Item[listaBPs->Items->Count-1]->SubItems->Add(valor+1);
    listaBPs->Items->Item[listaBPs->Items->Count-1]->SubItems->Add(original);

    listaBPs->Update();   // Para visualizar los cambios
    Sleep(1000);            // Para ver que ha pasado
    //borro el listview
    delete listaBPs;
}
Saludos.
Responder Con Cita
  #5  
Antiguo 12-03-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Pues es raro ya que es un proyecto normal de c++builder 6 con su form llamado Form1 el cual tiene que hacer uso de esa funcion que estará en un archivo llamado busqueda.cpp y que debe ser portable hacia otros proyectos asi que no puedo poner como nombre Form1 ni nada por el estilo al crear el listview para no tener que estar pendiente de ese cambio al cambiar de proyecto.
Ya me dices lo de que no hay un MainForm y la verdad es que yo creia que el MainForm seria Form1 en este caso pero me haces dudar.
Igual el fallo viene por ahi pero no se. La idea es que coja al formulario principal del proyecto.
Ya he corregido los errores que me indicas pero tengo dudas.
1-No quiero visualizarlo por pantalla ¿tengo que hacer lo del estilo y el update entonces?
2-Solo quiero guardar dos datos por fila ¿se necesitan 3 columnas o podria usar el primer valor como caption y el segundo como subitem y solo crear dos columnas?

Gracias por la ayuda.
Responder Con Cita
  #6  
Antiguo 12-03-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Añadirte que si creas un componente con dueño, este se encargará de su destrucción, por lo que no debes destruirlo.
Si quieres destruirlo tú mismo, entonces créalo así:
Código:
listaBPs = new TListView((TComponent*)0);
Piensa que si no asignas un Parent (ventana donde se va a visualizar) el código marcará una excepción. También fallará si lo creas antes de que el Handle de su parent exista, por ejemplo en el evento OnCreate del formulario principal.

No entiendo porqué no quieres que se vea, si es un simple "almacén", es mejor que guardes los datos de otra forma, como en un TStringList, por ejemplo.


Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
usar varios form a la vez exequielmatias1 OOP 1 09-09-2013 05:11:36
Mensaje fuera de form rabata2001 Varios 1 22-11-2010 14:54:26
Saber si el cursor esta fuera del form LuisAlf:: Varios 10 22-04-2010 19:42:49
Hacer una pausa fuera del evento OnTimer y sin usar Sleep DarkByte Varios 9 28-06-2007 05:08:00
ToolBar fuera del form. afxe Gráficos 2 15-06-2006 19:48:59


La franja horaria es GMT +2. Ahora son las 03:26:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi