Utiliser les fonctions API pour implémenter des formulaires "atypiques" dans DELPHI
Afin d'attirer les utilisateurs, certains logiciels shareware actuels, notamment certains logiciels de lecture multimédia, accordent une grande attention à la conception de l'interface du programme. En fait, nous pouvons également utiliser les fonctions API pour obtenir ces effets magnifiques et alternatifs.
1. Forme de forme spéciale
La forme peut-elle être uniquement carrée ? Non, il existe d'autres formes possibles. Cela nécessite l'utilisation de deux fonctions API Win32. Tout d’abord, utilisez la fonction CreateRoundRectRgn() pour définir une zone elliptique dans le formulaire. La région mentionnée ici est un objet API spécial. Nous pouvons effectuer des opérations telles que le remplissage et le découpage à l'intérieur de la région pour définir les caractéristiques externes du formulaire. Appelez ensuite la fonction SetWindowRgn() pour dessiner. De plus, vous pouvez utiliser la fonction CombineRgn() pour fusionner plusieurs zones. Par exemple, ajoutez le code suivant au fichier d'unité Delphi :
PRocédure TForm1.FormCreate(Expéditeur : TObject);
var
FRegion1 : THandle ;
FRegion2 : THandle ;
commencer
FRegion1:=CreateRoundRectRgn(20,20,200,200,300,300);//Délimiter une zone elliptique
FRegion2:=CreateRectRgn(170,170,400,400);//Délimiter une zone rectangulaire
CombineRgn(FRegion1,FRegion1,FRegion2,RGN_OR);//Connecter deux zones
SetwindowRgn(handle,FRegion1,True);//Dessiner la zone connectée
fin;
La fonction CreateRoundRectRgn() dans le segment de programme est utilisée pour créer une zone rectangulaire arrondie, et son prototype est :
HRGNCreateRoundRectRgn(
int nLeftRect,//coordonnée X du coin supérieur gauche
int nTopRect,//coordonnée Y du coin supérieur gauche
int nRightRect,//coordonnée X du coin inférieur droit
int nBottomRect,//coordonnée Y du coin inférieur droit
int nWidthEllipse,//La largeur de l'ellipse où se trouve le coin arrondi
int nHeightEllipse //Hauteur de l'ellipse où se trouve le coin arrondi
);
D'autres graphiques tels que des polygones, des ellipses, etc. ont des fonctions API correspondantes. Leurs prototypes sont les suivants :
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 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)
Les paramètres de la fonction ci-dessus sont faciles à comprendre et sont utilisés pour indiquer les coordonnées du rectangle intégré du graphique ou pointer vers le rectangle. Concentrons-nous sur les deux autres fonctions :
Prototype de fonction : SetWindowRgn(
HWND hWnd, //handle du formulaire actuel
HRGN hRgn, //handle de la région actuelle
BOOL bRedraw, //Redessiner le logo
)
Fonction : Cette fonction transmet le handle de la zone créée en tant que paramètre au handle du formulaire actuel et dessine le formulaire dans la zone ;
Prototype de fonction : CombineRgn(
HRGN hrgnDest, // handle pour se connecter à la zone de destination
HRGN hrgnSrc1, //Le premier handle à se connecter à la zone source
HRGN hrgnSrc2, // Le handle de la deuxième zone source de connexion
int fnCombineMode // mode de connexion
)
Fonction : Cette fonction fusionne deux zones en une nouvelle zone, où le mode de connexion peut prendre les valeurs suivantes :
Effet de la valeur du paramètre
RGN_AND crée une nouvelle région à partir de l'intersection des parties communes de la région 1 et de la région 2
RGN_COPY crée une copie de la région 1 en tant que nouvelle région
RGN_DIFF relie les pièces qui appartiennent à la zone 1 mais pas à la zone 2 à une nouvelle zone
RGN_OR relie toutes les parties de la zone 1 et de la zone 2, c'est-à-dire l'union
RGN_XOR. Connectez toutes les parties de la zone 1 et de la zone 2 et retirez les parties communes
2. Forme creuse
La particularité de cette forme est qu'il s'agit d'une forme à deux extrémités, et une partie est creusée au milieu. Par exemple, ajoutez le code suivant au fichier d'unité Delphi :
procédure TForm1.FormCreate(Expéditeur : TObject);
var
FRegion3:TPoignée ;
commencer
Canvas.Font.Name:='Chinese Xingkai';//Définir la police
Canvas.Font.Size:=100;//Définir la taille de la police
BeginPath(Canvas.Handle); //Obtenir le contour dessiné sur vanvas
TextOut(form1.Canvas.Handle,0,20,'Program Spring and Autumn',8);//Découpez la zone occupée par les quatre mots "Program Spring and Autumn"
EndPath(Canvas.Handle);
FRegion3:=PathToRegion(Canvas.Handle);//Attribuer la région ci-dessus au formulaire
SetwindowRgn(Handle,FRegion3,True);//Commencer à dessiner
fin;
Trois fonctions API sont principalement utilisées ici :
Prototype de fonction : BOOL BeginPath (HDC hdc //handle de l'environnement du périphérique)
Fonction : commencer à recevoir la trajectoire de l'environnement actuel de l'appareil ;
Prototype de fonction : BOOL EndPath(HDC hdc //handle de l'environnement du périphérique)
Fonction : Arrêtez de recevoir et attribuez la trajectoire du chemin reçu au handle de l'environnement actuel de l'appareil.
Prototype de fonction BOOL TextOut(
HDC hdc, // poignée du contexte du périphérique
int nXStart,//coordonnée X de la position de départ
int nYStart,//coordonnée Y de la position de départ
LPCTSTR lpString,//adresse de chaîne
int cbString //Le nombre de caractères contenus dans la chaîne (notez qu'un caractère chinois occupe deux caractères)
)
Fonction : dessine la chaîne donnée à la position spécifiée.
Résumé : Apprendre à utiliser efficacement les API pour programmer est une compétence très importante, et cela peut parfois donner des résultats inattendus. Les techniques ci-dessus sont destinées à inspirer les autres. J'espère que vous pourrez utiliser pleinement diverses techniques et utiliser votre imagination pour concevoir des formes plus éblouissantes et embellir vos propres programmes.