Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Eventos en otras UNIT (https://www.clubdelphi.com/foros/showthread.php?t=83909)

Jose Roman 14-08-2013 00:46:31

Eventos en otras UNIT
 
Hola a todos,

Tengo delphi 2007 y estoy realizando un programa el cual posee muchas lineas de codigo, por ahi lei que seria mejor utilizar otra UNIT en la cual divido el codigo, mi pregunta es ¿Como puedo capturar un evento (OnClic por ejemplo) hecho en otra unidad? lo he intentado pero a pesar que la coloco en la clausula uses no me aparece como opcion para incluirla en un evento OnClic de un TButton.


Gracias de antemano

ecfisa 14-08-2013 01:54:33

Cita:

¿Como puedo capturar un evento (OnClic por ejemplo) hecho en otra unidad?
Hola Jose Roman.

Un ejemplo.

Form1:
Código Delphi [-]
...
type
  TForm1 = class(TForm)
    btnShowForm2: TButton;
    procedure btnShowForm2Click(Sender: TObject);
  private
    procedure ClickEnForm2Button1(Sender: TObject);
  public
  end;
...
implementation

uses Unit2; 

procedure TForm1.ClickEnForm2Button1(Sender: TObject);
begin
  Caption := 'Han echo click sobre Button1 en Form2';
end;

// Asignar evento y mostrar Form2
procedure TForm1.btnShowForm2Click(Sender: TObject);
begin
  Caption := '';
  if not Assigned(Form2) then
  begin
    Form2 := TForm2.Create(Self);
    Form2.Button1.OnClick := ClickEnForm2Button1;
  end;
  Form2.Show; // (o ShowModal)
end;
...

El ejemplo supone que Form2 no está en Auto create form y que, lógicamente en Form2 existe un TButton llamado "Button1".

Saludos. :)

ozsWizzard 14-08-2013 09:13:56

Si lo eventos no se van a reutilizar, aunque se pueda modular el código y llevar código a otras Units, precisamente lo eventos no es lo que deberías llevarte, al menos en mi opinión.

Y si es un código que se va a reutilizar, aún así hay opciones mejores que sacar los eventos de la unidad del formulario. Entre esas opciones, modula el código y llama desde los eventos a esas funciones y procedimientos.

Si asocias eventos de forma dinámica a tus componentes, puedes ser que si te interese tener estos eventos en una unidad concreto.

Mi consejo, si lo aceptas, es que reflexiones sobre cual es tu caso y ver si realmente te interesa llevarte los eventos a otras unidades, hay mucho código exportable a otras unidades y, precisamente, los eventos no son el mejor ejemplo.

Un saludo.

Jose Roman 14-08-2013 15:01:50

muchas gracias por su colaboracion,
Les comento que los eventos que deseo realizar aparte los deseo hacer en una unidad aparte (File -> New -> Unit) la cual solamente posee:
Código Delphi [-]
unit Unit1;

interface

implementation

end.
Y ahi deseo realizar los eventos pero todo en tiempo de diseño, como por ejemplo que quedara en el evento OnClic del TButton en el Form1 algo asi Unit1.Click, no se que se deba colocar en Uses, piensoi que ahi esta el asunto....

Jose Roman 14-08-2013 17:57:52

Utilizar eventos de otra Unit
 
Hola a todos,


Tengo Delphi 2007 y tengo un programa con mas de 1000 lineas de codigo, deseo realizar los eventos en otra unidad (File -> New -> Unit)



y poder asignarlos a los componentes de mi formulario principal en tiempo de diseño, como por ejemplo en el evento OnClick de un TButton



en la imagen en vez de Button1Click deseo que quede algo como Unit2.ButtonClick.

Sera que se puede esto????? se que se debe colocar en USES la UNIT2 mas no se que se debe colocar de mas para pueda realizar esto.

Gracias por su colaboracion

ecfisa 14-08-2013 19:15:29

Hola Jose Roman.

Por favor, tál como sugiere el punto 6 de la guía de estilo, no crees otro hilo con el mismo tema, continua con el inicial.

Saludos :)

Jose Roman 14-08-2013 20:32:04

mil disculpas, como veo que no me habian entendido realice una nueva pregunta pero con mas detalle

Jose Roman 14-08-2013 20:33:45

Hola gracias por tu respuesta pero en la nueva unidad no hay form utilizo la opcion (File -> New -> Unit) de ahi es que hago la unidad y deseo crear los procedimientos

ecfisa 14-08-2013 20:47:28

Hola Jose Roman.

Por lo que entiendo de tu imágen, deseas asignar en tiempo de diseño, desde el Object Inspector, el evento correspondiente a un TButton residente en otro formulario. Hasta donde sé, eso sólo es posible mediante código de forma similar al ejemplo que te puse en el mensaje anterior.

Pero desconozco si en las últimas versiones de Delphi es posible.

Saludos. :)

Jose Roman 15-08-2013 15:22:58

Hola ecfisa,

Tienes toda la razon me pase buscando por distintos sitios y despues de unas horas y dentro del Object Inspector no se puede.

Te agradezco tu ayuda porque eso me dio una luz para realizardo por el lado que tu propones.

gatosoft 21-08-2013 17:58:13

Ok Amigo Jose Roman, No es posible hacer lo que dices de forma directa, como dice ecfisa, se logra por codigo...

Sin embargo creo que te estas centrando en una solución que no es adecuada para tu problema... apoyo lo que dice ozsWizzard, sobre replantear tu estrategia y modular el código...

Tu problema es: Un programa con muchas lineas, no es un evento en otra unidad.

No se cuanto conozcas de objetos, pero aprender sobre ellos es un buen camino para mejroar tu codigo.

El problema es que normalmente teienes en tu pantalla principal toda la logica de tu aplciacion y en cada boton, tenes toda la logica de un proceso... La mejor práctica es solo hacer llamadas desde tu GUI a código definido en otras unidades agrupadas por funcioanlidad o mejor, convertidas en clases...


De esta forma, tu boton debería tener codigo sencillo como:

Procedure BotonClick(Sender:TObject);
Begin
Factura.Inicializar;
Factura.item.add(...);
Factura.Aplicar;
end;


La lógica de como se inicializa, cómo se agrega y como se aplica una factura está definida en otra parte... tu boton solos e encarga de recoger la información de la pantalla y pasarla a tu otra unidad o clase...

Un saludo,

Jose Roman 21-08-2013 19:24:44

Gracias por la respuesta,
Te comento que lo que he aprendido practicamente autodidacta y para completar aqui en Colombia no enseñan este maravilloso lenguaje, tienen un ejemplo de lo que comentan porque como veo el planteamiento propuesto por ecfisa y usted me ayudan, les comento que cada click que doy en un TButton no las muestro en un TForm, lo hago en un TTabSheet de un TPageControl pero ello me ha llevado a que haya muchas lineas de codigo y deseo que sea mas legible para un futuro si necesito realizar alguna modificacion. Gracias


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

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi