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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-09-2006
jorllazo jorllazo is offline
Miembro
 
Registrado: sep 2006
Ubicación: Valencia, España
Posts: 83
Poder: 18
jorllazo Va por buen camino
Lightbulb Toolbars Y MDIForms

Hola Amigos..
Tengo una duda y a pesar de haber pasado un buen rato buscando en los foros, no encuentro la respuesta, he visto algo parecido pero...

En una aplicacion MDI, el formulario principal tiene una Toolbar, pero como se puede hacer para que esta toolbar responda a ciertos eventos dependiendo del MDIChild que se encuentre activo en ese momento ?

POr ejemplo, si al presionar sobre el boton añadir esta el form de clientes activo, pues que me añada un cliente.

Lo unico que se me ha ocurrido, es poner un actionList en cada uno de los hijos y en el Evento onActivate de Estos, sustituir la Propiedad Action de cada toolbar button del formulario padre por la correspondinente del hijo, pero no se si esto es lo mejor o lo mas efectivo o hay (que seguro que lo hay) otra manera mas sencilla de hacerlo.

Gracias de nuevo.
__________________
Gracias de Antemano
Responder Con Cita
  #2  
Antiguo 27-09-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo veo bien la opción que mencionas, incluso la veo elegante Otra forma, no necesariamente mejor, sería que derivaras tus formularios hijos de un formulario base común:

Código Delphi [-]
type
  TBaseChildForm = class(TForm)
  public
    procedure Add; virtual; abstract;
  end;

en el que declaras los métodos (acciones) que vayas a usar. Cada formulario descendiente, define tales métodos como convenga. De esta manera, el formulario padre, simplemente llama al método Add del formulario activo:

Código Delphi [-]
TBaseChild(ActiveMDIChild).Add;

// Saludos
Responder Con Cita
  #3  
Antiguo 27-09-2006
jorllazo jorllazo is offline
Miembro
 
Registrado: sep 2006
Ubicación: Valencia, España
Posts: 83
Poder: 18
jorllazo Va por buen camino
Pues casi que esto incluso ahorra alguna linea de codigo, me refiero al hecho de tener que unir los botones con su respectiva accion...

Voy a sopesar....y ver incluso...despues que codigo sera menos tedioso de mantener, a la hora de ampliar botones y acciones ....a ver posibilidades...

Gracias...
__________________
Gracias de Antemano
Responder Con Cita
  #4  
Antiguo 28-09-2006
jorllazo jorllazo is offline
Miembro
 
Registrado: sep 2006
Ubicación: Valencia, España
Posts: 83
Poder: 18
jorllazo Va por buen camino
Hola
Al final, me decidi por las Acciones y sustituir en el mainForm las acciones de los botones, me ha resultado este codigo:

Código Delphi [-]
procedure TGlobals.setRecordToolbarActions(aList: TActionList);
  var
    tb : TToolButton;
    begin
      tb := Application.MainForm.FindComponent('tbFirst') as TToolButton;
      tb.Action := aList.Actions[0] ;
      tb.ImageIndex := 0;
      tb := Application.MainForm.FindComponent('tbPrev') as TToolButton;
      tb.Action := aList.Actions[1];
      tb.ImageIndex := 1;
      tb := Application.MainForm.FindComponent('tbNext') as TToolButton;
      tb.Action := aList.Actions[2];
      tb.ImageIndex := 2;
      tb := Application.MainForm.FindComponent('tbLast') as TToolButton;
      tb.Action := aList.Actions[3];
      tb.ImageIndex := 3;
      tb := Application.MainForm.FindComponent('tbAdd') as TToolButton;
      tb.Action := aList.Actions[4];
      tb.ImageIndex := 4;
      .
      .
      .
      tb := Application.MainForm.FindComponent('tbFind') as TToolButton;
      tb.Action := aList.Actions[8];
      tb.ImageIndex := 8;
    end;

Se os ocurre otro modo mas eficiente?
he probado a usar FindChildControl. pero no me funciona ni a la de mil estoy con la version 2006 y lei en un post de Roman que no funcionaba igua a partir de la version 7.

Gracias.
__________________
Gracias de Antemano
Responder Con Cita
  #5  
Antiguo 28-09-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Para qué usas FindComponent en lugar de acceder directamente a los ToolButtons? Cada FindComponent hace un ciclo sobre todos los componentes del formulario para buscar uno que coincida con el nombre que se pasa, de manera que recorres tdos los componentes tantas veces como botones tengas.

// Saludos
Responder Con Cita
  #6  
Antiguo 28-09-2006
jorllazo jorllazo is offline
Miembro
 
Registrado: sep 2006
Ubicación: Valencia, España
Posts: 83
Poder: 18
jorllazo Va por buen camino
he usado esto por que no podia acceder al formulario padre como tal,
cuando intentaba poer el nombre de la Unit en la clausula Uses, me daba un error de compilacion "Circular Data links not Allowed", con lo que he probado de muchas maneras y esta es la unica que me ha funcionado.
Por que de que otro modo podria ser? desde el MDIChild como te comento, no he podido (sabido) acceder a los controles del Padre directamente, o quiza bien accediendo al Indice Directamente?
__________________
Gracias de Antemano

Última edición por jorllazo fecha: 28-09-2006 a las 16:14:03.
Responder Con Cita
  #7  
Antiguo 28-09-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Y yo me pregunto, por que no pruebas la solución que te dio Román unos mensajes arriba?

Creas una forma base con métodos públicos virtuales o abstractos con el nombre de las acciones que quieras que ejecuten las formas MDIChild.

Luego en las formas heredadas, redefines estos métodos para tener la funcionalidad de la forma en cuestion y desde tu forma principal solo haces la llamada:

Código Delphi [-]
// Ejemplo de un TAction con nombre Add, ejecutando el método Add de la forma MDIChild activa:
procedure TForm1.AddExecute(Sender: TObject);
begin
  TFormaBase(ActiveMDIChild).Add
end;

Al hacerlo así, no te preocupas de como acceder a los controles de la forma principal desde las formas hijas, solo en implementar los métodos con las acciones que quieras que ejecuten estas...



Saludos...
Responder Con Cita
  #8  
Antiguo 28-09-2006
jorllazo jorllazo is offline
Miembro
 
Registrado: sep 2006
Ubicación: Valencia, España
Posts: 83
Poder: 18
jorllazo Va por buen camino
Pruebo a ver... pero no os parece mas tedioso de mantener?
__________________
Gracias de Antemano

Última edición por jorllazo fecha: 28-09-2006 a las 16:43:07.
Responder Con Cita
  #9  
Antiguo 29-09-2006
jorllazo jorllazo is offline
Miembro
 
Registrado: sep 2006
Ubicación: Valencia, España
Posts: 83
Poder: 18
jorllazo Va por buen camino
Hola Amigos.
Una vez mas me rindo ante la evidencia, he probado la solucion que ofrecia Roman y no solo funciona a la perfeccion si no que es perfectamente mantenible adaptable y ampliable. Igual me obceque demasiado en mi idea

Muchas gracias de nuevo por ayudarme, espero poder devolveros eso con creces.
__________________
Gracias de Antemano
Responder Con Cita
Respuesta



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
Aplicacion Mdi con varias MDIFORMS samantha jones Varios 4 08-01-2012 00:45:43
Fijar las toolbars ibstk Varios 4 09-02-2005 03:37:49
ControlBar - ToolBars (resized ???) jymy788 Varios 0 19-08-2004 17:56:32


La franja horaria es GMT +2. Ahora son las 08:18:05.


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