Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-02-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Me autocorrijo

Si deseas habilitar del form1 pues logicamente debes hacer esto

Código Delphi [-]
Habilita(Edit1);

Dentro del form1.

Saludos.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #2  
Antiguo 28-02-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Yo al menos eso no lo haría así. Si un procedimiento pertenece a un Form, debe actuar sólo sobre ese Form.

Tienes 2 formas de hacerlo, desde mi punto de vista:
1- Creando una unidad nueva.
- File -> New -> Unit, allí declaras la función y su implementación. Ya es una rutina que no pertenece a ningún Form, pero puedes usarla donde quieras. La Unidad puede llamarse Global.pas, publica.pas, etc. Allí colocas todas las rutinas que sean comunes a varios Forms.
2 - Usando Herencia:
- Creas un Form vacío, le añades la rutina "Habilitar" y lo que debe hacer. Lo llamas BaseForm.Pas
- Al crear una nueva ventana que deba tener esa función "Habilitar", usas File -> new -> other -> projects y ahí debe aparecer "BaseForm", lo seleccionas y le das al botón heredar. La nueva ventana ya dispone del método Habilitar y puedes cambiar su forma de actuar mediante la directiva Override

Este método tiene una ventaja, cualquier ventana que tengas tendrá el método Habilitar, sin importar si es Form3, Form10 o Form32
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 28-02-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Cita:
Empezado por Lepe
Yo al menos eso no lo haría así. Si un procedimiento pertenece a un Form, debe actuar sólo sobre ese Form.

Tienes 2 formas de hacerlo, desde mi punto de vista:
1- Creando una unidad nueva.
- File -> New -> Unit, allí declaras la función y su implementación. Ya es una rutina que no pertenece a ningún Form, pero puedes usarla donde quieras. La Unidad puede llamarse Global.pas, publica.pas, etc. Allí colocas todas las rutinas que sean comunes a varios Forms.
2 - Usando Herencia:
- Creas un Form vacío, le añades la rutina "Habilitar" y lo que debe hacer. Lo llamas BaseForm.Pas
- Al crear una nueva ventana que deba tener esa función "Habilitar", usas File -> new -> other -> projects y ahí debe aparecer "BaseForm", lo seleccionas y le das al botón heredar. La nueva ventana ya dispone del método Habilitar y puedes cambiar su forma de actuar mediante la directiva Override

Este método tiene una ventaja, cualquier ventana que tengas tendrá el método Habilitar, sin importar si es Form3, Form10 o Form32
Saludos
Muy bien Lepe, esto es algo nuevo para mi, asi que entendido y anotado, es mas, me acabas de abrir los ojos para un proyecto que estaba por ahi arrumbado y que habia hecho con Pascal, usando archivos .inc donde almacenaba rutinas para ser llamadas por cualquier programa, pues nada, gracias por el aporte.

Saludos.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #4  
Antiguo 01-03-2007
Avatar de joHn je@N
joHn je@N joHn je@N is offline
Miembro
 
Registrado: jun 2005
Ubicación: Toluca, Mexico
Posts: 44
Poder: 0
joHn je@N Va por buen camino
Bueno. a ver

Siento que se les paso algo o yo no entendi bien pero, aqui esta mi aportación:
Bueno primero creo que se les olvido colocar en el Form2
en la parte de
Código Delphi [-]
implementation uses Unit1; ///en donde se encuentra el form1


En el form1 tenemos:
Código Delphi [-]
implementation uses Unit2; ///en donde se encuentra el Form2


Despues tenemos:
Código Delphi [-]
//en el Form1 procedure TForm1.habilitar (primero : TEdit); 
begin    
   primero.Enable := True; 
end;


Despues en el Form2 para llamar al Form1.habiilitar () desde el el Form2
teniendo en cuenta, de que podemos acceder al procedimiento dado a que tenemos en Él uses Unit1; podemos hacer esto:
Código Delphi [-]
{Esto es el código del Form2} 
begin    
   Form1.habilitar (Edit1);    //y listo. se habilita el Edit1 del Form2 llamando el procedimiento del Form1 
end;

SALUDOS

Última edición por joHn je@N fecha: 01-03-2007 a las 10:46:13.
Responder Con Cita
  #5  
Antiguo 01-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Es cierto, precisamente por eso no lo comentamos.

En Unit1 tienes que hacer un "uses Unit2". En Unit2 tienes que hacer "uses Unit1", ¿por qué no intentas hacerlo en parte interface? Verás que delphi te dice que no se permiten referencias circulares.

Dentro de un tiempo, cuando olvides como funciona el programa irás a ver qué hace el código, de la unidad 2 hace un Enable a la 1, de la 1 se hace un Enable de la 2 y.... ¿qué hago en el mismo punto de partida? ¿cual de las 2 rutinas es la que tiene preferencia ?.... Este tipo de confusiones son las que hay que evitar en la medida de lo posible.

Mirando el código fuente de delphi, verás que una clase (como lo es un Form) jamás modificará el comportamiento de otra clase ajena así por las buenas. Si ha de hacerlo se buscan métodos, propiedades o eventos mediante los cuales se informan esos cambios.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 01-03-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
¿Puedo aportar algo?

Si bien ya Lepe mencionó la manera correcta para implementar y dió unas aclaraciones válidas de su opción:
Cita:
Empezado por Lepe
Mirando el código fuente de delphi, verás que una clase (como lo es un Form) jamás modificará el comportamiento de otra clase ajena así por las buenas.
Aclaro que es un error conceptual que se realize este comportamiento. Si bien la regla tiene sus excepciones... los efectos que pueden producirse siguiendose estas vías, a la larga terminan siendo más que desastrozos. Ya lo ha dicho Lepe.

De acuerdo a las dos posibles soluciones de Lepe (y aclaro que yo hubiera dicho lo mismo), en lo personal, yo mantendría ambas posibilidades en el cajón. Aplicaría la que más económica/factible sea de acuerdo a las necesidades.

1. Si el sistema es muy simple y no requiere de mucho mantenimiento es viable la primera opción: una unidad global.
2. Si el sistema contiene multiples formularios y se sabe que el mantenimiento es fuerte. Y lo más importante: los cambios en el comportamiento de un formulario con respecto a otros es similar... La opción de la herencia visual es lo más recomendable.

Si bien no dije nada nuevo, a lo mejor para adonai le sirva para comprender mejor las alternativas.

Espero haber aportado algo y no haber redundado en algo.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #7  
Antiguo 02-03-2007
Avatar de joHn je@N
joHn je@N joHn je@N is offline
Miembro
 
Registrado: jun 2005
Ubicación: Toluca, Mexico
Posts: 44
Poder: 0
joHn je@N Va por buen camino
Correcto

Siertamente lo que dice Lepe es correcto pero, a mi se me ocurrio dar una respuesta pronta y que me parecio que podia servir (ya que es un procedimiento de un Form llamado por otro Form).
Ahora. Menciona Lepe implicitamente que hay una diferencia entre la sección implementation e interface (cosa que se me hace lógico porque estan en dos secciones o partes de código distintas jejeje) asi que eso es un premio a mi novatez y me gustaría que me dieran un link en donde poder saber exactamente la diferencia entres ambas secciones de código. Por favor.

Ahora. Checando un poco de lño que dijo Lepe hice esto a ver si es de ayuda para futuro.

Un Form que tiene un procedimiento habilita que esta ciertamente en otro archivo MiForm.pas mas o menos como menciono Lepe
Código Delphi [-]
unit MiForm;

interface
uses StdCtrls, Forms;

type
  TMiForm = class (TForm)
  protected
    procedure Habilita (Edit : TEdit);
end;

implementation

procedure TMiForm.Habilita(Edit : TEdit);
begin
  Edit.Enabled := True;
end;
end.

Despues el Form1 (por decir algo)
Código Delphi [-]
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, MiForm;

type
  TForm2 = class(TMiForm)
    Edit1: TEdit;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation
{$R *.dfm}

procedure TForm2.Button2Click(Sender: TObject);
begin
   Form2.Habilita(Edit1);
end;

end.

No se, si es una manera correcta de hacerlo. Si no, ayudenme a ver lo que me falta pero, como se ve Form2 ya tiene el procedimiento Habilita y otros Forms podrian tenerlo poniendo TFormX = class(TMiForm).

Bueno era todo.

SALUDOS
Responder Con Cita
  #8  
Antiguo 30-03-2007
Avatar de edelphi
edelphi edelphi is offline
Miembro
 
Registrado: jun 2006
Posts: 55
Poder: 21
edelphi Va por buen camino
Cita:
Empezado por Lepe
Yo al menos eso no lo haría así. Si un procedimiento pertenece a un Form, debe actuar sólo sobre ese Form.

Tienes 2 formas de hacerlo, desde mi punto de vista:
1- Creando una unidad nueva.
- File -> New -> Unit, allí declaras la función y su implementación. Ya es una rutina que no pertenece a ningún Form, pero puedes usarla donde quieras. La Unidad puede llamarse Global.pas, publica.pas, etc. Allí colocas todas las rutinas que sean comunes a varios Forms.
2 - Usando Herencia:
- Creas un Form vacío, le añades la rutina "Habilitar" y lo que debe hacer. Lo llamas BaseForm.Pas
- Al crear una nueva ventana que deba tener esa función "Habilitar", usas File -> new -> other -> projects y ahí debe aparecer "BaseForm", lo seleccionas y le das al botón heredar. La nueva ventana ya dispone del método Habilitar y puedes cambiar su forma de actuar mediante la directiva Override

Este método tiene una ventaja, cualquier ventana que tengas tendrá el método Habilitar, sin importar si es Form3, Form10 o Form32
Saludos
holas, lo ke dijo lepe me parece interesante pero como puedo implemnetar eso de herencia no entiendo muy bien eso de override, podrias explicarlo mejor porfa muchas gracias
Responder Con Cita
  #9  
Antiguo 30-03-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Cita:
Empezado por edelphi
holas, lo ke dijo lepe me parece interesante pero como puedo implemnetar eso de herencia no entiendo muy bien eso de override, podrias explicarlo mejor porfa muchas gracias
Bueno, no soy Lepe pero al concepto lo domino.
Mira, la herencia (en su concepto más simple) es una característica o propiedade que posee una clase de heredar el comportamiento y estructura de una clase padre. Por ejemplo si tu tienes una clase llamada Animal que cuenta con las propiedades Nombre y Tamaño (por poner un ejemplo) y un procedimiento que Mover, y tienes una clase basada en Animal (por poner un ejemplo... Gato), está segunda clase hereda todo lo común a la clase Animal y se le añade lo PROPIO o lo que le corresponde a Gato, por poner ejemplo: propiedad Color de Cola, y el procedimiento Arañar.
Un poco de código:
Código Delphi [-]
//esto es la clase Animal
Animal = class
  private
    FTamanno: integer;
    FNombre: string;
  public
    property Tamanno: string read FTamanno write SetTamanno;
    property Nombre: string read FNombre write SetNombre;
    procedure Mover(Pos: Pointer);
 end;

// esto es la clase Gato
Gato = class(Animal) // Un Gato es un animal. Por tanto Gato hereda de Animal
  private
     FColorCola: TColor;
  public
     property ColorCola: TColor read FColorCola write SetColorCola;
     procedure Arañar;
end;

¿Que se consigue con esto? que gato tenga el mismo comportamiento de un animal pero ESPECIALIZADO para algo más particular. La clase gato también tiene las propiedades tamaño y nombre y el procedimiento mover... y esto lo hereda de su padre (Animal).

Ahora... hay ocasiones en que es necesario redefinir el comportamiento de la clase padre... Por poner un ejemplo (siguiendo el anterior): Todos los animales pueden moverse, pero no todos los hacen de igual manera. Por tanto, si el procedimiento Mover de la clase Animal es único... todos los animales van a moverse igual... como se consigue esto.... con las cláusulas protected, y override (también no hay que olvidar los casos de asbtract y virtual) que señalaron Lepe y otros.

Cuando se desea que un procedimiento o función tenga una "sobrecarga", o redefinición... en la clase padre se lo introduce bajo la clausura protected (protegida).

Código Delphi [-]
Animal = class
//.... lo que venía
protected
  procedure Mover;
// ... lo que sigue
end;

Y en la clase hija (Gato) la clausura override, que indica que se va a sobreescribir el comportamiento. Esto hace que el compilador implemente el procedimiento adecuado a la clase.

Código Delphi [-]
Gato = class(Animal)
// --- lo que venía
protected
  procedure Mover; override;
// lo que sigue
end;

Este tema puede continuar... y no basta un hilo para explicar todo lo que es POO. Como dije antes... Puedes leer la Cara Oculta de Delphi 4, allí hay un capítulo entero dedicado a POO. Es muy sencillo de entender...

espero haberte ayudado en algo,
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #10  
Antiguo 30-03-2007
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 23
AzidRain Va camino a la fama
Si quieres una solución rápida:

Crea una nueva clase diagamos "TFormTool" del tipo TObject

Crea un método "EnableControl(aComponent:TComponent);

En el metodo EnableControl pones lo que quieras hacer con el componente que le pases.
Guarda la unidad.

Ahora puedes usar este control para manipular cualquiera de las forms que mencionas, solo tendrias que instanciar el objeto antes de abrir cualquiera de las dos forms o bien instanciarlo dentro de cada form. Da lo mismo.

Es decir nuestra clase FormTool podrá manipular forms según necesites sin necesidad de saber que contienen ni de que son.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Como usar los formularios MDI, constructores de componentes Narlohe OOP 3 11-12-2006 10:54:10
¿Cómo crear una DLL con varios formularios? Javi2 Varios 3 25-05-2006 10:35:06
usar botones y etiquetas de flash en los formularios?? nidia Gráficos 1 25-11-2005 01:51:09
Obtener varios registros de Stored Procedure Phacko Firebird e Interbase 6 19-08-2005 17:56:43
CTRL-P en varios formularios magm2000 Varios 2 20-10-2004 09:38:09


La franja horaria es GMT +2. Ahora son las 16:08:35.


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
Copyright 1996-2007 Club Delphi