Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Pasar Componentes como parámetros (https://www.clubdelphi.com/foros/showthread.php?t=53378)

Antonioveneroso 19-02-2008 20:57:14

Pasar Componentes como parámetros
 
Disculpen de nuevo las molestias.
Estoy haciendo una aplicación en donde, en algunas ventanas, debo repetir información.
Por ejemplo, tengo la ventana de productos, donde se listan (en un Combobox)
todos los productos. En la ventana de "Campos de Licencia" también se llena un Combobox
con los productos. Mi pregunta es: ¿se puede enviar como parámetro un ComboBox?
¿Y cómo se haría? Así, sólo tendría que llamar a la función "x" cada vez que quiero llenar
un Combobox, y pasar como parámetro el Combobox que quiero sea llenado.
Desde ya, muchas gracias por cualquier ayuda que me puedan brindar.
Saludos!

axesys 20-02-2008 00:08:01

Puede ser algo así
Código Delphi [-]
////////////////////////////////////////////////////////////////////////////////
//
// Función: Llenarcombo
// Descripción: Llena un combo con una sentencia SQL
// Parámetros: cmbCombo - Combo que se desea llenar
//             sSentencia - Sentencia SQL para llenar el combo
// Regresa: boolean - Verdadero si se pudo llenar el combo, falso si hubo error
// Autor: Bismarck Sierra.
// Fecha: 2005-11-22
// Comentarios: La sentencia SQL debe regresar 2 campos, el primero lo que se
//              quiere que aparezca en el combo, el segundo la clave para
//              identificar cada valor en el combo
//
////////////////////////////////////////////////////////////////////////////////
function TUtilerias.LlenarCombo(var cmbCombo: TComboBox; sSentencia: String; bSeleccionar: boolean = true; sPrimeraLinea: String = ''): boolean;
var
  qryConsulta: TSQL;
begin
  Result:= true;
  qryConsulta:= Sistema.BaseDato.CrearConsulta(sSentencia);
  cmbCombo.Items.BeginUpdate;
  cmbCombo.Clear;
  if(sPrimeraLinea <> EmptyStr) then
    cmbCombo.Items.Add(sPrimeraLinea);

  with qryConsulta do
    if(Activo) then
    begin
      while(not EsFinArchivo) do
      begin
        cmbCombo.Items.AddObject(qryConsulta.CampoCadena(0), TObject(qryConsulta.CampoEntero(1)));
        Siguiente;
      end;
      cmbCombo.Items.EndUpdate;
      if(bSeleccionar) then
        cmbCombo.ItemIndex:= 0
      else
        cmbCombo.ItemIndex:= -1;
    end
    else
      Result:= false;
end;

escafandra 20-02-2008 11:13:45

Si. Puedes pasar como parámeto un ComboBox en una función C++.


En C++ sería así:
Código:

// Implementación de la función que recibe un TComboBox
Funcion(TComboBox* Combo){
  // Aqui utilizas tu Combo con lo que quieras hacer
 .
 .
 .
}

//Llamada
// tienes un ComboBox que quieres pasar: ComboMio
Funcion(ComboMio);

Y.. ya está.

Saludos.

Antonioveneroso 20-02-2008 19:32:53

Escafandra, me funcionó perfectamente tu ejemplo, muchísimas gracias.
No me salía porque yo utilizaba TComponent como parámetro.
axesys, tu código se ve interesante. No lo entiendo muy bien porque soy nuevo
en la programación de C++. Lo guardo para revisarlo luego, tal vez más adelante
me funcione.
Gracias a todos por su ayuda.

Edito:
axesys, ¿Es una función para llenar un combobox con una sentencia cualquiera?

escafandra 20-02-2008 19:38:11

Claro, si utilizas TComponent, estas pasando un puntero a la clase base.
Te puede funcionar si luego haces un casting a TComboBox. Pasar la clase base te permite pasar cualquier componente, pero luego tienes que identificarlo con el casting correcto. Se puede hacer. Pero si no vas a pasar nada mas que un TComboBox es mejor pasar ese tipo como parámetro.


Saludos.

ucanneo 26-02-2008 19:48:58

Cita:

Empezado por Antonioveneroso (Mensaje 267338)
axesys, ¿Es una función para llenar un combobox con una sentencia cualquiera?

Disculpas por contestar

Pues tecnicamente si
Código:

void llenarComboBox (TComboBox* Combo)
{
    Combo->Items->Add("itemCualquiera");
    /*
      Ahora que tambien puedes cargarlo con algo que tengas
      guardado en algun sitio, como opciones predeterminadas

      Combo->Items->LoadFromFile(
          ExtractFilePath(Application->Exename) + "carpeta\\lista.txt"                     
              );
     
 
  */
}



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

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