Creacion de ventanas en Radus
#1
Escrito 26 marzo 2012 - 06:49
Mi Nombre es Luis Roldan, de Mar del Plata, Argentina.
Soy integrante del club de delphi y hace poco me inscribi aqui y este es mi primer mensaje.
Uso como herramienta D2007 e Interbase. Ahora compre DXE2. El tema de ahora es que estoy haciendo una aplicacion que es una extencion de una prog. escrito en D5 y lo estoy haciendo en Radus. Por ahora todo bien, algunos contratiempos pero los fui superando sin problema. Bien, ahora lo que no puedo hacer es dentro de una ventana secundaria , abrir otra ventana, la cual me muestre de una tabla datos para insertar en la ventana principal. Es decir un buscador. Cuando intento hacer la apertura, esta no se abre. La pregunta es se puede abrir una ventana, que ya fue llamada de otro formulario, otra ventana? se entiende?
Gracias
Luis Roldan
Mar del Plata
Argentina
#2
Escrito 26 marzo 2012 - 08:09
Bienvenido amigo chaja.
Pronto vendrán los que saben de Radus, paciencia.
Saludos
#3
Escrito 27 marzo 2012 - 06:28
El problema creo que viene de usar Form.ShowModal en lugar de Form.Show o Form.ShowModalNonBlocking, prueba con las dos formas a ver si consigues que te funcione, pero si haces un .ShowModal, hasta que no se cierre esa ventana no hay nada que hacer.
#4
Escrito 27 marzo 2012 - 09:25
bueno gracias por tu tiempo. Te cuento que desde lel form principal llamo a la pantalla secundaria asi:
procedure TRaFormPrincipal.btContratistasClick(Sender: TObject); begin Application.CreateForm(TRaFormContratistas, RaFormContratistas); // removed from FormsDynamicExe.dpr //fmForm2.wForm2.Left := wForm1.Left + 40; //fmForm2.wForm2.Top := wForm1.Top + 40; RaFormContratistas.WContratista.Show; // RaFormContratistas:=TRaFormContratistas.Create(Self); // RaFormContratistas.WContratista.Show; end;
luego dentro de esta ventana llamo a la otra asi
procedure TRaFormContratistas.btBuscarClick(Sender: TObject); begin Application.CreateForm(TRaFormBuscador, RaFormBuscador); // removed from FormsDynamicExe.dpr //fmForm2.wForm2.Left := wForm1.Left + 40; //fmForm2.wForm2.Top := wForm1.Top + 40; RaFormBuscador.WBuscadorContratistas.Show; end;
en las propiedades de ambos formulario la opcion Modal es False.
Luis Roldan
Mar del Plata
Argentina
#5
Escrito 27 marzo 2012 - 12:47
Te lo digo porque en los RaSt para moviles creo que solo podia existir un Form, así que tras un form.create debes "matar" al form origen, por lo que se pierden las variables locales y sueles necesitar de una unidad tipo DataModule compartida por todos tus forms (antes de llamar el primer form, en la propia aplicacion, creas un form datamodule y le asignas una variable definida a nivel de proyecto -todo esto es editando el codigo del proyecto- de forma que desde cualquier form exista una variable "base" con tu datamodule) donde almacenes estas variables para que se "pasen" de un form a otro el estado de la aplicación.
Los otros dos tipos de componentes son mas tipo ventanas, y te permiten tener varios forms en pantalla, pero en ese caso, el último form.show quizás debería ser un form.showmodalnonblocking; para que no se pueda abandonar el form de busqueda sin cerrarlo antes.
#6
Escrito 27 marzo 2012 - 12:54
En especial, si utilizas RaVCL (que no creo, RaExt es más completo a fecha de hoy) mirate el ejemplo de la base de datos de peces, permite compilar para windows o como aplicacion raudus.
#7
Escrito 27 marzo 2012 - 09:32
Los otros dos tipos de componentes son mas tipo ventanas, y te permiten tener varios forms en pantalla, pero en ese caso, el último form.show quizás debería ser un form.showmodalnonblocking; para que no se pueda abandonar el form de busqueda sin cerrarlo antes.
He estado mirando y el comando form.showmodalnonblocking no me aparece como opcion estoy usando las ext.
Luis
#8
Escrito 28 marzo 2012 - 04:08
Si miras, cada Form es como si "ocupase todo el navegador" y por eso lleva dentro un TRaExtWindow con los componentes de verdad pegados dentro: Este RaExtWindows sería la ventanita que tu quieres mostrar o ocultar, NO es el Form completo el que hace el show (piensa en el form como algo que ocupa todo tu navegador, no puedes mostrar 2 forms a la vez en un navegador).
Fijate que cada form lleva dentro como primer componenete pegado esto:
TfmForm2 = class(TRaForm)
wForm2: TRaExtWindow;
Asi, tras crear un Form2 del tipo TfmForm2, lo que haces no es Form2.Show, haces un Form2.wForm2.Show, de esta forma:
procedure TfmForm1.RaExtButton1Click(Sender: TObject); var fmForm2: TfmForm2; begin Application.CreateForm(TfmForm2, fmForm2); fmForm2.Modal:= true; fmForm2.wForm2.Left := wForm1.Left + 40; fmForm2.wForm2.Top := wForm1.Top + 40; fmForm2.wForm2.Show;
De todas formas, si tu form2 es una ventanita de busqueda, no tienes que dejar que el usuario "salga" de esta ventana hasta que no termine de buscar, asi que el form2 debería tener la propiedad "Modal" puesta a true. Con esto mas el código de arriba creo que ya te debería funcionar a la perfección.
Te repito que todo lo que quieras hacer con raudus esta mostrado en algún ejemplo, abrelos todos, uno a uno, compila y mira lo que hace, aprenderas mucho y tendras recursos para solucionar cosas como esta que te surjan (y ahorraras mucho tiempo a la larga).
#9
Escrito 28 marzo 2012 - 09:36
ahora si vos qures hacer una tercera ventana? no te deja , al menos no lo pude hacer.....
Luis Roldan
#10
Escrito 01 abril 2012 - 02:30
El sistema que te puse arriba sirve para abrir todas las ventanas que quieras una detrás de otra, pero fíjate que mi código hace la segunda ventana modal antes de mostrarla, y eso quiere decir que hasta que esa ventana no se cierre, no se puede abrir ni pasar el control a ninguna otra ventana. La añadí pensando que eso es lo que querías al ser una ventana de busqueda, pero si no era eso, elimina esa linea y podrás seguir abriendo otras ventanas sin cerrar esta antes.
También puede estar pasándote que intentes crear una segunda ventana con el mismo nombre de objeto -el segundo parámetro al crearla- y eso también te daría un error de que ya existe un objeto con ese nombre (el mensaje de error nos habría dado la clave).
Si esto no te ayuda, tendrás que dar un poco más de información sobre porqué no te deja (a mis clientes de toda la vida les suelo responder a eso ¿esta tu ordenador encendido? anque mis socios dicen que es poco profesional, pero no puedo resistirme algunas veces )