Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Tratamiento de relleno de borde en Windows Vista/7 sobre Delphi 7 (https://www.clubdelphi.com/foros/showthread.php?t=65467)

Nasca 17-12-2009 10:58:10

Tratamiento de relleno de borde en Windows Vista/7 sobre Delphi 7
 
Tengo un problema con el coñazo relleno de borde que incorporó Windows Vista y hereda el 7. El border padding creo que se llama en inglés.

Trabajo con formularios con ajuste dinámico y parte del mismo se queda fuera de visualización cuando el relleno está a su valor por defecto: 4

Dado que por ahora el sistema mas extendido en el mundo de la empresa es XP no me parece correcto desarrollar dejando tanto espacio adicional libre en los formularios.

Ya sé que a partir de Delphi 2007 este tema se soluciona por el propio IDE, lo que sucede es que por ahora no me puedo plantear el cambio de versión de Delphi. Quiero resolverlo sin salir de Delphi 7, que aparte de por esto ahora mismo me resuelve todas mis necesidades.

He investigado varias opciones pero no he conseguido ninguna solución que no pase por modificar ese valor de relleno en el propio Windows.

Una primera solución podría pasar por modificar el tamaño del formulario de forma previa a su visualización. Dado que la mayoría de mis formularios se crean de forma dinámica sería una opción viable. Sin embargo no he conseguido modificar el alto y ancho sin que se lance el proceso de auto-ajuste de los controles al nuevo tamaño, por lo que siguen saliéndose del área de visualización. No sé si es posible desactivar provisionalmente este mecanismo sin necesidad de recorrer todos los componentes del formulario.
Incluso si sería posible modificar el recurso del formulario de forma previa a su lanzamiento. En el IDE este mecanismo se desactiva si editas directamente en modo texto el formulario, pero ni idea de cómo podría hacerse en ejecución.

Otra opción que se me ocurre sería gestionar el dibujado de la ventana sobre estos sistemas. Es esta entrada se recopila alguna información al respecto pero no he conseguido hacerlo funcionar:
Removing Vista Aero Border

¿Alguno se ha enfrentado a este problema y lo ha solucionado? O ha necesitado tirar de mecanismos similares o alternativos a los planteados en otro tipo de problemas que se puedan aplicar aquí.

Gracias.

Nasca 25-06-2010 19:16:57

Al final he conseguido la forma de hacerlo. La clave está en redefinir el procedure Loaded del formulario.

Bendito "La cara oculta de Delphi 6" todavía me sigue aportando buenas soluciones e ideas. Tengo que volverlo a releer cuando tenga tiempo.

Lord Delfos 26-06-2010 19:00:56

Amigo Nasca, ¿me podrías decir cuál fue la solución? Yo no me he topado con el problema todavía pero sería interesante estar preparado....

De paso queda registrado para otros que vengan buscando la solución al mismo problema.

Saludetes.

Nasca 26-06-2010 19:25:13

Todavía no lo ha implementado pero para que se hagan una idea, un poco de código a nivel de formulario:

Código Delphi [-]
protected
   procedure Loaded; override;

procedure TfEditarRegistro.Loaded;
begin
  inherited Loaded;
  Self.Height := Self.Height + 30;
  Self.Width := Self.Width + 30;
end;

Este casi mágico procedimiento permite modificar las propiedades de los formularios guardados como recursos antes de que empiecen a tenerse en cuenta. Por ello no se activan los ajustes dinámicos de los controles cuando cambiamos las dimensiones del formulario.

Espero que les sea de utilidad, me ha costado encontrar esta solución.


La franja horaria es GMT +2. Ahora son las 23:51:05.

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