Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-12-2012
g_ferrada g_ferrada is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 13
Poder: 0
g_ferrada Va por buen camino
Question referenciar y liberar componentes

Estimados amigos del foro,
primero intertaré explicarles brevemente lo que estoy tratando de hacer, (porque debe existir otra forma más sencilla de lograrlo):

Muchas veces necesito seleccionar un dato desde una lista en la cual el usuario requiera una ventana de búsqueda, donde no sólo aparezca el valor, sino varios datos más. Por ejemplo, buscar un cliente, pero mostrar en la ventana el rut(di), la dirección, etc. Posteriormente, decidí que me gustaría que no sólo me devolviera un dato, sino varios de los que tenga disponibles en la BD.
Entonces me cree un formulario con un dbgrid y un componente SQL. Le agrego una función en la cual le paso como parámetros las sentencias SQL, luego muestro el form y así el usuario puede seleccionar el registro. Incluso agregue un Edit con el cual filtro dinámicamente los datos modificando y reejecutando la sentencia SQL.
Inicialmente guardaba los datos seleccionados en un stringlist en el mismo formBuscar, desde donde los referenciaba cuando los necesitara. Después me asaltó el problema de que podía hacer más de una búsqueda antes de procesar los valores, pero al llamar al fromBuscar por segunda vez, perdía los valores del stringlist anteriores.
Fácilmente puedo pasar esos valores a variables de memoria, o directamente a un Edit.Text, pero buscaba algo más versátil.

Entonces decidí crearme un componente: tomé un BitButton, le agregué una propiedad Items (TString) y un evento onChangeItems. Desde este botón llamo a la ventana buscar:

Código Delphi [-]
procedure buscar(sCaption: string; sSelect: string; sWhere: string; 
  sOrder: string; Sender: TBotonBuscar);


la cual ejecuta el query y abre el form Buscar. A su vez, le paso el componente desde el cual la estoy llamando (mi nuevo BitBtnBuscar), ej

Código Delphi [-]
  frmBuscar.buscar( 'Seleccionar Producto','select cdgprdct, descripcion, tipo, stock, unidad from productos',
     '', 'order by cdgprdct', BotonBuscarProducto);


¿Por qué el BitBtnBuscar? Bueno, por que a formBuscar agregué también un BitBtnBuscar, entonces lo primero que hago es
Código Delphi [-]
 
  BotonBuscar1:= Sender;


De esta forma, logro "asociar" ambos componentes, para que cuando posteriormente modifique la propiedad Items se gatille el procedimiento onChangeItems del primer boton antes de cerrar formBuscar

Código Delphi [-]
procedure TfrmBuscar.FormClose(Sender: TObject; var Action: TCloseAction); 
begin     
  BotonBuscar1.Items:= strSelect;     
  BotonBuscar1.OnChangeItems(strSelect);     
  BotonBuscar1:= nil;     
  strSelect.Free; 
end;

Mi idea principal es que cada BitBtnBuscar del form desde donde estoy llamando a Buscar() guarde en su propio valor Items los valores correspondientes (además de ejecutar onChangeItems) cada vez, lo que funciona bien hasta el "BotonBuscar1:= nil". Mi problema es que si no coloco BotonBuscar1:= nil en TfrmBuscar.FormClose, todos los botones usados anteriormente cambiarán su valor a medida que los vaya utilizando, pero después de asignar el nil ya no puedo referenciar más la propiedad items del BitBtnBuscar desde el cual llamé al procedimiento.
La cuestión es cómo poder "referenciar" estos dos botones (el del form principal con el del formBuscar), asociarlos entre sí para que los cambios del formBuscar se hagan tambien en el otro, y poder romper esa referencia pero permitiendo que el de form principal siga "existiendo" con los valores que tenía.

Mi sapiencia es sólo de supervivencia aquí, pero me alcanza para darme cuenta que es una forma bastante chapucera, y sospecho que más de algo estoy haciendo de forma incorrecta, pero, sinceramente me ha servido hasta ahora. Agradezco la ayuda de ustedes, y aprovecho de aprender otro poquito.

Gracias de antemano.

Última edición por ecfisa fecha: 16-12-2012 a las 21:37:19. Razón: Corregir error etiquetas (WYSIWYG)
Responder Con Cita
 



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
liberar memoria componentes visuales study Varios 2 16-11-2011 17:13:30
dejar de referenciar una dll fedeloko OOP 3 07-09-2006 16:13:58
Liberar los componentes de un srollbox nenufer OOP 3 29-05-2006 08:18:48
Liberar componentes de la memoria ingel Varios 11 29-06-2005 18:30:09
Referenciar componente con un string ingel Varios 14 21-06-2005 21:01:57


La franja horaria es GMT +2. Ahora son las 00:38:02.


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