Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   estructura que da la lata (https://www.clubdelphi.com/foros/showthread.php?t=91151)

Snaked 20-11-2016 16:39:18

estructura que da la lata
 
necesito de nuevo ayuda..... Ecfisa si estas por aqui Maestro :D

mirad...... tengo la siguiente estructura donde exceptuando los 2 primeros campos que son AnsiString...el resto son enteros..... lo tengo en un array de 30 posiciones

Código PHP:

struct mapp {
              
AnsiString Nombre_Sector;
              
AnsiString Created_By;
              
int objetos;
              
int tipo_objeto;
              
int coordX_objeto;
              
int coordY_objeto;
              
int rutas_inicio_X;
              
int rutas_fin_X;
              
int rutas_inicio_Y;
              
int rutas_fin_Y;
mapita[30]; 


entonces....guardo informacion en el array sin problemas.....el problema es que utilizo un combo box donde voy almacenando los tipos de objeto (si es Planeta, Station, Ruta o Asteroides) el caso, es que cuando selecciono un elemento de ese combo....al principio coinciden con la ordenacion de los elementos del array de la estructura pero si borro un elemento del combo ya no coinciden y en fin....necesito una forma de "compactar" la estructura de forma que no queden huecos entre los registros para que cuando seleccione un elemento del combo, este sea un "casillero" de la estructura que apunte al objeto en cuestion......alguien me entiende?

esto es el codigo de DELETE object

Código PHP:

void __fastcall TForm1::sButton4Click(TObject *Sender)
{
 
// Inicializamos todo a cero.
 
int contador 0;


    
// Borramos el objeto de la estructura y el combobox
  
contador combo_object;

    
mapita[contador].Nombre_Sector "";
    
mapita[contador].Created_By "";
    
mapita[contador].coordX_objeto 0;
    
mapita[contador].coordY_objeto 0;
    
mapita[contador].rutas_fin_X 0;
    
mapita[contador].rutas_fin_Y 0;
    
mapita[contador].rutas_inicio_X 0;
    
mapita[contador].rutas_inicio_Y 0;
    
mapita[contador].objetos 0;
    
mapita[contador].tipo_objeto 0;

    
ComboBox_Object->Items->Clear();
    
ComboBox_Object->Text "";

  for(
int contador4 0contador4 30contador4++)
  {
    if(
mapita[contador4].objetos >= 1)
     {

        if(
mapita[contador4].objetos <= 500ComboBox_Object->Items->Add("Planet");
        if(
mapita[contador4].objetos == 600ComboBox_Object->Items->Add("Route");
        if(
mapita[contador4].objetos == 700 || mapita[contador4].objetos == 701 ComboBox_Object->Items->Add("Belt-Asteroids");
        if(
mapita[contador4].objetos  1000)
       {
        
ComboBox_Object->Items->Add("Station");
       }

     }
  }






ecfisa 20-11-2016 22:26:23

Hola Snaked.

Te soy sincero, no sé si termino de entender el planteo de tu problema. Pero por lo que creo haber interpretado, podrías prescindir del arreglo y almacenar tu estructura en el combo eliminándo el ítem y datos directamente desde él.

Ejemplo:
Código PHP:

//...
#include <ctime>

const OBJECTS_TYPE 4// Planet, Station, Route, Asteroids

struct stMapp {
  
String Nombre_Sector;
  
int objetos;
  
int tipo_objeto;
  
//...
} *mapp;

// Cargar struct de "demo" en el ComboBox
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  
String objType[4] = { "Planet""Station""Route""Asteroids" };

  
srandtime(NULL) );
  
ComboBox1->Items->Clear();

  for ( 
int i 030i++ ) {
    
mapp = new stMapp;
    
mapp->Nombre_Sector = (String)"Sector " rand()%30;
    
mapp->objetos rand() % 15;
    
mapp->tipo_objeto rand() % OBJECTS_TYPE ;
    
String s1 mapp->Nombre_Sector String": " );
    
ComboBox1->AddItem(s1 objType[rand()%4], (TObject*)mapp );
  }
  
ComboBox1->Sorted true;
  
ComboBox1->ItemIndex 0;
}

// Borrar item seleccionado
void __fastcall TForm1::btnDeleteClick(TObject *Sender)
{
  if (
ComboBox1->ItemIndex != -)
    
ComboBox1->Items->Delete(ComboBox1->ItemIndex);
}

// Mostrar datos struct de item seleccionado
void __fastcall TForm1::btnShowClick(TObject *Sender)
{
  
stMappmp = (stMapp*) ComboBox1->Items->Objects[ComboBox1->ItemIndex];
  
Memo1->Lines->Add(mp->Nombre_Sector);
  
Memo1->Lines->Add(mp->objetos);
  
Memo1->Lines->Add(mp->tipo_objeto);
}

//...

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  
delete mapp;


Saludos :)

Snaked 20-11-2016 23:09:32

no te preocupes ecfisa.....ya lo he solucionado, un error de estos que son de implementacion donde utilizaba un mismo contador para pasar datos de una estructura a otra, donde se copiaban los datos cuando habia objetos.....la cuestion es que al utilizar un "cont3" en el bucle de la "asignacion" de campos, clonaba las 2 estructuras con todos los registros incluidos los que estaban a 0..... y lo que habia que hacer era meter una variable de conteo y comprobar si mapita[...].objetos tenia algun valor para dentro del bloque, incrementar el valor de dicho contador para al copiar los campos, solo copiase los que tenian alguna informacion (no estaban a 0)

te pongo el código al que me refiero (el fallo estaba donde pongo cont_item que ponia cont3)

Código PHP:


int cont_item 
= -1;

for(
int cont30cont3 <= 29cont3++)
  {
    if(
mapita[cont3].objetos 0)
     {
     
cont_item++;
    
mapita2[cont_item].Nombre_Sector mapita[cont3].Nombre_Sector;
    
mapita2[cont_item].Created_By mapita[cont3].Created_By;
    
mapita2[cont_item].coordX_objeto mapita[cont3].coordX_objeto;
    
mapita2[cont_item].coordY_objeto mapita[cont3].coordY_objeto;
    
mapita2[cont_item].rutas_fin_X mapita[cont3].rutas_fin_X;
    
mapita2[cont_item].rutas_fin_Y mapita[cont3].rutas_fin_Y;
    
mapita2[cont_item].rutas_inicio_X mapita[cont3].rutas_inicio_X;
    
mapita2[cont_item].rutas_inicio_Y mapita[cont3].rutas_inicio_Y;
    
mapita2[cont_item].objetos mapita[cont3].objetos;
    
mapita2[cont_item].tipo_objeto mapita[cont3].tipo_objeto;

       }
  } 


Casimiro Noteví 21-11-2016 00:43:43

Para futuros mensjes, no olvides por favor, poner títulos descriptivos a tus preguntas, gracias :)


La franja horaria es GMT +2. Ahora son las 01:39:17.

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