Red de conocimiento informático - Computadora portátil - Cómo mantener la posición y el tamaño de los controles en C Builder

Cómo mantener la posición y el tamaño de los controles en C Builder

C Builder/Delphi es una popular herramienta de desarrollo visual C/Pascal lanzada por Inprise (anteriormente Borland), que puede acelerar enormemente el desarrollo de aplicaciones. Sin embargo, dado que es una herramienta de programación visual, después de arrastrar y soltar el control en el formulario, su posición es fija. A medida que cambia el tamaño del formulario o la resolución de la pantalla, la ubicación de los controles y el formulario en sí tiende a volverse muy confuso. En este artículo, cubriremos algunas formas de colocar controles y formularios correctamente.

Utilice el evento OnResize para cambiar la posición y el tamaño del control

El control de formulario en C Builder/Delphi tiene un evento OnResize, y todas las operaciones relacionadas con el cambio del formulario tamaño (incluida la creación de una ventana. Este evento es activado por el formulario, maximizar/minimizar/restaurar el formulario, arrastrar el formulario con el mouse para cambiar el tamaño, etc.). Por lo tanto, cambiar dinámicamente la posición de cada control en este evento garantiza que su posición relativa en el formulario sea correcta. Dado que existen muchas diferencias entre los programas CBuilder y Delphi, aquí solo se enumera el código CBuilder.

El siguiente código garantizará que el control esté centrado bajo cualquier circunstancia.

Programa 1:

void __fastcall TForm1::FofmResize(TObject*Sender)

{

int midLoc=Width/2; //Obtener el punto medio del formulario

Label1-Left=midLoc-Label1-Width/2 //Establecer la posición de Label1 para centrar el formulario

Button1-Left=midLoc -Button1-Width/2; //Establece la posición del Botón1 para centrar el Formulario

}

Modifica este código ligeramente para mantener el control en cualquier posición deseada. Asimismo, el evento OnResize se puede utilizar para cambiar el tamaño de un control. Cuando hay una gran cantidad de controles en un formulario, es muy problemático ajustar la posición de cada control individualmente. En la clase TFrom, hay una matriz de Controles para mantener todos los controles en From; al usar esta matriz, todos los controles se pueden manipular fácilmente. El siguiente es el código fuente:

Programa 2:

void __fastcall TForm1::FormResize(TObject*Sender)

{

int midLoc =Width/2;

TControl * ChildControl;

fof(int i=0; iControlCount; i )

{// Recorrer la matriz de controles , ControlCount es el número de elementos de la matriz

ChildControl = Controls[i];

ChildCotrol-Left = midLoc-ChildControl-Width/2;

}

}

Utilice "contenedores" para controlar la posición de los grupos de control

El código anterior es muy conveniente para mantener todos los controles en la misma posición. Es muy conveniente para mantener todos los controles en una ubicación unificada, pero no es conveniente para manipular grupos de controles.

C Builder proporciona una serie de controles "contenedores" que pueden contener otros controles (como TPanel, TGroupBox, etc.), por lo que puede colocar controles dentro de un control "contenedor": luego puede manipular el control de "contenedores". Puede controlar un grupo de controles colocándolos en un control "contenedor" y luego manipulando el control "contenedor". El resultado de usar el control "contenedor" para controlar la posición del control es que todos los controles se centran automáticamente, pero los controles secundarios del control GroupBox1 no están centrados, porque la matriz de Controles solo mantiene los controles secundarios directos del formulario. pero no los controles secundarios de los controles en el formulario. Realizar cualquier operación. Por lo tanto, los controles secundarios del control GroupBox1 todavía están en su posición inicial y se debe escribir código para controlar dinámicamente su posición y tamaño. Esta técnica es muy importante, especialmente cuando se cambia dinámicamente el tamaño de un control "contenedor". De hecho, el control "contenedor" tiene la misma matriz de controles que el Desde, así que simplemente haga algo similar al Programa 2. El código está en el programa 3

Programa 3

void __fastcall TForm1::FormResize(TObject*Sender)

{

int midLoc = Ancho/2;

TControl * ChildControl;

for(int i=0; iControlConnt; i )

{// Recorre la matriz de controles, ControlCount es una matriz Número de elementos

ChildControl = Controls[i];

ChildControl-Left = midLoc-ChildControl-Width/2;

if (ChildControl = = GroupBox1)

{// Si el control es un GroupBox, opere sus subcontroles

int SubMidLoc=GroupBox1-Width/2;

for( int j= 0; jGroupBox1-ControlCount; j )

{// Recorre la matriz de control de GroupBox1. ControlCount es el número de elementos de la matriz

ChildControl=GroupBox1-Controls[j];

ChildContro1-Left=SubMidLoc-ChildControl-Width/2;

}

}

}

}

}

}

A diferentes resoluciones Mantenga la posición y el tamaño del formulario a continuación

Los programas comerciales a menudo se ejecutan en una variedad de resoluciones, por lo que es importante determinar correctamente la resolución actual. La función de Windows GetDeviceCaps puede devolver el tamaño de un dispositivo en cualquier contexto de dispositivo.

GetDeviceCaps tiene dos parámetros, el primero es un parámetro usado para consultar el identificador de la tabla de descripción del dispositivo y el segundo es un parámetro usado para consultar el tipo, donde HORZRES y VERTRES representan la resolución horizontal y vertical del pantalla. . El programa 4 es el código para obtener la resolución de pantalla actual. En términos generales, este código se puede colocar en un "archivo de proyecto" (como Project1.cpp) y definir i y j como variables globales. Luego puede utilizar las técnicas introducidas anteriormente para controlar el tamaño y la posición de varios elementos de la pantalla.

Programa 4:

HDC hdc=GetDC(NULL); //Obtener el identificador de la tabla de descripción del dispositivo de pantalla

int i=GetDeviceCaps(hdc, HORZRES); //Consulta la resolución horizontal de la pantalla y la devuelve en la variable i

int j= GetDeviceCaps(hdc, VERTRES); //Consulta la resolución horizontal de la pantalla y la devuelve en la variable j

ReleaseDC(NULL, hdc); //Libera la tabla de contexto del dispositivo de pantalla

Utilizando el mismo método, puedes controlar la impresión de diferentes tamaños de papel, que no se describirán nuevamente aquí. Puede ver la ayuda de GetDevice Caps e imprimirla.