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 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
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
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 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