PDA

Ver la Versión Completa : Añadir un método a un objeto TCombobox


Sera
28-10-2015, 17:51:31
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:



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

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.