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 01-03-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
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
  #2  
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
  #3  
Antiguo 02-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Exacto, es así.

En el caso de que algún heredero de TMiform deba hacer algo distinto en el procedimiento Habilita, puedes redefinir su comportamiento así:
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);
  protected
     procedure Habilita(Edit: TEdit); override;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation
{$R *.dfm}

procedure TForm2.Habilita(Edit:TEdit);
begin
   inherited Habilita(Edit);  // llama a TMiForm.Habilita
   // hacer algo más
end;

end.

La diferencia con tu codigo es la línea donde pone override. Es una directiva que significa "sobreescribir", es decir, ahora el TForm2 tiene su propio método Habilita, que llama a TMiForm.Habilita y además puede añadirle alguna funcionalidad extra.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 02-03-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
joHn je@N, respondiendo a tu pregunta:

Cita:
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.
Mirate la Cara Oculta de Delphi 4. A pesar de ser ya una versión obsoleta, los principios y fundamentos que menciona Ian en su libro siguen siendo vàlidos hasta el día de hoy. Es un buen libro que recomiendo. Vete directo a la página 62... alli encontrarás lo que buscas.

Si tienes dudas no dudes en preguntar,
Saludos
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 03-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
Thumbs up Bueno

Delphius te agradezco que acudas a mi llamado. Lo voy a leer y te diré mis dudas si es que surgen algunas. Por lo pronto te doy las GRACIAS.

A lo que dice Lepe con override; e inherited habilita();
creo que es un claro ejemplo de la implementación del Polimorfismo en Delphi.

SALUDOS
Responder Con Cita
  #6  
Antiguo 03-03-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por joHn je@N
creo que es un claro ejemplo de la implementación del Polimorfismo en Delphi.
Eso mismo...
En la cara oculta vas a encontrar una sección entera dedicada a lo que hace POO, pero por lo que leo... puedo decir que manejas el concepto.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
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
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 21:46:49.


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