2009-09-30 21 views
6

Estaba haciendo mi habitual paseo por SO y me topé con algunas discusiones sobre cuadros.¿Cuál es la forma aceptada de usar marcos en Delphi?

soy principalmente un aficionado Delphi y no un profesional por lo que tuvo que aprender cómo utilizar TFrames mi manera bruja es:

  • Crear una TFrame dentro es unidad.
  • Agregue esa unidad a la cláusula de usos de la forma principal.
  • tener una variable privada de tipo de ese TFrame
  • OnCreate del formulario instanciates la TFrame y lo adjunta a un TPanel tanto en la Creación y .parent
  • En una de mis acciones establecido que TFrame.Visible: = True y .BringToFront.

Esta es mi práctica después de una deliberación personal.

¿Qué otras formas se pueden utilizar los marcos?

Respuesta

13

Esa es una forma, y ​​no hay nada de malo en ello. Otra forma, es hacerlo visualmente. Entonces, básicamente puedes agregar el marco a un formulario. para hacerlo:

  • Cree su Marco.
  • Vaya al formulario en el que desea colocar su marco.
  • Agregar un componente Marcos (pestaña estándar)
  • Elija su marco del menú desplegable.
  • Eso es todo!
+3

Este es mi método preferido también, pero en determinadas circunstancias me parece útil crear marcos "a pedido". Especialmente para marcos que se usan como parte de un control con pestañas y que tal vez nunca se muestren. –

+0

@sveinbringsli: sí, ese sería mi pensamiento también. Demasiada pérdida de memoria para crearlos todos si su usuario solo usa uno o dos. –

4

Incluso puede ir un paso más allá, al registrar sus marcos como componentes.

Esto no le permite editar las propiedades de los componentes en el Marco tan pronto como el componente Marco esté en el formulario. Pero creo que eso es algo bueno.

Necesita una cosa más que registrar su marco como componente, como explico en este artículo acerca de Delphi – Frames as visual Components – don’t forget your Sprig!.

Ese conocimiento no es mío: lo obtuve de Ray Konopka durante uno de sus session s en el Delphi Live conference en San José a principios de este año.

1

Esto es más una respuesta negativa, pero probé una ruta que incluía Reparar TFrames para una GUI un poco compleja.

Al principio fue bien, pero cuando la aplicación maduró y más eventos comenzaron a volar, tuve que deshabilitar y luego procesar mensajes durante un tiempo (20ms) antes de cambiar, y aún ocasionalmente tuve bloqueos al cambiar de marco.

Uno de los culpables que finalmente encontré, TPopmenu también se registra en las estructuras de datos globales. Esto redujo los problemas, pero todavía estaban allí, así que me alejé del concepto.

+0

Yeaps, tiene sentido. Si tienes demasiados marcos, algo definitivamente se romperá. –

+0

Es más que existe el riesgo de que los mensajes de Windows para un marco lleguen aunque el marco se haya vuelto a crear. –

5

El único problema con el enfoque es que no se puede agregar varias instancias del mismo marco a una determinada forma:

Frame1 := TMyFrame.Create(Self); 
Frame1.Parent := Self; 
// ... 
Frame2 := TMyFrame.Create(Self); // bombs out with "a component with the name MyFrame already exists" 

La solución para su consiste en asignar un nombre diferente para cada instancia:

Frame1 := TMyFrame.Create(Self) 
Frame1.Parent := Self; 
Frame1.Name := "FirstFrame"; 
// ... 
Frame2 := TMyFrame.Create(Self); // works now, there is no name conflict 
+0

Gracias por la idea. Por lo general, solo necesito un cuadro por funcionalidad, pero sucedería lo suficientemente rápido como para necesitar varias instancias. ¡¡Gracias!! –

Cuestiones relacionadas