Übersicht
0001 Always on top
Mit der folgenden Funktion läßt sich eine Form dauerhaft im Vodergrund halten. Diese Eigenschaft kann für die entsprechende Form mit dem Parameter True / False ein- bzw. ausgeschaltet werden. Um die Funktion zu nutzen muß die API-Deklaration "SetWindowPos" im Quellcode eingebunden sein: ' Deklaration: Private Declare Function SetWindowPos Lib "user32" ( _ ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _ ByVal X As Long, ByVal Y As Long, ByVal W As Long, ByVal H As Long, _ ByVal wFlags As Long) As Long Const conHwndTopmost = -1 Const conHwndNoTopmost = -2 ' Setzt eine Form permanent in den Vordergrung (prop=True) ' prop=False schaltet diese Eigenschaft wieder aus Public Sub always_on_top(ByVal hwnd As Long, ByVal prop As Boolean) Dim mode As Long mode = IIf(prop, conHwndTopmost , conHwndNoTopmost ) ' Effekt ein- / ausschalten SetWindowPos hwnd, mode, 0, 0, 0, 0, &H13 End Sub ' Aufruf: always_on_top (Me.hwnd, True) | |
Autor: ralf schlegel |
0002 Windows Sidebar (transparente Formen)
Windows Vista Sidebar im Eigenbau Ausserdem unterstützt das Beispiel den Transparenzeffekt für Formen! Das Handling in ist einem eigenständigen Modul abgelegt und kann und darf so direkt für eigene Anwendungen genutzt werden... | |
Autor: gino dola |
0003 Ein Form (Fenster) richtig öffnen - die Falle des Form_Initialize!
Drei Ereignisse werden durchlaufen, wenn ein Form das erste Mal durch "Form1.Show" geöffnet wird, und zwar in der Reihenfolge: 1.) Private Sub Form_Initialize() 2.) Private Sub Form_Load() 3.) Private Sub Form_Activate() Vielen Programmierern ist das genaue Verhalten dieser Ereignisse nur bedingt klar, deshalb hier ein Versuch zur Klärung: 1.) Das Ereignis Form_Initialize dient, wie der Name schon sagt, ausschließlich zum Initialisieren. Verwenden Sie diesen Abschnitt z.B. zum Laden von DLLs, Öffnen von Log-Files, oder Datenbanken, Initialisieren von Variablen oder Klassen.
2.) Das Form_Load Ereignis wird jedesmal beim Öffnen durchlaufen und sollte deshalb hauptsächlich Code zur Gestaltung der Oberfläche und zum Positionieren des Form enthalten. Es wird nicht durchlaufen, wenn ein Form durch Form1.Hide nur ausgeblendet wurde und später durch Form1.Show wieder sichtbar wird. 3.) Das Form_Activate Ereignis wird jedesmal ausgelöst, wenn ein Form erneut den Focus erhält. D.h.: wenn der Benutzer von einem Form zum nächsten wechselt, indem er es mit der Maus anklickt. Dazu muß das Form also nicht geschlossen gewesen sein. | |
Autor: ralf schlegel |
0004 Alle Forms (Fenster) einer Anwendung richtig schließen
Um alle Fenster einer Anwendung zu schließen, in der Regel wird dies zum Beenden der Anwendung benötigt, bedient man sich der Forms.Count Eigenschaft. Diese enthält die Anzahl aller geöffneten Forms (auch die eventuell unsichtbaren) als 0-basierter Zähler; d.h.: die Anzahl der tatsächlichen geladenen Forms entspricht Forms.Count - 1 Wichtig zu wissen: die Forms Colletion selbst ist eine flache Struktur: das Hauptform ihrer Anwendung muß nicht zwingend Forms(0) sein! Im QueryUnload Ereignis Ihres Hauptfensters schließen Sie also alle Forms in einer Schleife mit Ausnahme der eigenen, denn diese wird am Ende des Ereignisses ohnehin geschlossen. Sollten Sie dennoch das eigene Fenster innerhalb des Ereignisses durch Unload Forms(i) schließen, so kann es zum Programmabsturz kommen, wenn Sie in Ihrem Programm Benutzersteuerelemente oder SubClassing verwenden. Da hilft dann auch kein On Error Resume Next weiter, denn das QueryUnload Ereignis wird u. U. recursiv aufgerufen! Stellen Sie also sicher, dass Sie sich nicht selbst den Boden unter den Füßen wegziehen: Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Dim i As Long ' weitere Anweisungen ' . ' . ' . For i = Forms.Count - 1 To 0 Step -1 If Forms(i).hWnd <> Me.hWnd Then Unload Forms(i) Next i End Sub Ergänzung: 1.) Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) 2.) Private Sub Form_Unload(Cancel As Integer) 3.) Private Sub Form_Terminate() Rufen Sie in Form_Unload und Form_Terminate keine Eigenschaften der implementierten Controls oder des Form selbst auf, da das Form sonst wieder geladen wird; hier darf nur noch reiner Basiccode stehen, z.B. das Schließen einer Dateinbank oder das Löschen von temporären Dateien. In der Regel können Sie dies aber alles im Ereignis Form_QueryUnload erledigen. | |
Autor: ralf schlegel |