Rubrik: Controls · UserControl | VB-Versionen: VB5, VB6 | 07.07.03 |
Datei-Öffnen-Dialog im Eigenschaftenfenster Dieser Tipp zeigt eine Möglichkeit, wie sich im Eigenschaftenfenster eines UserControls beim Klick auf "..." z.B. der Datei-Öffnen-Dialog anzeigen lässt. | ||
Autor: Martoeng | Bewertung: | Views: 34.441 |
www.martoeng.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Wenn Sie selbst ActiveX-Steuerelemente (UserControls) erstellen, haben Sie sich sicherlich auch schon einmal gefragt, wie man es schafft, dass im Eigenschaftenfenster des Controls beim Klick auf den "..."-Knopf z.B. der Windows Standard-Dialog zum Auswählen einer Datei erscheint.
Der "..."-Button wird im Eigenschaftenfenster bekanntlich nur dann angezeigt, wenn man für die Eigenschaft eine Eigenschaften-Seite (PropertyPage) erstellt und diese über "Prozedurattribute" entsprechend auch zugeordnet hat oder es sich um die Font-, StdPicture- oder OLE-Color Eigenschaft handelt.
Nehmen wir einmal an, Sie haben ein UserControl mit der Eigenchaft "Filename" erstellt. Verwendet der Anwender nun das UserControl auf einer Form und öffnet das VB-Eigenschaftenfenstzer soll rechts der "..."-Button zur Auswahl einer Datei erscheinen.
Gehen Sie hierzu wie folgt vor:
- Fügen Sie dem UserControl eine neue Eigenschaftenseite hinzu (PropertyPage1)
- Öffnen Sie den Dialog "Prozedurattribute", indem Sie das Codefenster des UserControls öffnen und dann den Befehl "Extras - Prozedurattribute" wählen
- Suchen Sie in der Liste nach der Eigenschaft "Filename" und klicken dann auf die Schaltfläche "Weitere..."
- Öffnen Sie die ComboBox "Eigenschaftkatalog-Seite" und klicken auf "PropertyPage1"
Jetzt würde der Anwender beim Klick auf den "..."-Button eine leere Eigenschaften-Seite angezeigt bekommen. Wir möchten allerdings keine "echte" Eigenschaften-Seite, sondern den Datei-Öffnen-Dialog. Keine Angst, wir müssen den Dialog jetzt nicht nachbauen
Beim Öffnen der Eigenschaftenseite wird gleichzeitig auch das Ereignis "EditProperty" ausgelöst. Da die Eigenschaftsseite auch nur ein Windows-Fenster ist, lässt es sich auch genauso leicht modifizieren. Zu beachten ist nur, dass die Eigenschaftsseite selbst zwei Ebenen höher liegt als das PropertyPage-Objekt in VB. Deshalb benutzen wir "GetParent" um an das höhergelegene Element zu gelangen. Zunächst blenden wir die Seite über "ShowWindow" aus, dann können Sie beliebigen Code ausführen und zum Schluss muss die Eigenschaftsseite geschlossen werden. Dies ist enorm wichtig, da sonst beim nächsten Klick auf ein Steuerelement in der IDE das Fenster wieder angezeigt wird, mit einer Meldung, dass es für dieses Steuerelement keine Eigenschaftsseiten gibt. Das ist schon der komplette Code. Eigentlich einfach, nicht wahr?
Fügen Sie im Codefenster der Eigenschaftenseite (PropertyPage1) folgenden Code ein:
Option Explicit ' Benötigte API-Deklarationen Private Const WM_CLOSE = &H10 Private Const SW_HIDE = 0 Private Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long Private Declare Function ShowWindow Lib "user32" ( _ ByVal hwnd As Long, _ ByVal nCmdShow As Long) As Long Private Declare Function GetParent Lib "user32" ( _ ByVal hwnd As Long) As Long
Private Sub PropertyPage_EditProperty(PropertyName As String) If PropertyName = "Filename" Then Dim sFile As String Dim nHWnd As Long ' Fensterhandle ermitteln nHWnd = GetParent(GetParent(PropertyPage.hwnd)) ' Fenster verstecken ShowWindow nHWnd, SW_HIDE ' Datei-Öffnen-Dialog anzeigen sFile = GetOpenName("*.*|*.*", "") ' Fenster schließen SendMessage nHWnd, WM_CLOSE, 0, 0& ' Falls Dateiname ausgewählt wurde, ' jetzt dem Control zuweisen If sFile <> "" Then SelectedControls(0).Filename = sFile End If End Sub
Anmerkung:
Die Funktion "GetOpenName" stammt in unserem Beispiel aus dem Workshop Mit VB die Windows-Standarddialoge nutzen