Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-02-2012
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Cambiar propiedad boton Unit1 desde evento Unit2

Hola. A ver si alguno me podéis ayudar, por favor.

Tengo un form con sus correspondientes botones y demás componentes en una unit1 principal (SDIMAIN), que hace uso de una unit2 (BasDat), con los componentes propios de acceso a base de datos.

Deseo utilizar el evento ondatachange de un datasource que está definido en BasDat, para modificar una propiedad de un botón definido en SDIMAIN, en concreto boton.enabled := true, cuando haya un cambio de datos en una tabla.

Muy simplificado quedaría un código así:

unit SDIMAIN

...
uses BasDat...
...
boton.enabled := false
...

unit BasDat

...
procedure TBasDat.DatosNotasDataChange(Sender: TObject; Field: TField);
begin
if TablaNotas.Modified then (ttable)
'poner boton de la otra unit a true'
end;

Gracias y un saludo.
Responder Con Cita
  #2  
Antiguo 28-02-2012
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Teniendo la unidad destino en el USES debes escribir Unit.Componente.Propiedad := ???
Código Delphi [-]
unit SDIMAIN
...
uses BasDat...
...
boton.enabled := false
...
------------------------------

unit BasDat
...
uses SDIMAIN
...
procedure TBasDat.DatosNotasDataChange(Sender: TObject; Field: TField);
begin
  if TablaNotas.Modified then (ttable)
    SDIMAIN.Boton.Enabled := True;
end;

De todos modos es mejor hacerlo mediante métodos.
De esta forma, si luego agregas un label u otro botón o cualquier cosa que dependa de que esté habilitado o no, solo deberás cambiar la parte de SDIMAIN y no el resto de units que lo utilizan.
Código Delphi [-]
unit SDIMAIN
...
type
  TFormSDIMain= class(TForm)
  ...
  public
     procedure HabilitaBotones;
  end;

uses BasDat...
...
procedure TFormSDIMain.HabilitaBotones;
begin
   // Este procedimiento habilita botones en este formulario
   Boton.Enabled := True;
   // Tambien podría:
   // - poner visible o invisible algunas cosas
   // - cambiar colores
   // - modificar comportamientos de componentes
   // - etc.
end;
...
------------------------------

unit BasDat
...
uses SDIMAIN
...
procedure TBasDat.DatosNotasDataChange(Sender: TObject; Field: TField);
begin
  if TablaNotas.Modified then (ttable)
    SDIMAIN.HabilitaBotones;
end;

Última edición por duilioisola fecha: 28-02-2012 a las 14:16:40.
Responder Con Cita
  #3  
Antiguo 28-02-2012
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Código Delphi [-]unit SDIMAIN

uses BasDat
...
boton.enabled := false
...
------------------------------

unit BasDat

uses SDIMAIN
...
procedure TBasDat.DatosNotasDataChange(Sender: TObject; Field: TField);
begin
if TablaNotas.Modified then (ttable)
SDIMAIN.Boton.Enabled := True;
end;


Hola, una vez realizados los cambios, al compilar produce el siguiente error

[DCC Fatal Error] BasDat.pas(8): F2047 Circular unit reference to 'BasDat'

Se produce una referencia de SDIMAIN en BasDat y viceversa.

¿Alguna alternativa para solucionarlo?

Un saludo.
Responder Con Cita
  #4  
Antiguo 28-02-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por jocaro Ver Mensaje
¿Alguna alternativa para solucionarlo?
Si, incluí las unidades luego de la declaración de implementación:

Código Delphi [-]
...
implementation

uses SDIMAIN;
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 28-02-2012
jocaro jocaro is offline
Miembro
 
Registrado: sep 2011
Posts: 104
Poder: 13
jocaro Va por buen camino
Hola duilioisola y ecfisa

Muchas gracias por vuestra ayuda

Ha funcionado correctamente.

Código Delphi [-]
procedure TFrmBasDat.DatosNotasDataChange(Sender: TObject; Field: TField); 
begin   
if TablaNotas.Modified then     
SDIMAIN.SDIAppForm.btnGuardar.Enabled := True; (esto lo pasaré a un procedimiento para llamarlo desde onDataChange de varias tablas) 
end;

Un saludo y de nuevo gracias.

Última edición por jocaro fecha: 28-02-2012 a las 19:24:16. Razón: Formateo incorrecto de sintaxis delphi
Responder Con Cita
  #6  
Antiguo 28-02-2012
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Tienes dos partes en una unit: Interfaces e implemantation.
Ambas tienen una sección uses.
Deberás poner una en un uses de una parte y otra en la otra.
Código Delphi [-]
unit UFMPrueba_A;

interface

uses
  Windows, Classes, Forms;

type
  TFMPrueba_A = class(TForm)
     Boton: TButton;
     ...
  private
     { Private declarations }
  public
     { Public declarations }
  end;

var
  FMPrueba_A: TFMPrueba_A;

implementation

{$R *.DFM}

uses UPrueba_B;
...

------------------------------------------------------------
unit UFMPrueba_B;

interface

uses
  Windows, Classes, Forms;

type
  TFMPrueba_B = class(TForm)
     ...
  private
     { Private declarations }
  public
     { Public declarations }
     procedure Evento(Sender: TObject);
  end;

var
  FMPrueba_B: TFMPrueba_B;

implementation

{$R *.DFM}

uses UPrueba_A;

procedure TFMPrueba_B.Evento(Sender: TObject);
begin
   UFMPrueba_A.Boton.Enabled := False;
end;
...
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
llamar al evento click de un boton q se encuentra en un form desde otro form TURBOIGOR OOP 6 02-12-2008 14:50:16
Evento de un boton juanpe Varios 4 19-02-2007 15:54:53
Llamar evento OnClick de un boton desde otro Form Peterman OOP 7 17-10-2006 18:12:31
Llamar a una propiedad de un boton zvf OOP 2 12-04-2006 18:37:04
Adicionar propiedad a boton mosorio OOP 9 14-05-2003 09:54:08


La franja horaria es GMT +2. Ahora son las 11:15:28.


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