PDA

Ver la Versión Completa : Pasar Componentes como parámetros


Antonioveneroso
19-02-2008, 20:57:14
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í
////////////////////////////////////////////////////////////////////////////////
//
// 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í:

// 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
axesys, ¿Es una función para llenar un combobox con una sentencia cualquiera?

Disculpas por contestar

Pues tecnicamente si

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"
);


*/
}