|
|
Artículo realizado por
De vez en cuando, serán introducidos anexos de este tipo, que tratarán sobre el tema que se esté exponiendo en ese momento, extraidos de Internet, y que suelen ser de gran ayuda a la hora del aprendizaje de Delphi. Este FAQ (Frecuently Asqued Question) pertenece a Pablo León, y aquí tan solo se ha incluido su trabajo, por lo que cualquier derecho pertenece exclusivamente a él. En este caso que tratamos ahora, es un FAQ sobre los componentes de Delphi, su instalación, su anejo, su reutilización, etc. Tiene un nivel mucho más elevado que el dado hasta ahora, pero estoy seguro de que servirán de referencia para aquellos que profundicen en el tema. A mi componente le sobran algunas propiedades que ha heredado de su antecesor; ¿Como las elimino? ¿Cómo puedo modicar el aspecto de un control estándar de windows? 1.- ¿Cómo crear un nuevo componente? En el menú del delphi, seleccionar Component y luego New. Como Class Name hay que poner el nombre del componente precedido de una T, p.e. TMiNuevoComponente. En Ancestor Type hay que seleccionar el componente del que vas a derivar p.e. TGraphicControl. En Palette Page pon el nombre de la solapa en la que quieres que vaya tu nuevo componente. Si no existe una solapa con el mismo nombre, esta se creará. Al pulsar OK se genera el fichero fuente de tu objeto. Guardalo con un nombre apropiado, que debe ser dirente que el del componente, p.e. MisComponentes.pas En el menú de delphi selecciona Component y luego Install. Con el Botón add, añade el fichero del punto 5. ¡Ya has creado un componente idéntico al Ancestor! Interface
José Antonio Suárez.
Anexo 1
Volver
2.- ¿Cómo añado una propiedad a mi nuevo componente?
type TMarcos = class (TPadre_de_Marcos)
private
published
// He aqui la propiedad
// Esto es un evento
end;
implementation
procedure
tMarcos.SetMarcos(M:string);Un evento es muy parecido a una propiedad, solo que el tipo de la misma es TNoSeCuantosEvent, o sea, tipo función. Si no te vale TNotifyEvent a algun otro ya definido,
tienes que definirtelo tú:
Interface
type T_A_Este_Evento_Le_Paso_Un_Entero_Event = procedure (Sender:TComponent;I:integer) of object;
type T_Este_Objeto_Usa_Eventos = Class (T_Padre)
implementation
procedure T_Este_Objeto_Usa_Eventos.Create(AOwner:Tcomponent);
No puedes eliminaralas. Lo siento. Si te molestan mucho, intenta derivar de objetos más primitivos. Aunque la tentacion sea fuerte NO MODIFIQUES LOS FUENTES QUE VIENEN CON EL DELPHI.
Así:
Interface
type
MiComponente=Class(TComponent);Implementation
procedure MiComponente.WMLBUTTONUP(var Msg:TWMLBUTTONUP);
Interface
type MiEditor = Class(Tedit);
protected
Implementation
procedure MiEditor.CreateParams(var Params:TCreateParams);
Si es como otro componente al que le falta alguna carateristica, pues de ese componente.
Si es parecido a otro componente, y este deriva de TCustomAlgo, prueba con él.
Si es un control de windows entonces de TWinControl puede servir.
Si es un componente que puede tener el foco de windows, de TCustomControl.
Si es un componente que no necesita el foco de windows, de TGraphicControl.
Si es un componente no-visual (no se vé) de TComponent.
Pues...
procedure PonEdit;
Fíjate, que al tener el objeto un padre (propiedad parent), no necesitas liberarlo explictamente (con free), debido a que un padre de windows libera a sus hijos antes de liberarse él.
No confundas un padre con un antecesor: Padre se aplica a los controles de windows, mientras que antecesor se aplica a los objetos de delphi.
(Creado originalmente por Pablo León)
|
|