2011-12-05 12 views
9

Estoy usando delphi 7 y estoy tratando de hacer una interfaz de asistente. No sé si existe una manera más fácil de hacer un asistente, así que estaba pensando en crear formularios separados para cada paso del asistente, y cuando el usuario hace clic en "Siguiente", el formulario activo se cierra y se abre el siguiente.haciendo una interfaz de asistente en delphi 7

Aquí hay una captura de pantalla de dos formas sucesivas: screen-shot

He hecho un procedimiento que toma 2 formas como parámetros: la forma que se cerró y el siguiente formulario del asistente

class Procedure Tspad.nextForm(showForm, closeForm: TForm); 
begin 
    closeForm.Close; 
    showForm.Showmodal; 
end; 

al hacer clic en el botón "Siguiente" se ejecuta el código folowing:

Tspad.nextForm(echipContractForm, clientContractForm); 

cuando corro el programa, y ​​pulsar el botón "Siguiente", el siguiente formulario apeare pero el paciente no se cerró.

¿Cómo puedo hacer que esto funcione, o hay otra forma más eficiente de crear un asistente?

+4

Usar TPageControl: http://delphi.about.com/od/delphitips2007/qt/hidepagectrltab.htm – SimaWB

+3

El Proyecto Jedi (JVCL) tiene un componente de asistente llamado [TJvWizard] (http: //wiki.delphi-jedi. org/wiki/JVCL_Help: TJvWizard). –

Respuesta

20

Una forma muy común de hacer un asistente es usar un control de página. Cada página distinta del asistente es una página/hoja de tabla diferente en el control de página. Creo que esto es efectivamente la forma en que Windows implementa los asistentes.

Naturalmente, desea ocultar todas las pestañas. Para ello, establezca TabVisible en False para cada hoja de cálculo. Cuando desee avanzar y retroceder a través del asistente, p. cuando el usuario hace clic en los botones siguiente o anterior, efectúe esto configurando ActivePage o ActivePageIndex dependiendo de su preferencia.

+0

Así es como lo hice en el pasado. Tenga un formulario separado para su asistente, con el control de página y algunos botones. –

+0

estoy de acuerdo con esto, pero también con la idea de LaKraven de crear un formulario por página y acoplar las páginas en tiempo de ejecución. De lo contrario, los magos tienden a convertirse en una bola gigante de espagueti. –

+0

@Warren LaKraven en realidad está sugiriendo marcos en lugar de formas y supongo que los acoplaré en el momento del diseño. Pero de cualquier manera funciona y puede ser una muy buena técnica para mantener el spaghetti a raya, estoy de acuerdo. –

14

Una buena práctica para la división de contenido que se muestra en una sola forma es el uso de Marcos.

Un marco se parece mucho a una forma, excepto que no tiene ninguna ventana de su propia, sino que más bien se encuentra dentro de un formulario anfitrión.

Cuando se combina con (como David Heffernan ha sugerido) un TPageControl o incluso un TNotebook (que es bastante-mucho exactamente lo mismo que TPageControl, sólo que no tiene aquí, para empezar), que terminan con un asistente fácil de mantener.

+2

+1 pero 'TNotebook' es un poco extraño. Me parece heredado y tal vez sea un poco más difícil de usar. –

+0

Lo menciono porque no recuerdo si TPageControl realmente existe en Delphi 7 (lo uso mucho en estos días, pero no recuerdo haberlo visto alguna vez alrededor de Delphi 7) – LaKraven

+2

Sí, estaba presente en D7 y mucho antes también –

2

Puede probar algunos componentes que pueden ayudarle con esta tarea (utilizando internamente tPageControl o TNotebook). Ver this link.

Atentamente.

11

JVCL tiene un buen control para hacer un asistente de una manera muy simple y efectiva (TJvWizard). Ver http://jvcl.delphi-jedi.org/

+0

De acuerdo. Le ahorra mucho tiempo reinventando la rueda. –

0

También puede considerar TMS TAdvSmoothStepControl (¡no es gratis!). Otra solución, pero solo 'externa' a su programa, es usar Inno Setup para hacer un asistente, incluso para propósitos de 'instalación no instalada'.

De hecho, con Inno Setup puede pensar un montón (modificar el archivo .ini y el registro, iniciar/detener programas ...) que pueden ser útiles para un asistente sin "instalar" un programa.

+1

La última declaración en su respuesta supone que el OP intenta producir un Asistente de instalación. Las capturas de pantalla sugieren lo contrario. Sugiero editar esa parte de su respuesta y dejar la recomendación de TAdvSmoothStepControl (que es un buen componente seguro) – LaKraven

+0

@LaKraven Si bien el uso principal de Inno Setup es crear una configuración de instalación, también puede usarla (con algún truco) como un asistente para operaciones simples, como cerrar un programa, cambiar los archivos .ini según las opciones del usuario y ejecutar el programa nuevamente. Puede ser que no está claro para todos y voy a editar mi respuesta. – philnext

Cuestiones relacionadas