2009-02-26 16 views
6

De vez en cuando, cuando estoy retocando las clases de mi TFrame (agregando propiedades, métodos, etc.), el IDE se confunde y actúa como si pensara que el marco es una forma, completar con encabezado/título, bordes, etc. Sin embargo, claramente la clase se declara como un descendiente TFrame. ¿Alguna idea sobre qué causa esto, cómo prevenir y cómo solucionarlo?Delphi IDE tratar TFrame como si fuera un Formulario

Estoy usando Delphi 2007 Pro. También tenga en cuenta (si es importante), los descendientes de TFrame generalmente se registran con el IDE (es decir, en la paleta) a través de un paquete de tiempo de diseño.


después: "detalles adicionales": El cuadro que estoy teniendo este problema en este momento es, visualmente, una TFrame muy básico (sólo cambian de nuevo TFrame es el tamaño y el color de fondo).

Aquí es su declaración de la clase:

TBasePanel = class(TFrame) 
    private 
    FPanelManager: TPanelManager; 
    procedure SetPanelManager(const Value: TPanelManager); 
    protected 
    procedure Connect; virtual; abstract; 
    procedure Disconnect; virtual; abstract; 
    procedure Refresh; virtual; 
    procedure Requery; virtual; abstract; 
    published 
    property PanelManager: TPanelManager read FPanelManager write 
     SetPanelManager; 

Esta trama se utiliza como clase base para una serie de otros. Normalmente lo estoy editando directamente desde el proyecto BPL al que pertenece (porque todos estos cuadros se instalan en la paleta), en lugar de como parte de un proyecto EXE, con las Formas relacionadas abiertas, etc.

Además, "Diseñador incorporado" está marcado en Herramientas -> Opciones.

Estoy guardando todos los archivos DFM como texto en lugar de binario (si eso no importa).

+1

Apenas una actualización en esto: La respuesta parece ser una combinación de la respuesta de birger continuación, además de la creación de una "clase de marco base" que no tiene cambios desde el TFrame normal ya continuación se hereda de que antes de agregar propiedades, métodos, etc. Parece que estabiliza la transmisión de herencia de alguna manera. – Jamo

Respuesta

8

He encontrado el mismo problema. Los siguientes pasos resolvieron el problema para nosotros, sino que también podría funcionar para usted:

  1. en el IDE: cierre todas las formas que utilizan el marco
  2. abrir el marco, vista como texto (* DFM)
  3. el DFM probablemente se inicia con MyFrame objeto: TMyFrameClass
  4. cambio a este MyFrame heredada: TMyFrameClass

no sé qué causó el problema.

+0

Esto parece funcionar en las clases ancestros, pero todavía tengo problemas a veces con la clase "raíz" (la que desciende de TFrame). Ese "Primero" uno DEBE ser "objeto", ¿verdad? – Jamo

+0

no estoy seguro, en el proyecto en el que he tenido este problema, todas las tramas comienzan con 'MyFrame heredada: TMyFrame'. El primer descendiente de TFrame que usamos no tiene un DFM, por lo que no puede comprobar lo que debería ser en el DFM allí. – Birger

+0

¡Interesante! No había pensado que ese "primer" descendiente de TFrame fuera uno sin un DFM en conjunto. Eso podría eliminar los problemas de "base TFrame" que sospecho. Hmmm ... Gracias por esa información. ¡Experimentará con este enfoque! – Jamo

0

Por lo que yo sé, tiene que tener tanto la forma como el marco abiertos en el editor cuando edita el marco. De lo contrario, puede haber problemas de actualización. Aunque no he visto este.

Pero renuncié a los marcos hace mucho tiempo porque no los encontré muy confiables.

Ahora mismo solo los utilizo para la creación de prototipos, creando un componente personalizado (derivado de un panel con los controles apropiados sobre él).

1

Tal vez había desmarcado la casilla de verificación 'Diseñador incrustado'? (Herramientas | Opciones | Opciones de entorno | Diseñador de VCL). Entonces, de hecho, su marco se muestra en el momento del diseño como un formulario (con leyenda, borde, etc.). También sería útil un código concreto de su problemático descendiente TFrame o más detalles sobre su caso.

0

You may have to register custom module to the IDE Pero sus propiedades adicionales no funcionarán bien a menos que estén en la clase ancestro.

+0

¿Todavía necesita hacer esto, incluso si todo el componente basado en el recuadro se registra a través de un paquete de diseño? Se muestra en la paleta muy bien, y las propiedades publicadas aparecen en el inspector. "Pierde su comportamiento de marco" pero eso es realmente lo que quiero. No sigue lo que hace esto. – Jamo

+0

No se trata de registrarlo como un componente regular. Es posible que deba registrar un módulo personalizado para obtener un comportamiento específico del diseñador adecuado. Todavía no estoy seguro porque cómo ide maneja Tframe en el tiempo de diseño no es transparente para los programadores. Pero vale la pena intentarlo en mi opinión. – Serguzest

0

Me he encontrado con muchos problemas con TFrame y finalmente llegué a una solución que resuelve todos mis problemas: creo y diseño marcos visualmente, pero los uso solo por codificación manual.

Como efecto secundario mis aplicaciones se hicieron más pequeños, debido a la menor DFM-s.

Cuestiones relacionadas