Tema: crear HELPER
Ver Mensaje Individual
  #2  
Antiguo 08-02-2018
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: May 2003
Ubicación: Bogotá, Colombia
Posts: 748
Reputación: 16
gatosoft Va camino a la fama
Hola juank1971

Supongo que no quieres hacer tu propio componente y registrarlo... así que creo que lo que necesitas es una clase interceptora.. es un concepto "parecido"*** (con muchos asteriscos) al de Helpers.

Mira éste código:

Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type

  //esta es la clase interceptora... "modifica" la funcionalidad del TListbox (que para el caso es el componente que voy a modificar)
  TListBox = class(vcl.stdctrls.TListBox)
  private
    FContador: Integer;
  public
    Function AddContador: Boolean;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox; //aqui defines el TListbox
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TListBox }

//ésta es la implementación de la clase interceptora.. 
function TListBox.AddContador: Boolean;
begin
  inc(FContador);
  Self.Items.Add( IntTostr(Fcontador));
end;

//Aqui el TListbox original.. comienza a utilizar la funcionalidad y variables de la interceptora
procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.addContador;
end;

end.


Se llama interceptora porque se ubica entre la unidad original del componente y la definición de la variable:

Código Delphi [-]
Uses Vcl.StdCtrls

//Clase interceptora
TListBox = class(vcl.stdctrls.TListBox)
end;

//Definicion de la variable
TForm1 = class(TForm)
  ListBox1: TListBox;
private
public
end;


Ésto quiere decir que si defines la clase después, ya no te va a funcionar

Código Delphi [-]
Uses Vcl.StdCtrls

//Definicion de la variable
TForm1 = class(TForm)
  ListBox1: TListBox;
private
public
end;

//Clase interceptora definida despues de la variable (listbox1)
TListBox = class(vcl.stdctrls.TListBox)
end;


también puedes definir la clase en una unidad aparte, por si la vas a utilizar en varios formularios, pero teniendo en cuenta que siga interceptando:


Código Delphi [-]
Uses Vcl.StdCtrls, LaUnidadDeLaClaseInterceptora;

//Definicion de la variable
TForm1 = class(TForm)
  ListBox1: TListBox;
private
public
end;

Espero que te sirva, saludo,
__________________
gatosoft [M.40.co]
Responder Con Cita