Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Menu Principal (https://www.clubdelphi.com/foros/showthread.php?t=89953)

Adrian Martinez 08-03-2016 19:39:23

Menu Principal
 
Hola a todos! desde ya quiero darles las gracias por su ayuda :)
Bien aqui la cuestion, tengo un formulario principal en el cual se ejecutan formularios Hijos, este formulario principal tiene una barra de botones, donde al ejecutarse el formulario hijo, se le asignan las tareas (nuevo, guardar eliminar, modificar, etc) los botones tienen asignados en la propiedad action la respectiva funcion, que estoy administrando con el Action Manager. Para que esta barra de Botones responda a un formulario en particular, cada vez que se activa o desactiva un formulario, cambio el datasource en el ActionManager para que cumpla dicha funcion. Se Realiza con el Siguiente Procedimiento:

Código Delphi [-]
Procedure SetiarBarra(MyDataSource:TDataSource; bCarga:Boolean);
var i:Integer;
begin
  With FrmMain do
    begin
      if bCarga = True then
        begin
          for i := 0 to ActionManager.ActionCount -1 do
            begin
              if UpperCase(ActionManager.Actions[i].Category)=UpperCase('DataSet')then
                TDataSetAction(ActionManager.Actions[i]).DataSource := MyDataSource;
            end;
        end

      else
        begin
          for i := 0 to ActionManager.ActionCount -1 do
            begin
              TDataSetAction(ActionManager.Actions[i]).OnExecute := Nil;
              if UpperCase(ActionManager.Actions[i].Category)=UpperCase('DataSet')then
               TDataSetAction(ActionManager.Actions[i]).DataSource := Nil;
            end;
        end;
    end;
end;

a este procedimiento lo llamo desde los formularios Hijos, en los OnActivate (SetiarBarra(DataSet, True)) y OnDesactivate(SetiarBarra(nil, False)).

Al crear el primer formulario asigna las tareas sin problema, el inconveniente se presenta cuando abro otro formulario, ya que nunca vuelve a reasignar el Datasource por lo tanto siempre los botones responden a la accion del primer formulario ejecutado, como no hay ningun error, no se que mas hacer :( Espero haber sido lo suficientemente claro, gracias nuevamente y saludos!

roman 08-03-2016 20:34:21

Hola y bienvenido al ClubDelphi :)

Cuando escribas código, utiliza las etiquetas [delphi] o [code] para que no se pierda el formato y se coloree automáticamente. Esta vez lo he hecho yo por ti ;)

En cuanto a tu duda, ¿has intentado no hacer nada?

Acabo de hacer una prueba con un formulario MDI y dos MDIChild, cada uno de éstos con un DBEdit y un DataSource apuntando a distintos DataSets ubicados en el formulario padre.

Coloco un ActionControl con acciones TDataSetPrior y TDataSetNext conectadas a dos botones de la Toolbar.

Sin programar nada en los eventos que mencionas ni hacer ninguna asignación del TDataSetAction.DataSource, los botones mueven el registro activo del dataset correspondiente al formulario hijo activado.

Imagino que con un ActionManager debe ser similar el comportamiento.

LineComment Saludos

Adrian Martinez 08-03-2016 20:49:55

Hola! gracias por la aclaracion, lo tendre en cuenta para la proxima ;) y con respectoa tu pregunta, si, eh probado a no hacer nada y no funciono, por eso eh recurrido al codigo mencionado anteriormente.. aun asi volvi a interntarlo y no paso nada :(

Adrian Martinez 10-03-2016 01:34:14

Aplicación con Multi-Formularios
 
Buenas gente! Desde ya se agradece cualquier ayuda :) .

Bien el tema es el Siguiente:
Tengo un formulario Principal (MdiForm) con varios controles como dxRibbon, ActionManager, Backstage, ect... en este Principal se Puede Ver o ejecutaran multiples formularios MDIChild al Mismo tiempo.
Cuando creo el primer MDIChild los controles se asignan automaticamente, hasta ahi todo marcha bien, pero cuando ejecuto el segundo formulario los controles solo quedan para el primero, y hasta que no lo cierre, no funcionan para el segundo.

Pregunta: ¿Como puedo liberar los controles del MDIForm cada vez que se activa o desactiva un MDIChild, sin destruir o cerrar la ventana MDIchild Propiamente Dicha?

PD: Soy nuevo trabajando con delphi, tal vez sea algo facil de solucionar, pero aun no tengo demasiada practica en este entorno.. Gracias Nuevamente! saludos :D

Neftali [Germán.Estévez] 10-03-2016 10:29:37

Es difícil saber dónde está el problema sin ver el código que estás utilizando.

Deberías poder crear tantas instancias de un formulario como necesites sin problemas. No acabo de entender qué quieres decir cuando hablas de: "pero cuando ejecuto el segundo formulario los controles solo quedan para el primero", pero parece que el problema está en cómo trabajas con esos controles.

Das pocos detalles para saber dónde puede radicar el problema.

Adrian Martinez 10-03-2016 19:42:42

Perdon por la falta de detalles! mira, este es el procedimiento que llamo desde el Onactivate y OnDesactivate de los MDIChild, para asignara el DataSource a la Lista de Acciones de mi ActionManager, que controla los botones en el Menu Principal, o sea el MDIForm.

Código Delphi [-]
Procedure SetiarBarra(MyDataSource:TDataSource; bCarga:Boolean);
var i:Integer;
begin
  With FrmMain do
    begin
      if bCarga = True then
        begin
          for i := 0 to ActionManager.ActionCount -1 do
            begin
              if UpperCase(ActionManager.Actions[i].Category)=UpperCase('Dataset')then
                TDataSetAction(ActionManager.Actions[i]).DataSource := MyDataSource;
            end;
        end
      else
        begin
          for i := 0 to ActionManager.ActionCount -1 do
            begin
              TDataSetAction(ActionManager.Actions[i]).OnExecute := Nil;
              if UpperCase(ActionManager.Actions[i].Category)=UpperCase('DataSet')then
                TDataSetAction(ActionManager.Actions[i]).DataSource := MyDataSource;
            end;

        end;
    end;
end;

Al procedimiento lo llamo asi:
Cuando activo el MDICHild (OnACtivate) = SetiarBarra(DSMain, True) //DSMain, es el nombre del DataSet.
Cuando Desactivo el MDICHild (OnDesactivate) = SetiarBarra(Nil, False) //DSMain, es el nombre del DataSet.

Entonces: Cuando activo un MDIChild, el MDIForm se enlaza a su DataSet, pero cuando se Desactiva ese MDIChild, nunca se desenlaza...

Espero haber aclarado algunas de tus dudas! Gracias por responder :D

ecfisa 10-03-2016 20:24:18

Hola Adrian.

El nuevo hilo que abriste "Aplicación con Multi-Formularios", realiza la misma consulta con el mismo código que el que habías echo dos días atrás "Menu Principal", motivo por el cuál combiné ambos en el primero.

Si no responden o no te sirven las respuestas recibidas, no habras un nuevo hilo con la misma consulta. Continua preguntando en el hilo inicial que este pasará a encabezar la lista de nuevos temas.

Saludos y gracias por tu colaboración :)


La franja horaria es GMT +2. Ahora son las 12:31:21.

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