![]() |
Cambiar nombre por defecto en componentes
Cuando creamos una nueva clase de componente, digamos
Código:
type Creo que alguna vez vi como redefinir este comportamiento para que el nombre por defecto sea otro. Particularmente me gustaría que se llamaran igual que su ancestro: Edit1, Edit2, Edit3, etc. aunque bien podría ser cualquier otro formato. Ya me sumergí en el VCL pero no logro encontrar el método qe hay que sobreescribir. ¿Alguien lo sabe? // Gracias |
Me parece haberlo visto o leído alguna vez, pero no recuerdo donde. Lo buscaría por el lado del IDesigner de la clase TCustomForm, o alguna superior. Supongo que tiene que venir por el lado de los editores de propiedades porque en tiempo de ejecución, cuando creas un componente este se crea sin nombre.
PD: Observa el código de TReader.ReadComponent Saludos! |
Gracias!
Ya busqué un poco aunque sin mucho éxito. No estoy seguro de que el Reader tenga que ver pues al momento de insertar una componente en tiempo de diseño no estamos leyendo las componentes. Pero voy a buscar esto del IDesigner. // Saludos |
Cita:
PD: Si tengo un tiempito extra, lo voy a investigar ;) Saludos! |
Cita:
No, de verdad no vayas a desgastarte ya que es sólo un pequeño "gusto" que me quiero dar. Busqué un poco de IDesigner pero la única referencia que encontré en el código de la VCL es en la unidad Forms.pas: Código:
type Código:
type De ser así pues veo pocas esperanzas ya que me hubiera gustado que esto fuese una habilidad de la componente y no tener que escribir una de las interfaces del IDE, cosa que se puede pero además de ser un tema que prácticamente no conozco, se me hace como matar una pulga no ya con un misil sino con una bomba de plutonio. Claro que podría lograr lo que quiero sobreescribiendo el método SetName de la componente (ya lo probé) pero tendría entonces que manejar yo mismo la auto numeración de los nombres, verificar que no entren en conflicto con otras componentes, etc. Bueno, si sabes de algo interesante soy "todo oídos" o mejor dicho, "todo ojos". // Saludos |
En este momento estoy metido en un emborllo, así que no creo llegar para las 5:00... Además... ¿Horario de que lugar del mundo estamos hablando? :D
En Delphi 5 no existe la interface IDesignerHook, pero como interesante tengo una interface IDesignNotification con los métodos ItemInserted, ItemDeleted y ItemsModified pero creo que la implementación esta en algún paquete compilado como dsnide50. Desde ya te adelanto que no vas a encontrar el código de muchos editores de propiedades, las implementaciones de muchas clases e interfaces. Recuerdo hace unos años pedir a borland el código del TInspListBox (El object inspector) :D, a lo que me respondieron: Cita:
Esta prueba no funcionó: Código:
type |
¿Te parece algo tan barato como esto?
Código:
unit WctlformX; Te comento que estube probando: 1 > Crear clases heredadas de TWinControlCustomModule y TWinControlForm, pertenecientes a la unit Wctlform que está compilada en el dsnide*.bpl, por lo que pude ver muy por debajo, estas son las clases de los forms que utiliza el IDE cuando creas en tiempo de diseño un TCustomForm o un TCustomDataModule. Estas clases implementan la interface IDesignerHook, el problema es que no encontré como registrarlas para probarlas. Si te interesa te paso el código. 2 > Probé crear una clase: Código:
TIdeFormNotifier = class(TNotifierObject, IOTAFormNotifier, IOTAIDENotifier) Bueno te dejo esas inquietudes, ya que solo las probé muy por encima, si verdaderamente te interesa y crees que esta pueda ser otra solución (yo no creo que venga por ahí, hay que buscar qué método de que clase es el que da los nombres), esta en tus manos seguir investigando. Saludos! |
La franja horaria es GMT +2. Ahora son las 13:05:11. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi