Utilice funciones API para implementar formularios "atípicos" en DELPHI
Para atraer usuarios, algunos programas shareware actuales, especialmente algunos programas de reproducción multimedia, prestan gran atención al diseño de la interfaz del programa. De hecho, también podemos utilizar funciones API para lograr esos efectos hermosos y alternativos.
1. Forma de forma especial
¿La forma puede ser sólo cuadrada? No, hay otras formas posibles. Esto requiere el uso de dos funciones API de Win32. Primero, use la función CreateRoundRectRgn() para definir un área elíptica dentro del formulario. La región a la que se hace referencia aquí es un objeto API especial. Podemos realizar operaciones como llenar y recortar dentro de la región para definir las características externas del formulario. Luego llame a la función SetWindowRgn() para dibujar. Además, puede usar la función CombineRgn() para fusionar varias áreas. Por ejemplo, agregue el siguiente código al archivo de la unidad Delphi:
Procedimiento TForm1.FormCreate(Remitente: TObject);
var
FRegión1:TMango;
FRegión2:TMango;
comenzar
FRegion1:=CreateRoundRectRgn(20,20,200,200,300,300);//Delimitar un área elíptica
FRegion2:=CreateRectRgn(170,170,400,400);//Delimitar un área rectangular
CombineRgn(FRegion1,FRegion1,FRegion2,RGN_OR);//Conecta dos áreas
SetwindowRgn(handle,FRegion1,True);//Dibuja el área conectada
fin;
La función CreateRoundRectRgn() en el segmento del programa se utiliza para crear un área rectangular redondeada y su prototipo es:
HRGN CrearRoundRectRgn(
int nLeftRect,//coordenada X de la esquina superior izquierda
int nTopRect,//coordenada Y de la esquina superior izquierda
int nRightRect,//coordenada X de la esquina inferior derecha
int nBottomRect,//coordenada Y de la esquina inferior derecha
int nWidthEllipse,//El ancho de la elipse donde se encuentra la esquina redondeada
int nHeightEllipse // La altura de la elipse donde se encuentra la esquina redondeada
);
Otros gráficos como polígonos, elipses, etc. tienen funciones API correspondientes. Sus prototipos son los siguientes:
HRGN CreateEllipticRgn(int nLeftRect,int nTopRect,int nRightRect,int nBottomRect)
HRGN CreateEllipticRgnIndirect( CONST RECT *lprc)
HRGN CreatePolygonRgn(PUNTO CONST *lPPT,int cPoints, int fnPolyFillMode)
HRGN CreatepolypolygonRgn(CONST POINT *lppt,CONST INT *lpPolyCounts,int nCount,int fnPolyFillMode)
HRGN CreateRectRgn(int nLeftRect,int nTopRect,int nRightRect,int nBottomRect)
HRGN CreateRectRgnIndirect(CONST RECT *lprc)
Los parámetros de la función anterior son fáciles de entender y se utilizan para indicar las coordenadas del rectángulo incorporado del gráfico o apuntar al rectángulo. Centrémonos en las otras dos funciones:
Prototipo de función: SetWindowRgn(
HWND hWnd, //identificador del formulario actual
HRGN hRgn, //identificador de la región actual
BOOL bRedraw, //Redibujar el logotipo
)
Función: esta función pasa el identificador del área creada como parámetro al identificador del formulario actual y dibuja el formulario dentro del área;
Prototipo de función: CombineRgn(
HRGN hrgnDest, // identificador para conectarse al área de destino
HRGN hrgnSrc1, //El primer identificador para conectarse al área de origen
HRGN hrgnSrc2, // El identificador del área de origen de la segunda conexión
int fnCombineMode // modo de conexión
)
Función: Esta función fusiona dos áreas en una nueva área, donde el modo de conexión puede tomar los siguientes valores:
Efecto del valor del parámetro
RGN_AND crea una nueva región a partir de la intersección de las partes comunes de la región 1 y la región 2
RGN_COPY crea una copia de la región 1 como una nueva región
RGN_DIFF conecta las partes que pertenecen al área 1 pero no al área 2 a una nueva área
RGN_OR conecta todas las partes del área 1 y el área 2, es decir, la unión
RGN_XOR. Conecte todas las partes del área 1 y el área 2 y retire las partes comunes.
2. Forma hueca
La característica de esta forma es que es una forma con dos extremos y una parte excavada en el medio. Por ejemplo, agregue el siguiente código al archivo de la unidad Delphi:
procedimiento TForm1.FormCreate(Remitente: TObject);
var
FRegión3:TMango;
comenzar
Canvas.Font.Name:='Chinese Xingkai';//Establecer la fuente
Canvas.Font.Size:=100;//Establecer el tamaño de fuente
BeginPath(Canvas.Handle); //Obtiene el contorno dibujado en vanvas
TextOut(form1.Canvas.Handle,0,20,'Programa Primavera y Otoño',8);//Recorta el área ocupada por las cuatro palabras "Programa Primavera y Otoño"
EndPath(Canvas.Handle);
FRegion3:=PathToRegion(Canvas.Handle);//Asigne la región anterior al formulario
SetwindowRgn(Handle,FRegion3,True);//Comenzar a dibujar
fin;
Aquí se utilizan principalmente tres funciones API:
Prototipo de función: BOOL BeginPath (HDC hdc //control del entorno del dispositivo)
Función: comenzar a recibir la trayectoria del entorno actual del dispositivo;
Prototipo de función: BOOL EndPath(HDC hdc //control del entorno del dispositivo)
Función: detener la recepción y asignar la trayectoria de la ruta recibida al identificador del entorno actual del dispositivo
Prototipo de función BOOL TextOut(
HDC hdc,//control del contexto del dispositivo
int nXStart,//coordenada X de la posición inicial
int nYStart,//coordenada Y de la posición inicial
LPCTSTR lpString,//Dirección de cadena
int cbString // El número de caracteres contenidos en la cadena (tenga en cuenta que un carácter chino ocupa dos caracteres)
)
Función: dibuja la cadena dada en la posición especificada.
Resumen: Aprender a utilizar las API para programar de manera competente es una habilidad muy importante y, a veces, puede lograr resultados inesperados. Las técnicas anteriores están destinadas a inspirar a otros. Espero que pueda aprovechar al máximo varias técnicas y usar su imaginación para diseñar formas más deslumbrantes y embellecer sus propios programas.