Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-02-2018
juank1971 juank1971 is offline
Miembro
NULL
 
Registrado: feb 2008
Posts: 129
Poder: 11
juank1971 Va por buen camino
crear HELPER

Hola tengo esta clase que me funciona bien

Código Delphi [-]
 TTPopupBoxMy = class (TPopupBox)
      private
       aCam_id: array[1..100] of integer;
      function GetCam_id(i:integer): integer;
      procedure SetCam_id(i,id:integer);
      procedure Agrega(s:string;idC:integer);
   end;

estoy usando firemonkey con delphi 10.2 quisiera poder incluir esas funciones con un helper para el componente TPopupBox
lo que estoy necesitando es poner el cam_id de una tabla en cada item tle TPopupBox con esta clase heredada lo logre pero tengo el problema de que para trabajar con ese componente TTPopupBoxMy heredado, hay que crearlo en runtime, hay que darle las propiedades margenes, tamaño etc, y es incomodo trabajar con el crandolo en runtime e instanciarlo y referenciarlo por el nombre etc, etc, es mejor poner un helper en el componente oridinal y usar sus propiedades, y asi poder ajustar en tiempo de diseño todo el componente.

He buscado en la ayuda y en internet y todos los ejemplos de helpers que encuentro tanto en clases como en tipos de delphi
no usan variables solamente funciones que usan las variables del componente padre.

por ejemplo de un libro de marco cantu veo esto
Código Delphi [-]
TListboxHelper = class helper for TListBox
   function ItemIndexValue: string; 
end;

o esto otro que tambien abunda en internet
Código Delphi [-]
TIntHelper = record helper for Integer
function AsString: string;
end;
pero lo que necesito es el helper para la clase heredada que puse primero o sea no crear nuevas funciones o procedimientos a una clase sino tambien crearle o un arreglo de enteros para guardar los id por cada item o una variable entera para cada item.
me ayudan ??
gracias
Responder Con Cita
  #2  
Antiguo 08-02-2018
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
NULL
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 760
Poder: 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,
Responder Con Cita
  #3  
Antiguo 08-02-2018
juank1971 juank1971 is offline
Miembro
NULL
 
Registrado: feb 2008
Posts: 129
Poder: 11
juank1971 Va por buen camino
ok gracias lo pruebo y te cuento gracias por responder
Responder Con Cita
  #4  
Antiguo 08-02-2018
juank1971 juank1971 is offline
Miembro
NULL
 
Registrado: feb 2008
Posts: 129
Poder: 11
juank1971 Va por buen camino
ya lo probe, funciona muy bien
aqui estaba mirando otra idea https://stackoverflow.com/questions/...ion-on-android

pero la tuya es mas limpia y completa sirve para muchas cosas. Gracias por compartir.
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
Delphi 7 Crear programa para crear conexión BDE Rockardo777 Varios 10 31-08-2017 12:45:31
Crear un COM jars Providers 1 02-03-2011 16:27:25
crear instalador, ejecutar al iniciar i crear desinstalador vivamotos C++ Builder 1 25-08-2006 15:13:01
Crear un PDF? danytorres Varios 0 12-07-2004 18:08:10
Crear BD cpal Firebird e Interbase 5 08-03-2004 17:11:01


La franja horaria es GMT +2. Ahora son las 06:01:36.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi