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 20-04-2018
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
Items y AddObject

Estoy usando este código:
Código:
for (; Query->Eof; Query->Next())
     ComboBox1->Items->AddObject(Query->Fields->FieldByNumber(1)->AsString, (TObject *)Query->Fields->FieldByNumber(2)->AsInteger);
para asociar valores a los elementos de un ComboBox. Me surge una duda: ¿Cómo se puede saber si un ComboBox tiene asociado un objeto?
Responder Con Cita
  #2  
Antiguo 20-04-2018
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
En Delphi lo puedes saber mediante Assigned(Puntero_a_Objeto);
Lo que hace es compararlo con nil.

Supongo que habrá algo parecido en C.

Código Delphi [-]
Lista.AddObject('Descripcion', Pointer(Objeto));
...
// Verifico si hay asignado un objeto en el item seleccionado
if (Assigned(Lista.Items.Objects[Lista.ItemIndex])) then
Responder Con Cita
  #3  
Antiguo 20-04-2018
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
Gracias por la respuesta. He estado mirando en la ayuda de Builder y no he visto, o no he sido capaz de localizar, para un ComboBox ningún método Assigned asociado a alguna de su propiedades. En el formulario "relleno" así los TComboBox y en las tablas de la base de datos guardo el valor del objeto, pero a la hora de recuperar el registro de la tabla no se me ocurre como localizar ese objeto.

Vale, podría hacer un bucle for...next hasta encontrarlo; tampoco sería demasiado problema porque tampoco son tantos los registros que van a tener los ComboBox, pero si hubiera un método parecido al IndexOf de un TStringList sería más fácil.
Responder Con Cita
  #4  
Antiguo 20-04-2018
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Hola

Cita:
Empezado por Angel.Matilla Ver Mensaje
.... no he visto, o no he sido capaz de localizar, para un ComboBox
ningún método Assigned asociado a alguna de su propiedades...
Assigned es una funcion de delphi no esta asociado a ningun control. Pero en tal caso igual te sirve hacer una comparacion con NIL.

Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #5  
Antiguo 20-04-2018
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
Gracias por la aclaración. Entiendo el concepto con el que trabaja esta función per como Assigned no hay nada en Builder; hay AssignedValues (TColumn), AssignedField y AssignedFiedValue (TParam) y AssignedHelPSelector (IHelpSystem).
Responder Con Cita
  #6  
Antiguo 20-04-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por Angel.Matilla Ver Mensaje
Estoy usando este código:
Código:
for (; Query->Eof; Query->Next())
     ComboBox1->Items->AddObject(Query->Fields->FieldByNumber(1)->AsString, (TObject *)Query->Fields->FieldByNumber(2)->AsInteger);
para asociar valores a los elementos de un ComboBox. Me surge una duda: ¿Cómo se puede saber si un ComboBox tiene asociado un objeto?
La propiedad Objects deriva de TCustomCombo (de tipo TStrings) y no posee un contador por lo que, para saber si el combo tiene asociado algún objeto, necesitas comprobar cada uno de los Items como te sugiere duilioisola.

Dos opciones similares:
Código PHP:
// (podrías retornar un int si deseas saber cuantos objetos hay)
bool ComboHaveObjects(TComboBoxCB)
{
  for (
int i 0CB->Items->Counti++)
    if (
CB->Items->Objects[i])
      return 
true;
  return 
false;
}

// Ejemplo de uso:
 
if (ComboHaveObjects(ComboBox1))
    
ShowMessage("ComboBox1 tiene objetos asociados");
  else
    
ShowMessage("ComboBox1 no tiene objetos asociado"); 
Código PHP:
class TComboBoxHack:public TComboBox
{
public:
  
bool haveObjects(void);
};

bool TComboBoxHack::haveObjects(void)
{
  for (
int i 0Items->Counti++)
    if ( 
Items->Objects[i] )
      return 
true;

  return 
false;
}

// Ejemplo de uso:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 if (!(
static_cast<TComboBoxHack*>(ComboBox1))->haveObjects())
   
ShowMessage("ComboBox1 no tiene un objeto asociado");
 else
   
ShowMessage("ComboBox1 tiene objetos asociados");

Ahora, si cada Item si o si tendrá un objeto asociado, y deseas saber si no tiene ninguno mas simple es:
Código PHP:
  if (ComboBox1->Items->Count == 
    
ShowMessage("ComboBox1 no tiene objetos asociados"); // obviamente...

  // si el combo se vacía (Clear) antes de su carga, también es válido:
  
if (Query->IsEmpty())
    
ShowMessage("ComboBox1 no tiene objetos asociados"); 
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 20-04-2018 a las 19:28:13.
Responder Con Cita
  #7  
Antiguo 21-04-2018
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
Gracias por las respuestas. Intuía que era algo así, pero no encontraba documentación.
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
TComboBox.Items.AddObject en Android dison Desarrollo en Delphi para Android 2 13-10-2014 07:38:44
Items de un Listview Miguel89 Varios 3 09-03-2012 21:35:43
No se ven los items de mi Combobox pablopessoa Varios 2 08-06-2010 20:53:30
Items en popupmenu amerika111 Varios 2 04-01-2010 20:42:46
Items Listview Trigger OOP 2 11-10-2004 21:05:02


La franja horaria es GMT +2. Ahora son las 00:53: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