Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Añadir un método a un objeto TCombobox (https://www.clubdelphi.com/foros/showthread.php?t=89283)

Sera 28-10-2015 17:51:31

Añadir un método a un objeto TCombobox
 
Hola,

Estoy empezando con Lazarus y tengo dudas en como hacer algunas cosas.
Quiero añadir un método a un objeto basado en TCombobox que tengo en un formulario. Sería solo para ese objeto en particular.
He intentado crear una subclase y basar el objeto en esa subclase pero el compilador indica errores.

¿Como puedo hacer esto?

Gracias de antemano

AgustinOrtu 28-10-2015 18:04:40

Bienvenido.

Deberias poner el codigo y el error que te arroja el compilador

Lepe 28-10-2015 19:22:47

Lazarus y subclases... me lo pones difícil.

Hasta donde yo sé, prueba una clase interpuesta:

Código Delphi [-]

uses Combobox; // o la que sea jejej

class TxComboBox = class(TCombobox)
public
   procedure MioMio(UnValor : string);
end;

TForm1 = class(TForm) // la definición del Form que pone delphi
   Combobox1: TCombobox ; // sí, lo mismo que pone delphi.
   ...
end; 


implementation

procedure TxComboBox.MioMio( UnValor : string);
begin 
  ShowMessage( UnValor ); 
end;


// ya en un procedimiento de tu Form
Procedure TForm1.HacerLoquesea; 
begin 
  //moldear el combobox como si fuera un TxComboBox.
  TxComboBox(Combobox1).MioMio('hola');
end;

Si no te vale, pues lo dicho por AgustinOrtu, pon tu código e indica el error que dá.

Saludos!

Sera 28-10-2015 19:25:02

Hola,

Vaya, ahora intentado reproducir el error va y funciona. Creo que estaría haciendo algo mal.
De todas formas quisiera aclarame con esto.

Aquí el código del .pas
Código Delphi [-]
type

    { TDispositivosCmd }

    TDispositivosCmd = class(TComboBox)
      public
      procedure CargarDispositivos;
    end;

  { TMainForm }

  TMainForm = class(TForm)
    CerrarBtn: TButton;
    DispositivosCmb: TDispositivosCmd;
    //DispositivosCmb: TComboBox;
    DispositivosLbl: TLabel;
    PerfilesLbl: TLabel;
    LeftPanel: TPanel;
    ListBox1: TListBox;
    RightPanel: TPanel;
    procedure CerrarBtnClick(Sender: TObject);
    procedure DispositivosCmbChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

Y este el del .flm

Código Delphi [-]
  object DispositivosCmb: TDispositivosCmd
    Left = 324
    Height = 23
    Top = 40
    Width = 325
    ItemHeight = 15
    OnChange = DispositivosCmbChange
    Style = csDropDownList
    TabOrder = 1
  end
La idea es personalizar el objeto para este Form, incluso con sus propias propiedades.
El caso es que preferiria personalizar el objeto directamente en lugar de usar una subclase.

Gracias

AgustinOrtu 29-10-2015 00:16:20

Tenes un par de opciones:

1) Para poder agregarlo a un form tenes que crear un componente; es la forma en la que delphi trabaja con los controles en tiempo de diseño. Si no te salen errores "raros". O la otra alternativa, es que creas el componente en runtime (mediante codigo, no con el diseñador RAD)

2) Usar un class helper, aunque no se si esto esta implementado en FPC

3) Como comento Lepe, casteas la instancia en tiempo de ejecucion para acceder a los metodos de tu clase, ya que siguiendo las reglas basicas de la herencia, un TDispositivosCmd es un TComboBox. Pero es necesario que mantengas la declaracion del componente que referencia el form como TComboBox, y tambien el archivo .flm debe conocer un TComboBox

Sera 29-10-2015 10:06:08

Echaré un vistazo a las Class helper, para tener más opciones.

Gracias por vuestras respuestas.


La franja horaria es GMT +2. Ahora son las 14:06:53.

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