Verwenden Sie API-Funktionen, um „atypische“ Formulare in DELPHI zu implementieren
Um Benutzer anzulocken, legen einige aktuelle Shareware-Software, insbesondere einige Multimedia-Player-Software, großen Wert auf die Gestaltung der Programmoberfläche. Tatsächlich können wir auch API-Funktionen verwenden, um diese schönen und alternativen Effekte zu erzielen.
1. Speziell geformte Form
Kann die Form nur quadratisch sein? Nein, es sind auch andere Formen möglich. Dies erfordert die Verwendung von zwei Win32-API-Funktionen. Verwenden Sie zunächst die Funktion CreateRoundRectRgn(), um einen elliptischen Bereich innerhalb des Formulars zu definieren. Der hier genannte Bereich ist ein spezielles API-Objekt. Wir können Vorgänge wie Füllen und Ausschneiden innerhalb des Bereichs durchführen, um die externen Eigenschaften des Formulars zu definieren. Rufen Sie dann zum Zeichnen die Funktion SetWindowRgn() auf. Darüber hinaus können Sie mit der Funktion CombineRgn() mehrere Bereiche zusammenführen. Fügen Sie beispielsweise den folgenden Code zur Delphi-Einheitendatei hinzu:
PROzedur TForm1.FormCreate(Sender: TObject);
var
FRegion1:THandle;
FRegion2:THandle;
beginnen
FRegion1:=CreateRoundRectRgn(20,20,200,200,300,300);//Begrenzen Sie einen elliptischen Bereich
FRegion2:=CreateRectRgn(170,170,400,400);//Begrenzen Sie einen rechteckigen Bereich
CombineRgn(FRegion1,FRegion1,FRegion2,RGN_OR);//Zwei Bereiche verbinden
SetwindowRgn(handle,FRegion1,True);//Den verbundenen Bereich zeichnen
Ende;
Die Funktion CreateRoundRectRgn() im Programmsegment wird verwendet, um einen abgerundeten rechteckigen Bereich zu erstellen, und ihr Prototyp ist:
HRGN CreateRoundRectRgn(
int nLeftRect,//X-Koordinate der oberen linken Ecke
int nTopRect,//Y-Koordinate der oberen linken Ecke
int nRightRect,//X-Koordinate der unteren rechten Ecke
int nBottomRect,//Y-Koordinate der unteren rechten Ecke
int nWidthEllipse,//Die Breite der Ellipse, an der sich die abgerundete Ecke befindet
int nHeightEllipse //Höhe der Ellipse, auf der sich die abgerundete Ecke befindet
);
Andere Grafiken wie Polygone, Ellipsen usw. verfügen über entsprechende API-Funktionen. Ihre Prototypen sind wie folgt:
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)
Die Parameter der obigen Funktion sind leicht zu verstehen und werden verwendet, um die Koordinaten des integrierten Rechtecks der Grafik anzugeben oder auf das Rechteck zu zeigen. Konzentrieren wir uns auf die beiden anderen Funktionen:
Funktionsprototyp: SetWindowRgn(
HWND hWnd, //Handle des aktuellen Formulars
HRGN hRgn, //Handle der aktuellen Region
BOOL bRedraw, //Logo neu zeichnen
)
Funktion: Diese Funktion übergibt das Handle des erstellten Bereichs als Parameter an das Handle des aktuellen Formulars und zeichnet das Formular innerhalb des Bereichs.
Funktionsprototyp: CombineRgn(
HRGN hrgnDest, // Handle zum Herstellen einer Verbindung zum Zielbereich
HRGN hrgnSrc1, //Das erste Handle zum Herstellen einer Verbindung mit dem Quellbereich
HRGN hrgnSrc2, // Das Handle des zweiten Verbindungsquellbereichs
int fnCombineMode // Verbindungsmodus
)
Funktion: Diese Funktion führt zwei Bereiche zu einem neuen Bereich zusammen, wobei der Verbindungsmodus folgende Werte annehmen kann:
Parameterwerteffekt
RGN_AND erstellt eine neue Region aus dem Schnittpunkt der gemeinsamen Teile von Region 1 und Region 2
RGN_COPY erstellt eine Kopie von Region 1 als neue Region
RGN_DIFF verbindet die Teile, die zu Bereich 1, aber nicht zu Bereich 2 gehören, zu einem neuen Bereich
RGN_OR verbindet alle Teile von Bereich 1 und Bereich 2, also die Vereinigung
RGN_XOR. Verbinden Sie alle Teile von Bereich 1 und Bereich 2 und entfernen Sie die gemeinsamen Teile
2. Hohlform
Das Charakteristische an dieser Form ist, dass es sich um eine Form mit zwei Enden handelt und in der Mitte ein Teil ausgegraben ist. Fügen Sie beispielsweise den folgenden Code zur Delphi-Unit-Datei hinzu:
procedure TForm1.FormCreate(Sender: TObject);
var
FRegion3:THandle;
beginnen
Canvas.Font.Name:='Chinese Xingkai';//Legen Sie die Schriftart fest
Canvas.Font.Size:=100;//Legen Sie die Schriftgröße fest
BeginPath(Canvas.Handle); //Den Umriss auf Vanvas zeichnen lassen
TextOut(form1.Canvas.Handle,0,20,'Programm Frühling und Herbst',8);//Schneiden Sie den Bereich aus, der von den vier Wörtern „Programm Frühling und Herbst“ eingenommen wird.
EndPath(Canvas.Handle);
FRegion3:=PathToRegion(Canvas.Handle);//Weisen Sie dem Formular die obige Region zu
SetwindowRgn(Handle,FRegion3,True);//Zeichnung starten
Ende;
Hier kommen vor allem drei API-Funktionen zum Einsatz:
Funktionsprototyp: BOOL BeginPath (HDC hdc //Handle der Geräteumgebung)
Funktion: Starten Sie den Empfang der Pfadtrajektorie der aktuellen Geräteumgebung.
Funktionsprototyp: BOOL EndPath(HDC hdc //Handle der Geräteumgebung)
Funktion: Stoppen Sie den Empfang und weisen Sie die empfangene Pfadtrajektorie dem Handle der aktuellen Geräteumgebung zu
Funktionsprototyp BOOL TextOut(
HDC hdc,//Handle des Gerätekontexts
int nXStart,//X-Koordinate der Startposition
int nYStart,//Y-Koordinate der Startposition
LPCTSTR lpString,//String-Adresse
int cbString //Die Anzahl der in der Zeichenfolge enthaltenen Zeichen (beachten Sie, dass ein chinesisches Zeichen zwei Zeichen einnimmt)
)
Funktion: Zeichne die angegebene Zeichenfolge an der angegebenen Position.
Zusammenfassung: Der kompetente Umgang mit APIs zum Programmieren ist eine sehr wichtige Fähigkeit und kann manchmal zu unerwarteten Ergebnissen führen. Die oben genannten Techniken sollen andere inspirieren. Ich hoffe, Sie können die verschiedenen Techniken voll ausschöpfen und Ihrer Fantasie freien Lauf lassen, um noch schillerndere Formen zu entwerfen und Ihre eigenen Programme zu verschönern.