Müssen Formulare immer rechteckig sein?
Samstag 13. Februar 2010 von Andreas Vogt
Hallo,
ich hab mich in letzter Zeit ein wenig mit den Möglichkeiten der GDI32.dll API Bibliothek befasst. Die GDI (Graphik Device Interface) beinhaltet Funktionen um z.B. das Aussehen eines Formulares zu verändern. Ob dreieckig, rund, abgerundet etc ist alles möglich. Auch Kombinationen von Formen sind zulässig.
OK, zugegeben, braucht eigentlich niemand. Aber man darf auch schon mal beim Design der Formulare etwas mehr an Kreativität zeigen als sonst.
Ich möchte euch jetzt zeigen wie ihr Coole runde Formulare erstellt.
Zuerst braucht ihr einen Hintergrund. Benützt dazu euer Grafikprogramm wie z.B. Photoshop etc. und erstellt eine Grafik. macht diese gleich etwas größer als das spätere Formular. Eine Verlaufsebene einfügen, darauf mit einem coolen Stil ein Kreis malen, in den Kreis ein weiterer Kreis mit weissem Hintergrund malen. Dies gibt der Rand eures Formulars.
Dann erstellt ein leeres Formular.
Plaziert darauf eure Steuerelemente wie gewohnt, denkt aber an die spätere Formular form.
Dann kommt der Code-Teil dran. Wir benötigen 3 API Funktionen, SetWindowRgn(), DeleteObject() und CreateEllipticRgn().
Hier der Deklarationsteil:
Private Declare Function SetWindowRgn _
Lib "user32" (ByVal hWnd As Long, _
ByVal hRgn As Long, _
ByVal bRedraw As Boolean) As Long
Private Declare Function DeleteObject Lib "gdi32" ( _
ByVal hObject As Long) As Long
Private Declare Function CreateEllipticRgn Lib "gdi32.dll" ( _
ByVal X1 As Long, _
ByVal Y1 As Long, _
ByVal X2 As Long, _
ByVal Y2 As Long) As Long
Dim Region1 As Long
Dann im Ereignis “Beim Laden” wird die Form geändert. Die Koordinaten müsst ihr entsprechend anpassen, damit es bei euch passt.
Private Sub Form_Load()
X1 = 29
Y1 = 50
X2 = 533
Y2 = 552
Me.Picture = CurrentProject.Path & "\hintergrund.gif"
Region1 = CreateEllipticRgn(X1, Y1, X2, Y2)
SetWindowRgn Me.hWnd, Region1, True
End Sub
Wenn das Formular entladen wird sollte auch die Form zurückgesetzt werden:
Private Sub Form_Unload(Cancel As Integer)
DeleteObject Region1
End Sub
Hier noch ein Beispiel wie das ganze aussehen könnte:

Auf www.vbAchiv.net findet ihr zu den API-Funktinonen und zu weiteren Funktionen der GDI Erklärungen.
Ein komplexeres Beispiel als Download findet ihr auf access-o-mania
AV 2010
Dieser Beitrag wurde erstellt am Samstag 13. Februar 2010 um 15:09:19 und abgelegt unter Formulardesign, VBA Code. Kommentare zu diesen Eintrag im RSS 2.0 Feed. Sie können einen Kommentar schreiben, oder einen Trackback auf Ihrer Seite einrichten.
PDF Version