Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Adicionar una opción o un menú desplegable a TODOS los DbGrids del aplicativo???? (https://www.clubdelphi.com/foros/showthread.php?t=43205)

movorack 04-05-2007 18:13:44

Adicionar una opción o un menú desplegable a TODOS los DbGrids del aplicativo????
 
Ehhhh

Quiero poder crear/asignar un menú desplegable o adicionar una opción a un menú ya existente relacionado con un DBGrid.

Quiero adicionar una opción "Exportar a CSV" a todas las DBGrids que me encuentre en el camino mientras ejecuto el soft.

esa es la cuetión...

Neftali [Germán.Estévez] 04-05-2007 18:31:35

¿Dónde está el problema? En la rutina de exportar, en colocar el menú en todos los DBGrids,...

En DBGrid tiene la opción de PopUpMenu para colocar un menu desplegable con la opción que necesitas.
De la exportación a CVS ya hemos hablado varias veces en los foros. HAz una búsqueda y seguro que encuentras código.

En hacerlo fácil para todos los DBGrid de la aplicación depende de cómo lo tengas diseñado. ¿Cuantos form tienes? ¿Están relacionados? ¿Herencia?

Nasca 04-05-2007 18:46:15

Yo ese mismo problema lo he solucionado seleccionando el DBGrid de todos los del formulario que quiero exportar.

Te pongo un ejemplo de lo que uso yo para buscar los DataSet de un form, el funcionamiento es básicamente el mismo para otro tipo de objetos.

Muestro un formulario con un ListBox con este código:

Código Delphi [-]
procedure TfSelDataSet.FormCreate(Sender: TObject);
var
  I : integer;
  FPadre : TComponent;
begin
if Assigned (Self.Owner) then
 begin
  FPadre := Self.Owner;
  for I := 0 to FPadre.ComponentCount - 1 do
     begin
       if FPadre.Components[i] is TDataSource then
         lstDataSets.Items.AddObject(TDataSource(FPadre.Components[i]).DataSet.Name, TDataSource(FPadre.Components[i]).DataSet);
     end;
 end;
end;

Luego llamo ese formulario en modo modal y recojo el objeto con algo así:

Código Delphi [-]
         with SYS_SDT_seleccionar_dataset.TfSelDataSet.Create(Self) do
          begin
             ShowModal;
             if ModalResult = mrOK then
              SYS_FAV_filtro_avanzado.TfFiltroAvanzado.CreateFiltro(Self,TClientDataSet(lstDataSets.Items.Objects[lstDataSets.ItemIndex])).Show;
          end;

Como verás la clave está en AddObject y el Objects.

Aunque ahora que lo miro acabo de encontrarle un bug ya que también carga los DataSet de los DataSource que apuntan a los TSQLDataSet (no solo los TClientDataSet) para montar la lógica de cliente-detalle en DBX. :mad:

movorack 04-05-2007 19:50:56

tienes razón...
 
la cuestión es simple. no es exportar a un CSV, en realidad quiero exportar a Txt, CSV, Excel, Word, XML pero esa no es la cuestión. de eso hay bastante por ahí.

lo que quiero es poder asignar un PopupMenu a un DBGrid sin recurrir a la asignación por el inspector de objetos y en el caso de que ya exista un PopupMenu asignado, poder crear una opción dentro del PopupMenu.

Ahora, lo que no quiero es ir form por form seleccionando mis DBGrid y asignandole un PopUpMenu.

Lo que me gustaria y no se como hacer es halgo que me supervise cualquier form que cargue el programa y al encontrar un DBGrid o desendiente adicione o el PopUpMenu o la opción deseada aun PopUpMenu existente.

Formularios: 30 (Relacionados cuando se requiere)

Y... Nasca... I'm sorry. I didn't understand you: "SYS_FAV_Filtro........".

cya2277 04-05-2007 19:55:24

ayuda con los dbgrids
 
Hola de nuevo compañeros tengo un problema y espero que me puedan ayudar, mi problema consiste en lo siguiente:
Tengo dos pantallas diferentes una llamada Ventas y otra de Productos en c/u tengo un componente BDGrid y quisiera ver la manera de que en la ventana productos pueda seleccionar uno o mas productos y agregarlos directamente a la pantalla de ventas, mas bien al Grid de ventas y poder realizar la operacion.........

fjcg02 05-05-2007 00:45:00

Creo entender que quieres asignar el menú en tiempo de ejecución.
Si haces una función con este código parametrizando la llamada y lo ejecutas en todos los formularios al crearlos, conseguirás lo que pretendes.

Código Delphi [-]
for i:= 0 to formulario.ComponentCount-1 do
begin
   if (Formulario.Components[i] is TDBGrid ) then
       (Formulario.Components[i] as TDBGrid).popupmenu:= Elmenuquequierassiexiste;
end;

Por supuesto, deberás adaptarlo.

Suerte y un saludo

Nasca 05-05-2007 11:09:25

También puedes montar un componente descendiente DBGrid donde ir añadiendo las distintas funcionalidades "especiales". Incluido un popupmenu que puedes llamar con alguna combinación de teclas o mediante algún botón especial (como hacen en algunos componentes del estilo). Yo personalmente lo monto con el atajo Ctrl + Alt + M. Eso te permite mucho juego, incluido lo que comentas.
De todas formas si vas a montar algo a nivel de formulario al menos crea un formulario base donde metas esa funcionalidad y hereda del mismo.
Y siento que no entiendas el ejemplo, te estaba dando una alternativa sencilla a lo que planteabas, aunque yo realmente utilizo en estos casos las tres posibilidades:
- Modificación de componente DBGrid con opciones extendidas en menú especial.
- Herencia con exportación del dbgrid principal para formularios de selección de información.
- Carga de los componentes de un tipo particular que existen en un formulario y su posterior selección para realizar alguna acción especial sobre el mismo.

Aunque algún compañero ya te ha dado otra opción (mas acorde con lo que tratas de hacer), la de creación dinámica mediante código de popupmenu e items del mismo.

Neftali [Germán.Estévez] 07-05-2007 11:16:43

Cita:

Empezado por cya2277
Hola de nuevo compañeros tengo un problema y espero que me puedan ayudar, mi problema consiste en lo siguiente:
Tengo dos pantallas diferentes una llamada Ventas y otra de Productos en c/u tengo un componente BDGrid y quisiera ver la manera de que en la ventana productos pueda seleccionar uno o mas productos y agregarlos directamente a la pantalla de ventas, mas bien al Grid de ventas y poder realizar la operacion.........

Revisa la Guía de estilo.
Por favor, no mezcles preguntas diferentes en un mismo hilo.

Si deseas hacer una nueva pregunta crea un nuevo hilo en el foro apropiado y hazla allí.

movorack 07-05-2007 15:48:13

thanks
 
Gracias a todos son muy amables en contestar... aquí estoy iniciando mi semana, con el sol caribeño de mi costa atlantica detrás de inmensas nubes grises pero con el mismo calor de siempre. Lleno de espectativas y buenas nuevas (me puse gabo).

y bueno, lo de recorrer los componentes del formulario, pues si... es una opción muy buena. luego les comento como me fué.

Ah y no te entendi fué porque yo no soy un duro en esto, soy solo un auxiliar de Sistemas con muchas ganas de aprender e inmensas dudas. aún no entiendo muy bientemas como el poliformismo, herencia, sobrecarga, etc etc etc... una vez leí que Delphi era facil de aprender en su parte sencilla, crear forms, ejecutar procedimientos y eso. pero tenia un mundo de cosas que aprender y esas son las que quiero aprender. hasta hace poquito fué que vine a saber que muchas de las "funciones" que encuentro en Internet ya estaban en delphi y hasta más sencillas. para eo recorro estos foros. para aprender de todos ustedes. :D

Bueno, a ponerme a trabajar. Saben. "Colombia es pasión." Dios bendiga Colombia.:p


La franja horaria es GMT +2. Ahora son las 21:28:16.

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