![]() |
mostrar y ocultar frames
Muy buenas gente!!
Os comento: Estoy desarrollando una aplicación la cual en un mismo área deben mostrarse diversas cosas según la elegida, es decir, a la izquierda tengo un menú que carga a la derecha diferentes opciones, esto lo intento hacer mediante frames. Creo los diferentes frames con todos sus componentes, hasta aquí todo correcto. Lo que no consigo hacer es lo siguiente: El menú costa de varios apartados "configuración, eventos, etc..." cada frame creado anteriormente se corresponde a cada boton de este menú, es decir, tengo un frame que debe verse cuando haga clic en configuración... otro para eventos.. etc. etc. El problema está aqui, puesto que no se de que forma hacer para mostar y ocultar estos frames segun el boton pulsado. No se si... tendré que meterlos y tener que ir ocultando y mostrando... o usar .create para cargarlo o como. Lo unico que he conseguido hasta el momento es crear un frame en tiempo de ejecución pero claro, eso no es lo que yo quiero, porque los frames ya los tengo hechos solo quiero mostrarlos y ocultaros segun la necesidad. Perdonen mi torpeza... y muchisimas gracias desde ya :) Saludos |
¿Has probado la forma más natural (a mi entender) de hacerlo?
(1) Crea los Frames que ncesites. (2) Colocalos en la paleta de componentes. Una vez en tu formulario: (3) Coloca todos los frames y utiliza la propiedad Visible del Frame para mostrar uno u ocultar los otros segun apartados (configuración, eventos, etc...) que estés seleccionando. O tal vez es que no he entendido la pregunta... (tb es probable:D) |
Cita:
// Saludos |
Cita:
Como bien dices un Frame y un Form son muy parecidos; Tal vez la diferencia (ventaja) más significativa del Frame sea que éste se puede colocar en la paleta de componentes y utilizarlo como tal. Eso implica que se pueda colocar en diseño en el form como otro componente más. A mi entender la única ventaja (por que inconvenientes tiene unos cuantos) del Frame respecto al from es esa. ¿Pero si no la utilizamos qué ventaja tiene utilizar el Frame? O lo que es lo mismo, Si el Frame lo voy a crear en ejecución, ¿porque no crear un Form directamente y "dockarlo" (que mal suena esto) en el sitio en lugar del Frame? No se si me expliqué bien... |
Buenas!
Muchas gracias por responder.... Usando la propiedad visible ya habia probado pero pensaba que los frames daban otra forma de poder hacerlo y de ahí era donde venia mi pregunta. Sin mas lo haré usando la propiedad visible y ya está, supongo que entendí de forma equivocada el concepto de frame. Cita:
Mil gracias de nuevo. |
Por la pequeña descripción que pones yo casi casi usaria forms, pero claro, es una cuestion filosófica mas que practica.
Desde el punto de vista práctico te recomiendo la creación dinámica en lugar del hide/show por un simple ahorro de "handles", si ves que puedes llegar a tener muchas cosas (lease memos, buttons, etc, cualquier cosa que no sea un label consume al menos un handle) creadas, aunque no estén visibles, consumen recursos. Ahora la guerra frame/form ... según mi punto de vista (el de un ex-delphiero :/) los frames vienen a sustituir a la programación de componentes, dado que es un coñazo el recompilar y redistribuir los componentes en los distintos puestos de desarrollo. Es decir, yo usaria frames para grupos de componentes con una utilidad añadida, como por ejemplo un edit con calculadora (aunque ya esté hecho) una seria de edits con botones y validaciones ... es decir: cosas "pequeñas" reutilizables (o con un código que queremos aislar) = Frame cosas "grandes" = form Aunque claro, yo ya, desafortunadamente, no uso Delphi... |
Cita:
Por ejemplo, normalmente uso un frame para agrupar un Edit y un DBLookupComboBox de manera que el usuario pueda seleccionar un valor ya sea mediante el combo o escribiendo directamente su valor en el Edit. Por otro lado, para el caso que plantea FDB, yo he hecho algo parecido colocando frames alineados al área cliente del formulario principal. Cada frame contiene todos los controles que usualmente estarían en un formulario de haber escogido la interfaz tradicional de menús. Esta situación es esencialmente igual a la de la interfaz tradicional: un menú de opciones y "ventanas" que se muestran según la opción. Lo que cambia es la presentación visual. Esta similitud es la que me lleva al comentario de antes- si no creamos todos los formularios de un sólo golpe, ¿por qué sí hacerlo con este tipo de frames? Prefiero frames a formularios en este caso porque siempre hay que "truquear" y ajustar detalles para poder encajar un formulario dentro de otro y que se comporte bien. // Saludos |
Cita:
Sí existen otras formas, algunas ya comentadas aquí. Una la de los formularios en tiempo de ejecución, aunque como ya han dicho son más incomodos de crear y "ajustar" y otra es utilizar componentes del estilo PageControl o TNoteBook (éste si no vas a utilizar herencia, ya que si la vas a utilizar no funciona). |
Cita:
De todas formas, no todo es absoluto; Reconozco que no se me hubiera ocurrido crear un PageControl con 15 pestañas (por ejemplo) en diseño, porque no se lo que puede tardar en visualizarse. Todo depende del volumen de controles del que estemos hablando... |
Cita:
¿Qué problemas has tenido? // Saludos |
Bueno, cuando me refería a que van a molestar, básicamente pensaba en que si utilizas un Form y derivas puedes añadir botones a las ToolBar en los derivados (por decirte algo) en caso cuando utilizas frames (en mi caso el Frame incluía la ToolBar estandar) y una vez derivado intentar añadir botones te encuentras con la desagradable sorpresa de que no puedes (por otro lado normal, ya que son frames)... y en ese momento te acuerdas de cuando pensaste en utilizar Forms/Frames....
|
Como Creo Dinamicamente Los Frames
yo tengo un problema algo parecido, de igual manera busco mostrar varias pantallas en mi sistema pero pues es bastante grande y para poner los frames siento que van a ser muchos, me interesaria saber como los mando crear de forma dinamica, ya lo he intentado pero parece que si se crean pero no se muestra nada y cuando los vuelvo a crear dice que el elmento ya fue creado, no se si me pudieran ayudar este es un ejemplo delcodigo que he empleado:
eso esta declarado en el proyecto .dpr:
y el siguiente codigo es donde intento mandar llamar el frame, no son todos los parametros pero quise poner lo escencial, aqui tambien pongo en el uses el nombre del frame:
como les comento parece que si lo crea, pero no se muestra y al pulsar de nuevo el boton dice que el componente ya esta creado, espero alguien me pueda ayudar, gracias. por cierto ya corregi el texto gracias por el comentario jachguate |
Hola Jaaron, bienvenido a los foros del clubdelphi. Te recomiendo una lectura de la guia de estilo de los foros. Alli veras que en este lugar (y en general en todo el internet) escribir en mayúsculas se interpreta como GRITAR, además de las reglas básicas de convivencia en este lugar.
Además, te invito a leer el mensaje que está al inicio de cada foro explicando el uso de la etiqueta [ delphi ] y otras creadas específicamente para publicar código, que como veras adelante, permite código perfectamente indentado además de resaltar la sintaxis. Por otro lado supongo -pues no he programado mucho con frames- que lo que te falta es asignar el parent a tus frames:
Hasta luego. ;) |
gracias, faltaba el parent
pues creo que la linea que hacia falta era precisamente la del parent, gracias amigo jachguate, y tambien por las recomendaciones, espero yo tambien poder ayudarlos en lo que se pueda yo trabajo con proyectos CLX en delphi y kylix y conozco algunos componente para imprimir reportes que funcionan para ambos lenguajes, cualquier cosa en que les pueda ayudar, tratare de hacerlo, nuevamente gracias, y una disculpa porque lei la guia de estilo y cometi el error de mandarle un mensaje privado a neftali, perdon, no volvera a ocurrir en el futuro.
|
varios frames
saludos...
estoy trabajando en bds 2006 para c++, se trata de una aplicacion con 5 frames cada uno con edits, dbgrid, etc. etc., el form principal tiene 5 botones, cada uno para llamar a cierto frame y ocultar los demas, me gustaria no tener que cargar mucho la aplicacion al poner todos los frames desde el inico ya chece en varios hilos de esta pagina y en otros foros pero lo mas cercano que he encontrado soluciones para delphi que no he podido implementar en c++ esto es lo que hago:
pero me marca un error : access violation at adress 00401ac0 .... algun tip que puedan darme? |
No estoy puesto en C++ pero tienes que crear el frame:
En este caso le pongo que el panel1 destruirá el frame. Si acaso lo liberas por código, el parámetro tendrás que cambiarlo. Create(NULL) Saludos |
gracias
Cita:
opte por usar tu truco de este hilo http://www.clubdelphi.com/foros/show...ghlight=tframe gracias de nuevo, saludos |
y no será.....
Saludos |
La franja horaria es GMT +2. Ahora son las 13:24:40. |
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