ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 22.05.2001

Diese Seite wurde zuletzt aktualisiert am 22.05.2001
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Dialog-Größe änderbar

Zurück...


Anzeige

(-hg) mailto:hg_sizeabledialog@aboutvb.de

Dialog-Fenster unterscheiden sich von normalen Fenstern (Forms) sich im Allgemeinen dadurch, dass ihre Größe nicht vom Anwender geändert werden kann, dass sie kein Icon in der Titelleiste enthalten, dass sie dort nur auch nur die Schließen-Schaltfläche aufweisen und somit weder maximierbar noch minimierbar sind, und dass sie nicht in der Taskleiste erscheinen. Solch ein Dialog-Fenster erhalten Sie, wenn Sie bei einem Form die Eigenschaft BorderStyle auf 3 ("3 - Fester Dialog"), die Eigenschaften MinButton, MaxButton und ShowInTaskbar auf False setzen (bzw. deren Voreinstellung so belassen), und das Icon löschen (im Eigenschaftenfenster in der Eigenschaft "Icon" den Text "(Symbol)" markieren und löschen).

Allerdings gibt es mittlerweile auch Dialog-Fenster, die im wesentlichen zwar den oben beschriebenen Kriterien entsprechen, deren Größe der Anwender jedoch abweichend von diesem Standard ändern kann. Dazu gehören beispielsweise die neuen Datei-Dialoge im Microsoft Office 2000 und in Windows 2000. Gerade bei solchen Dialogen, bei denen der Umfang ihres eigentlichen Inhalts nicht vorhersehbar ist, bringt die Möglichkeit der Größenänderung erheblichen Komfort für den Anwender - er kann sich so manche Blätterei durch den Inhalt (hier Datei-Listen) sparen. Leider werden Sie unter den bei einem Visual Basic-Form verfügbaren Rahmenstilen (BorderStyle) vergebens nach einer Möglichkeit suchen, ein solches Dialog-Form einzustellen.


Durch einen nachträglich per API gesetzten Rahmenstil können auch Dialog-Forms vom Anwender in der Größe geändert werden

Normalerweise werden Rahmenstile Windows-intern beim Erzeugen eines Fensters über Konstanten festgelegt. Die meisten dieser Stile (aber auch nicht immer alle) lassen sich auch nachträglich noch einem Fenster zuweisen. Der Rahmenstil, der für einen "dicken" Rahmen sorgt, der mit der Maus gezogen werden kann, und auch für den entsprechenden Eintrag im Systemmenü des betreffenden Fensters sorgt, ist WS_THICKFRAME.

Die Angaben des Rahmenstils wie auch noch weitere Fenster-Stilangaben werden in einem jedem Fenster eigenen Datenbereich abgelegt. Sie können diesen Bereich nicht so ohne weiteres direkt auslesen oder ändern. Dazu dienen die API-Funktionen MSDN-Library - API GetWindowLongGetWindowLong und MSDN-Library - API SetWindowLongSetWindowLong. Diese finden die gesuchte Stelle in dem Datenbereich anhand einer Index-Angabe - für die Standard-Fenster-Stile lautet dieser Index GWL_STYLE.

GetWindowLong liefert Ihnen zu einem Fenster-Handle (hWnd-Eigenschaft eines Forms) die dort eingetragene Stile-Kombination als Rückgabewert. Der Funktion SetWindowLong übergeben Sie einen neuen Stile-Wert als zusätzlichen Parameter. Da es sich bei diesem Wert jedoch um ein Bit-Feld handelt, können Sie nicht einfach, wie Sie es von einer Eigenschaft gewohnt sind, einen neuen Stil-Wert (etwa WS_THICKFRAME) zuweisen. Die bereits gesetzten Bits müssen erhalten bleiben, und lediglich das Bit, das den neu zuzuweisenden Stil repräsentiert, darf gesetzt werden. Dies erfolgt mit einer einfachen Oder-Verknüpfung (VB-Operator "Or"). Erst dann können Sie den manipulierten Stil-Wert per SetWindowLong setzen.

Damit das Visual Basic-Form die für es ungewohnte Manipulation überhaupt und auch sicher akzeptiert, muss das Form kurzzeitig unsichtbar gemacht (falls es nicht wie etwa während der Bearbeitung des Form_Load-Ereignisses noch unsichtbar ist) und per Aufruf der Refresh-Methode aktualisiert werden.

Die folgende Hilfsfunktion SizeableDialog fasst die Aufrufe von GetWindowLong und SetWindowLong, das Setzen des neuen Rahmenstils und die Kontrolle der Sichtbarkeit wie auch die Aktualisierung zusammen. Sie übergeben ihr das betreffende Form (MDIForms werden nicht akzeptiert). Der optionale Parameter NoIcon ist auf True voreingestellt. Er sorgt dafür, dass sicherheitshalber das Icon des Forms gelöscht wird, so dass Sie es im Eigenschaftenfenster beim Einstellen des BorderStyles auf 3 belassen können. Die übrigen oben erwähnten Einstellungen werden beim Setzen dieses BorderStyles bereits von VB automatisch passend voreingestellt.

Private Declare Function GetWindowLong Lib "user32" _
 Alias "GetWindowLongA" (ByVal hWnd As Long, _
 ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
 Alias "SetWindowLongA" (ByVal hWnd As Long, _
 ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Sub SizeableDialog(Form As Form, _
 Optional ByVal NoIcon As Boolean = True)

  Dim nStyle As Long
  Dim nRestoreVisible As Boolean
  
  Const GWL_STYLE = (-16)
  Const WS_THICKFRAME = &H40000

  If TypeOf Form Is MDIForm Then
    Err.Raise 380
  End If
  With Form
    If .Visible Then
      .Visible = False
      nRestoreVisible = True
    End If
    If NoIcon Then
      If .BorderStyle = 3 Then
        Set .Icon = Nothing
      End If
    End If
    nStyle = GetWindowLong(.hWnd, GWL_STYLE)
    nStyle = nStyle Or WS_THICKFRAME
    SetWindowLong .hWnd, GWL_STYLE, nStyle
    .Refresh
    If nRestoreVisible Then
      .Visible = True
    End If
  End With
End Sub

Die bei den als Beispiele angeführten 2000er Datei-Dialogen in der rechten unteren Ecke erscheinende Grifffläche zum Aufziehen des Fensters wird mit diesem Fensterstil nicht automatisch gesetzt. Sie müssen selbst für deren Vorhandensein sorgen. Ein dazu gebrauchsfertiges, komfortables UserControl finden Sie in der Rubrik "Komponenten" unter Grip mit Grips"Grip mit Grips".


Beispiel-Projekt und Modul modSizeableDialog (sizeabledialog.zip - ca. 5 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer