Ver Mensaje Individual
  #6  
Antiguo 11-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
Yo lo de usar el .Tag me horroriza.

Cuando usé el .Tag en 3 componentes de un mismo form tenía un cacao mental que ni te cuento. Que si el tag se guardaba esto, en aquel componente significa lo otro...

Si tienes un Form y quieres guardar el estado de la ventana, por poner un ejemplo, aplico el archiconocido KISS (Keep It Simple Stupid )

Código Delphi [-]
type TEstado = (eModal, eNormal);

TForm1 = class(Tform);

public
   property Estado:TEstado read Festado write FEstado;
end;
Ni constantes, ni tags, ni números. Queda claro nada más ver el código, solo hay dos posibilidades "Estado Normal" y "Estado Modal"

Las funciones de clase no las uso mucho, ya que de hecho, cuando se ejecutan aún no existe el objeto en memoria (no se ha creado aún), así que hay que tener cuidado al usarlo.

La herencia visual desde cero. Creas una ventana llamada BaseForm: (file -> New -> Form)
Código Delphi [-]
{-----------------------------------------------------------------------------
 Unit Name: BaseForm
 Purpose:
    - Heredan de TBaseForm todas las ventanas con IDentificador de cada tabla.
    - No usan las variables globales de cada Form.

 History:
-----------------------------------------------------------------------------}

unit UBaseForm;

interface

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

type
  TBaseForm = class(TForm)
  protected
    function GetId:integer; virtual; abstract; 
    procedure SetId(const Value: integer);virtual; abstract;
  public
    { public declarations }
    property Id:integer read GetId write SetId;
  end;

implementation

{$R *.dfm}

end.
Ahora como bien dices, vas a File -> new -> other -> forms -> heredar de (tbaseForm)

La nueva ventana aparece así:
Código Delphi [-]

type
  TfrmCliente = class(TBaseForm)

    function GetId: integer; override;
    procedure SetId(const Value: integer);override;
  public
      { Public declarations }
    property Id;
  end;

Solo queda implementar los métodos en la ventana que toque:
Código Delphi [-]
procedure TfrmCliente.SetId(const Value: integer);
begin
  dscliente.Locate('IDCLIENTE',Value,[]);
end;

function TfrmCliente.Getid: integer;
begin
    Result:= dsclienteIDCLIENTE.AsInteger;
end;

Si tienes 10 ventanas (clientes, proveedores, factura, albaran, productos, ...)
todas heredan de TBaseForm, por tanto ya tiene su propiedad Id.

A lo que voy, crear cualquier ventana e ir a un registro, se simplifica:
Código Delphi [-]
var Forma :TBaseForm
begin
  Forma := TFrmcliente / TFrmFactura / TfrmProductos .Create(Self);
  Forma.ID := 32 // el cliente 32, la factura 32, el producto 32, etc.
  Forma.Show;
end;

Da igual si usas ADO, BDE, MDOLIB, etc

La Forma Base puede tener controles en su interior, pero eso si, no podrás quitarlos en una ventana heredada, por tanto, hay que pensar bien qué llevará un TBaseForm, por ejemplo un Toolbar y el botón "Buscar", el resto de botones del toolbar se pueden añadir después a TfrmCliente.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita