Use funções API para implementar formulários "atípicos" no DELPHI
Para atrair usuários, alguns softwares shareware atuais, especialmente alguns softwares reprodutores multimídia, prestam grande atenção ao design da interface do programa. Na verdade, também podemos usar funções de API para obter esses efeitos bonitos e alternativos.
1. Formato especial
A forma só pode ser quadrada? Não, existem outras formas possíveis. Isso requer o uso de duas funções da API Win32. Primeiro, use a função CreateRoundRectRgn() para definir uma área elíptica dentro do formulário. A região aqui referida é um objeto API especial. Podemos realizar operações como preenchimento e recorte dentro da região para definir as características externas do formulário. Em seguida, chame a função SetWindowRgn() para desenhar. Além disso, você pode usar a função CombineRgn() para mesclar várias áreas. Por exemplo, adicione o seguinte código ao arquivo de unidade Delphi:
Procedimento TForm1.FormCreate(Remetente: TObject);
var
FRegião1:THhandle;
FRegião2:THhandle;
começar
FRegion1:=CreateRoundRectRgn(20,20,200,200,300,300);//Delimitar uma área elíptica
FRegion2:=CreateRectRgn(170,170,400,400);//Delimitar uma área retangular
CombineRgn(FRegion1,FRegion1,FRegion2,RGN_OR);//Conecta duas áreas
SetwindowRgn(handle,FRegion1,True); //Desenha a área conectada
fim;
A função CreateRoundRectRgn() no segmento do programa é usada para criar uma área retangular arredondada e seu protótipo é:
HRGN CreateRoundRectRgn(
int nLeftRect,//coordenada X do canto superior esquerdo
int nTopRect,//coordenada Y do canto superior esquerdo
int nRightRect,//coordenada X do canto inferior direito
int nBottomRect,//coordenada Y do canto inferior direito
int nWidthEllipse,//A largura da elipse onde o canto arredondado está localizado
int nHeightEllipse //Altura da elipse onde o canto arredondado está localizado
);
Outros gráficos, como polígonos, elipses, etc. possuem funções de API correspondentes. Seus protótipos são os seguintes:
HRGN CreateEllipticRgn(int nLeftRect,int nTopRect,int nRightRect,int nBottomRect)
HRGN CreateEllipticRgnIndirect( CONST RECT *lprc)
HRGN CreatePolygonRgn(CONST POINT *lPPT,int cPoints, int fnPolyFillMode)
HRGN CriarpolypolygonRgn(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)
Os parâmetros da função acima são fáceis de entender e são usados para indicar as coordenadas do retângulo embutido do gráfico ou apontar para o retângulo. Vamos nos concentrar nas outras duas funções:
Protótipo de função: SetWindowRgn(
HWND hWnd, //handle do formulário atual
HRGN hRgn, //handle da região atual
BOOL bRedraw, //Redesenhar logotipo
)
Função: Esta função passa o handle da área criada como parâmetro para o handle do formulário atual, e desenha o formulário dentro da área;
Protótipo de função: CombineRgn(
HRGN hrgnDest, // identificador para conectar à área de destino
HRGN hrgnSrc1, //O primeiro identificador para conectar à área de origem
HRGN hrgnSrc2, // O identificador da segunda área de origem da conexão
int fnCombineMode // modo de conexão
)
Função: Esta função mescla duas áreas em uma nova área, onde o modo de conexão pode assumir os seguintes valores:
Efeito do valor do parâmetro
RGN_AND cria uma nova região a partir da intersecção das partes comuns da região 1 e da região 2
RGN_COPY cria uma cópia da região 1 como uma nova região
RGN_DIFF conecta as partes que pertencem à área 1, mas não à área 2, a uma nova área
RGN_OR conecta todas as partes da área 1 e área 2, ou seja, a união
RGN_XOR. Conecte todas as partes da área 1 e área 2 e remova as partes comuns
2. Forma oca
A característica desta forma é que se trata de uma forma com duas pontas, e uma parte é escavada no meio. Por exemplo, adicione o seguinte código ao arquivo da unidade Delphi:
procedimento TForm1.FormCreate(Remetente: TObject);
var
FRegião3:THhandle;
começar
Canvas.Font.Name:='Chinese Xingkai';//Definir a fonte
Canvas.Font.Size:=100;//Define o tamanho da fonte
BeginPath(Canvas.Handle); //Obtém o contorno desenhado no vanvas
TextOut(form1.Canvas.Handle,0,20,'Program Spring and Autumn',8);//Recorte a área ocupada pelas quatro palavras "Program Spring and Autumn"
EndPath(Canvas.Handle);
FRegion3:=PathToRegion(Canvas.Handle);//Atribuir a região acima ao formulário
SetwindowRgn(Handle,FRegion3,True); //Começa a desenhar
fim;
Três funções de API são usadas principalmente aqui:
Protótipo de função: BOOL BeginPath (HDC hdc //handle do ambiente do dispositivo)
Função: Começa a receber a trajetória do ambiente atual do dispositivo;
Protótipo de função: BOOL EndPath(HDC hdc //handle do ambiente do dispositivo)
Função: Pare de receber e atribua a trajetória do caminho recebido ao identificador do ambiente do dispositivo atual
Protótipo de função BOOL TextOut(
HDC hdc, // identificador do contexto do dispositivo
int nXStart,//coordenada X da posição inicial
int nYStart,//coordenada Y da posição inicial
LPCTSTR lpString, //Endereço da string
int cbString //O número de caracteres contidos na string (observe que um caractere chinês ocupa dois caracteres)
)
Função: Desenhe a string fornecida na posição especificada.
Resumo: Aprender a usar APIs para programação com proficiência é uma habilidade muito importante e, às vezes, pode alcançar resultados inesperados. As técnicas acima têm como objetivo inspirar outras pessoas. Espero que você possa fazer pleno uso de várias técnicas e usar sua imaginação para criar formas mais deslumbrantes e embelezar seus próprios programas.