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 Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-01-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Y seguimos con VirtualTreeView

Empiezo a creer que no sé nada de programar con Builder. Sigo tratando de enterarme como funciona este elemento a priori tan interesante. Me he creado un formulario dentro de un proyecto para ahorrarme tener que definir las conexiones a la BB.DD. que está en FB. De momento en ese formulario sólo está un TVirtualStringTree pero cuando trato de cargar un único campo en el mismo me da siempre el mismo error:

Da igual donde ponga el código; he probado en OnCreate, OnShow y OnActivate, pero no hay manera de cargar un simple query en ese Virtual. Ni siquiera siguiendo al pie de la letra el código que he encontrado en Virtual-TreeView/Demos/CBuilderMinimal. Ose dejo adjunto el formulario con lo que llevo hecho, a ver si alguno puede alumbrarme un poco.
Archivos Adjuntos
Tipo de Archivo: rar Unit1.rar (2,1 KB, 1 visitas)
Responder Con Cita
  #2  
Antiguo 08-01-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Ya sé lo que está pasando. ¡Seré burro! Estoy usando fomrulario MDIChild y por error lo estoy lanzando con ShowModal() en vez de con Show().
Responder Con Cita
  #3  
Antiguo 09-01-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Bueno. Otra vuelta de tuerca. Me ha pasado Casimiro Notevi un codigo en Delphi para ver si me voy enterando de como funciona este interesantre elemento. De momento sólo tengo en el formulario un TVirtualStringTree que pretendo cargar con un query desde un vista en FB. EL código que tengo puesto es este:
Código PHP:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Menu.h"
//---------------------------------------------------------------------------

#pragma package(smart_init)
#pragma link "VirtualTrees"
#pragma resource "*.dfm"
TForm1 *Form1;

AnsiString cAux;

extern void ColorForm(TForm *Formbool lAuto true);
//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponentOwner)
     : 
TForm(Owner)
{
     
ColorForm(this);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *SenderTCloseAction &Action)
{
     
Action caFree;
     
Form1 NULL;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
     
PTreeData Dato;
     
PVirtualNode Nodo;

     
VST->Clear();
     
VST->NodeDataSize sizeof(TTreeData);

     
fMenu->Query->Close();
     
fMenu->Query->SQL->Text "SELECT Municipio, Codigo FROM Dl01 WHERE CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia') ORDER BY 1";
     
fMenu->Query->Open();

     for (; !
fMenu->Query->EoffMenu->Query->Next())
     {
          
cAux fMenu->Query->FieldByName("Municipio")->AsString;

          
Nodo VST->AddChild(NULL);
          
Dato = (PTreeDataVST->GetNodeData(Nodo);
          
Dato->Caption cAux;
     }
}
//--------------------------------------------------------------------------- 
Y el fichero de cabecera:
Código PHP:
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "VirtualTrees.hpp"
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
     
TVirtualStringTree *VST;
     
void __fastcall FormClose(TObject *SenderTCloseAction &Action);
     
void __fastcall FormCreate(TObject *Sender);
private:    
// User declarations
public:        // User declarations
     
__fastcall TForm1(TComponentOwner);
};

typedef struct tagTTreeData
{
     
AnsiString Caption;
TTreeData, *PTreeData;
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif 
El query funciona a la perfección y da este resultado:

Sin embargo tras ejecutar el código que he puesto, el resultado es este:


Como podéis ver en ningún sitio del codigo aparece el literal Node. Además no entiendo por qué rellena todas las columnas del TreeView. ¿Alguno me puede dar una pista?
Responder Con Cita
  #4  
Antiguo 11-01-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Voy más allá. He simplificado el código haciendo un bucle:
Código PHP:
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "VirtualTrees.hpp"
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
     
TVirtualStringTree *VST;
     
void __fastcall FormCreate(TObject *Sender);
private:    
// User declarations
public:        // User declarations
     
__fastcall TForm1(TComponentOwner);
};

struct TRecBase
{
     
AnsiString Literal;
};

typedef TRecBase *PTrecBase// puntero al registro, se usa siempre.
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif 

Código PHP:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "VirtualTrees"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponentOwner)
     : 
TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
     
AnsiString cLiteral;
     
PTrecBase pRecData;
     
PVirtualNode Nodo;

     
VST->BeginUpdate();
     
VST->Clear();
     
VST->NodeDataSize sizeof(TRecBase);

     for (
int nItem 0nItem 10nItem ++)
     {
          
cLiteral "Nodo " IntToStr(nItem);
          
Nodo     VST->AddChild(NULL);
          
pRecData = (PTrecBaseVST->GetNodeData(Nodo);
          
pRecData->Literal cLiteral;
     }
     
VST->EndUpdate();
}
//--------------------------------------------------------------------------- 
Pues el VirtualStringTree sigue mostrándose como en la imagen de más arriba, pero si corro el programa con el depurador compruebo que pRecData->Literal va cambiando su valor correctamente (Nodo 0, Nodo 1, etc.) pero ese valor no se muestra en el VST. ¿Qué puedo estar haciendo mal?
Responder Con Cita
  #5  
Antiguo 14-01-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Ya encontré la respuesta, gracias a Stack Overflow. Estuve haciendo pruebas con el ejemplo que hay en GitHub y adaptando el código que me psó Casimiro Notevi en Delphi y el problema estaba en como hacía la asignación del valor.

Como el ejemplo es para una versión superior de Builder, al adaptarlo no me di cuenta y "bauticé" mal un variable en el evento OnGetText y por eso no se mostraba el valor correcto.
Responder Con Cita
Respuesta



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
Seguimos con los móviles. marcoszorrilla La Taberna 0 11-11-2008 23:32:04
¡No se acaba el mes y seguimos de fiesta! Delphius La Taberna 20 01-08-2007 02:14:14
VirtualTreeview porreres Varios 8 19-09-2005 13:05:39
Y seguimos con los string de colores... Elfoscuro Varios 2 07-04-2005 15:44:21


La franja horaria es GMT +2. Ahora son las 12:29:59.


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