2011-06-02 5 views
6

Tengo una aplicación escrita en Delphi 6 y compilada en Windows XP. Normalmente dejo 8px libre entre los controles y los bordes de las formas.Cómo lidiar con problemas de tamaño de formulario de Delphi 6 y WinXP a Delphi 2007 y Vista/Win7

Cuando esta aplicación se ejecuta en Vista o Win 7, esta brecha es menor o no aparece en absoluto. Creo que esto podría deberse a que estas versiones de Windows tienen bordes de formularios más gruesos.

Ahora muevo la aplicación a Delphi 2007. En el diseñador de formularios, los formularios han perdido los espacios inferiores y derechos.

¿Cómo debo tratar esto? Tengo cientos de formularios y no quiero cambiarlos a todos. Además, la mayoría de nuestros usuarios ejecuta la aplicación en Win XP, por lo que no quiero que se vea mal en XP.

+2

hay algo más que no nos está diciendo. Recientemente cambié de d6 a d2010 y no tuve tantos problemas –

+0

¿Ha intentado o utilizó un Manifiesto? ¿Tal vez podrías especificar el modo de compatibilidad XP? – Tom

+0

@DavidHeffernan "algo malvado viene de esta manera". Simplemente golpee la pared, que TForm.ClientWidth devuelve un resultado totalmente loco en Win8.x independientemente de DPI .... –

Respuesta

11

versión corta: cambiar toda la forma de a AutoScroll = False


El problema es propiedad de la forma AutoScroll, y cómo afecta a los cuales tamaño del formulario se almacena en la DFM.

Si AutoScroll es cierto (por defecto) el DFM almacenará Width y Height:

object Form1: TForm1 
    Left = 192 
    Top = 114 
    Width = 544 
    Height = 375 
    Caption = 'Form1' 
    ... 

Si AutoScroll es falsa (el preferido ajuste) del DFM almacenará ClientWidth y ClientHeight:

object frmSplash: TfrmSplash 
    Left = 192 
    Top = 114 
    ClientWidth = 536 
    ClientHeight = 348 
    Caption = 'Form1' 

El problema con el almacenamiento de Height es lo que sucede cuando la barra de título del usuario tiene un tamaño diferente al de su máquina de desarrollo, p.

  • a desarrollar en Windows 2000, el programa se ejecuta en Windows XP
  • a desarrollar en Windows XP, el programa se ejecuta en Windows Vista
  • a desarrollar con pequeñas fuentes, el programa se ejecuta con fuentes grandes

Windows 2000 tenía un borde de 4 píxeles, con una barra de título de 23 píxeles. Con el DFM almacenando un Height de 375, esto deja 348px para el área de formulario de cliente.

Ejecute el mismo programa en Windows XP, que tiene una barra de subtítulos más alta (28 píxeles). Con el DFM almacenando un Height de 375 píxeles, esto deja 343 píxeles para el área del cliente.

Su formulario "tiene 5 píxeles más cortos".

Debe forzar a Delphi a almacenar ClientWidth y ClientHeight en el DFM al desactivar AutoScroll.

Ahora cuando crea su forma alta de 348px en Windows XP, continuará teniendo 348 píxeles en el área del cliente, y sin embargo, se requiere una altura extra para tener una barra de subtítulos.

i ir tan lejos como para tener una OutputDebugString y un disparador punto de interrupción si mi código de biblioteca de ayuda considera que alguna forma de que por error tiene AutoScroll conjunto de cierto.


Editar: Desde trato de ser un buen desarrollador, hago el respeto de mi forma de letra preferencia del usuario. Durante el OnCreate de todos mis formas i llamar a una función StandardizeForm(Self) que:

  • escalas de la forma para que coincida con el tamaño de fuente predeterminado del usuario
  • cambia el tipo de letra en todos los controles en el formulario a la preferencia del usuario
  • cuestiones un ODS si el formulario se establece por error establecen en Scaled
  • emite una SAO y de punto de interrupción si AutoScroll cierto (y lo establece en false)
  • emite una SAO y punto de interrupción si ShowHint es falsa (y lo enciende)
  • etc

Puede hacer algo similar. Sí, tendría que agregar:

procedure TCustomerEditForm.FormCreat(Sender: TObject); 
begin 
    StandardizeForm(Self); //Pay your taxes! 
    ... 
end; 

Pero vale la pena para mí.

+0

Brillante. Gracias. – cja

+0

Además, ¿por qué no tienes tu propia clase de formulario libre de impuestos? – cja

+1

@cja: Se gana poco valor al obligar a todos a instalar un nuevo paquete de tiempo de diseño. De esta manera es *** mucho *** más fácil. –

Cuestiones relacionadas