Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Solo para expertos: FullScreen para ventanas MDI (https://www.clubdelphi.com/foros/showthread.php?t=39738)

CID 29-01-2007 04:25:37

Solo para expertos: FullScreen para ventanas MDI
 
Sé que parece un tema un tanto simple, se han visto varios posts a lo largo de este foro. Sin embargo las soluciones mostradas no son válidas para ventanas MDI. Me explico.

Entre los posts del foro encontré ésta solución:

Código:

  BorderStyle := bsNone;
  Top := 0;
  Left := 0;
  Height := Screen.Height;
  Width := Screen.Width;

Es válida para formularios SDI, pero no para MDI.

Sin invalidar la solución anterior, para ventanas SDI la mejor forma es la siguiente:

FullScreen para ventanas SDI

Código:

  if BorderStyle <> bsNone then
  begin
    BorderStyle := bsNone;
    WindowState := wsMaximized;
  end
  else
  begin
    WindowState := wsNormal;
    BorderStyle := bsSingle;
  end;

Esta última solución tampoco es válida para formularios MDI.

Luego de analizar el problema me di cuenta que el bug en cuestión aparece al modificar el valor de BorderStyle (para aquellos que no sepan cual es el bug, se lo resumo: las ventanas hijas desaparecen visualmente).

Es por este motivo que recurro a ustedes, esperanzado que alguien haya pasado ya por esta situación y quiera compartir su experiencia (y si la conoce, la solución).

Gracias por leer.

Neftali [Germán.Estévez] 29-01-2007 10:54:08

¿Qué es exactamente lo que quieres?
Un MDIChild es una ventana que está "dentro de otra"; Partiendo de esa premisa, ¿qué quieres? ¿Una ventana a pantalla completa sin bordes? En ese caso porqué no la heces normal? Que no sea MDI.

Si quieres una ventana FullScreen, no tiene sentido que sea MDI.

NOTA: ¿Qué pasa que los que no somos expertos no podemos contestar?
Personalmente no me ha gustado el título.

CID 29-01-2007 13:56:13

Cita:

¿Qué es exactamente lo que quieres?
Un MDIChild es una ventana que está "dentro de otra"; Partiendo de esa premisa, ¿qué quieres? ¿Una ventana a pantalla completa sin bordes?
Gracias por responder.
Está claro lo que busco, un FullScreen de una ventana MDIForm.

Explico de otra manera a ver si queda más claro.

Un form padre con una o más ventanas hijas ya creadas (dinámicamente). Se hace un fullscreen en la ventana padre (no bordes y maximizada, encima de toda otra ventana del escritorio) y las ventanas hijas deben seguir viendose (el tamaño de las ventanas hijas no me importan actualmente, calculo que con un maximize para ellas alcanzaría). Al presionarse el mismo botón nuevamente se debería volver al estado inicial.

Cita:

En ese caso porqué no la heces normal? Que no sea MDI.

Si quieres una ventana FullScreen, no tiene sentido que sea MDI.
El proyecto en el que trabajo es un programa con interface MDI (bastante avanzado en su etapa de desarrolo, en si ya está terminado, estoy arreglando este tipo de cosas), y para mi si tiene sentido que tenga ese tipo de gui.

Cita:

NOTA: ¿Qué pasa que los que no somos expertos no podemos contestar?
Personalmente no me ha gustado el título.
Ok, cambien el titulo a: Solo para no novatos.
No es un problema cualquiera, se trata de un bug, y alguien que no sea experto (experto viene de experimentado, que tenga experiencia en el tema) no sabrá como responder y alargará el post con preguntas y no con respuestas que es lo que en definitiva busco, de tal forma que para advertir es que está así el nombre del tema.
Si alguien lo tomó como algo arrogante, mis disculpas no fue la intención.

Neftali [Germán.Estévez] 29-01-2007 16:58:24

1 Archivos Adjunto(s)
Primero, pedir disculpas, porque había leído el mail rápido y no había acabado de entender algunas cosas sobre la pregunta...

Siguiendo con la pregunta:

Cita:

Empezado por CID
...No es un problema cualquiera, se trata de un bug...

Discrepo contigo en que sea un Bug; Es un comportaminto estandard de las ventanas. Si revisas las VCL verás que si modificas esa propiedad se destruye y se vuelve a crear la ventana; Cualquier ventana hija de la que se destruye también se destruye (entre ellas las MDIChild) por lo que los Handles de los forms se pierden.

Por lo tanto, la respuesta a tu pregunta es que no se puede hacer. Al menos, no sin modificar la unit Forms.pas.

Otra opción es "emular" el efecto que deseas, realmente no cambiando el borde de la ventana, sino modificando el tamaño y posición para que lo parezca, como puede verse en el ejemplo que adjunto.

Quedan "flecos", como el acceso al menú de sistema utilizando teclado que te da acceso a la opción de "mover", o que el formulario esté en una posición negativa con lo que la comprobación del estado tal vez te de un resultado erróneo, pero esas son cosas que puedes "corregir" tú. La primera seguramente con capturando WM_SYSCOMMAND y la segunda utilizando para comprobar, no sólo la posición, sino también el tamaño de la ventana.

Cita:

Empezado por CID
...Ok, cambien el titulo a: Solo para no novatos.

Ambas cosas sobran, normalmente aquí no hay mensajes para unos usuarios concretos, cada uno aporta lo que puede.

Cita:

Empezado por CID
...no sabrá como responder y alargará el post con preguntas y no con respuestas que es lo que en definitiva busco...

Sí que "suena" un poco arrogante, pero bueno, cada uno...

CID 29-01-2007 17:37:27

Tenias razón, no era un bug.
Se trata de la implementación (algo pobre) posiblemente obligada por el api.
En fin, gracias por la pronta respuesta.

|NoName| 29-01-2007 19:27:27

Cita:

Empezado por Neftali
NOTA: ¿Qué pasa que los que no somos expertos no podemos contestar?
Personalmente no me ha gustado el título.

Absolutamente cierto.
No se nada de Delphi pero basta con aplicar un poco de sentido común para darse cuenta que no es para nada una buena idea poner títulos así.

PD: No figura esto en la guía de estilo?


La franja horaria es GMT +2. Ahora son las 05:01:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi