PDA

Ver la Versión Completa : Diseño de componentes


vichovi
19-05-2003, 14:23:19
Hola a tod@s:

Estoy diseñando un componente y necesito utilizar la propiedad perform (o el sendmessage) del control que estoy creando para dar cierta funcionalidad, pero la propiedad perform no esta disponible. :confused:

El control es descendiente del TListBox y necesito hacer la siguiente llamada:

Perform(LB_FINDTEXTEXACT,.....)

Para que me busque una determinada cadena en los items del ListBox.

Agradeceria que me echaran una mano.

Un saludo.

__marcsc
19-05-2003, 14:34:13
Hola,

solo un pequeño comentario, Perform no es una própiedad, sinó un método.

Para utilizar el Perform prueba esto:

TControl(TuObjeto).Perform(loquesea)

Aunque esto en teoría no sería necesario dado que perform es un método público de la clase Tcontrol que en teoría tu heredas con tu propio control...

Sinó hazlo con un SendMessage

SendMessage(TuControl.Handle, lo que sea)

Aunque esto último puede que no te funcione con según que controles dado que no todos disponen de la propiedad Handle.

Suerte.

vichovi
20-05-2003, 09:55:03
Hola marcsc:

He probado lo que me dijiste y no hay manera, no esta disponible el metodo (;) ) perform. El codigo era el siguiente:

procedure TListBoxSpecial.SetScroll(WithScroll:boolean);
begin
self.perform(LB_SETHORIZONTALEXTENT, 300, 0);
end;

Con tu ayuda:

procedure TListBoxSpecial.SetScroll(WithScroll:boolean);
begin
tcontrol(self).perform(LB_SETHORIZONTALEXTENT, 300, 0);
end;


Pero sigue sin dejarme utilizar el perform.

Por favor echame una manita. Un saludo y gracias.

(Perdon a todos por no haber posteado al foro correcto, espero que no volvera a ocurrir)

Bacterion
20-05-2003, 12:03:05
Revisa la herencia de tu componente, porque el TListBox tiene (heredado de TControl, como bien ha dicho marcsc) dicho método.
Puede comprobarlo pegando un TListBox e intentando invocarlo:

ListBox1.Perform( etc...

o mirando en la Ayuda del TListBox, opción Methods.

vichovi
20-05-2003, 14:12:45
No hay manera de utilizar el perform, es mas ahora instalo el componente y me dice que el componente se ha instalado y no aparece por ninguna parte (sin embargo el resto de componentes que estan el el mismo Package se instalan sin problemas :eek:)

Hace poco k empece con el tema de creacion de componentes asi k ni idea de porque me ocurre esto :confused:


Alguna idea???

Si quieres las fuentes del componente, aunque es poco codigo (casi nada) te la paso.

Un saludo.

delphi.com.ar
21-05-2003, 01:21:21
Porqué no nos cuentas un poco mas de este componente, por ejemplo de que clase lo has heredado. Sino mándanos algunas partes del código, por ejemplo la interface con todas las definiciones.

Saludos!

vichovi
21-05-2003, 08:52:51
Estas son las fuentes completas:

unit ListBoxSpecial;

interface

uses
Windows, Messages, SysUtils, Classes, QControls, QStdCtrls;

type
TListBoxSpecial = class(TListBox)
private
{ Private declarations }
FScroll:boolean;
procedure SetScroll(WithScroll:boolean);
protected
{ Protected declarations }
public
{ Public declarations }

published
{ Published declarations }
property Scroll:boolean read FScroll write SetScroll;
end;

procedure Register;

implementation

procedure TListBoxSpecial.SetScroll(WithScroll:boolean);
begin
self.perform(LB_SETHORIZONTALEXTENT, 300, 0);
end;

procedure Register;
begin
RegisterComponents('Componentes', [TListBoxSpecial]);
end;

end.


La idea es crear un listbox con una barra de desplazamiento horizontal.

Un saludo.

delphi.com.ar
21-05-2003, 15:31:24
El problema es que estas utilizando los componentes Cross-Platform, y estos carecen del método Perform. Si querés solucionar tu problema, y ese componente solo lo vas a utilizar en windows, en lugar de utilizar las units QControls y QStdCtrls, debes utilizar Controls y StdCtrls.

Saludos!

vichovi
21-05-2003, 23:22:43
Ahora si, casi todo va a las mil maravillas, porque el componente lo habia registrado y aparece el control instalado, pero no aparece en la paleta de componentes.

Intentare echarle un rato a ver si doy con la tecla (acepto sugerencias ;) )

Gracias a todos por todo.
Un saludo.

delphi.com.ar
21-05-2003, 23:35:03
Si vos decís que está registrado, por defecto tiene que aparecer en la paleta "Componentes", si no aparece te podés fijar si aparece en la opción del menú View\Component List, otra opción es que esté invisible o en otra paleta, para ver esto, hacé click derecho sobre las paletas de componentes, entra a la opción "Properties" del menú que aparece, en pages selecciona [All] y ahí podés buscar tu componente en la lista, en la última columna dice en que paleta se encuentra y si está invisible muestra [Hidden], solo tenés que oprimir el botón Show o arrastrarlo hasta la paleta en que lo quieras alojar.

Saludos!

vichovi
22-05-2003, 14:33:31
El nuevo componente no aparece por ninguna parte, lo que estoy haciendo es introducir un ListBox normal, muestro el Form como texto y modifico el objeto ListBox por mi ListBoxSpecial, despues de unos pocos retoques todo anda de maravilla (estoy seguro de que esta instalado)

¿Puede estar corrupto el fichero "dclusr.dpk"?

Cuando lo instalo, instalo ademas otro componente, este se instala sin problemas pero mi ListBoxSpecial no aparece no de coña :rolleyes:

Esto solo me ocurre en el ordenador del trabajo, ya que en casa instalo el componente y va a las mil maravillas (aparece en la paleta "Componentes")

Un saludo y gracias.