Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
400to404
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
400to404
400to404
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Userform speziell maximieren?! Hajo?

Userform speziell maximieren?! Hajo?
Andre
Hi Hajo,
ich hab dein Beispiel zum Thema "Userform maximieren" auf deiner Site gefunden, aber hätte da mal ´ne Frage:
Kann ich irgendwie und irgendwo beim Maximieren festlegen wie groß die Userform werden soll? Also sollen die Userformen nicht gleich den ganzen Bildschirm ausüllen, sondern ich möchte die Größe selbst bestimmen.
Hab mir das Beispiel und dessen Codes angeschaut, aber keine entsprechenden Zeilen gefunden, die die Größe beim Maximieren angeben.
Kannst du mir sagen, welche Zeilen ich ggf. ersetzen müßte, um das Problem zu lösen?
Gruß Andre
AW: Userform speziell maximieren?!
Hajo_Zi
Hallo Andre
es gibt ja zwei Beispiele und soweot ich mich erinnere gehen beide Beispiele von der Bildschirmauflösung am Entwicklungsrechner aus. Bedeckt die Userform am Entwicklungsrechner nur 80% des Bildschirmes ist dies auch am aktuellen Bildschirm. Dazu wird die Bildschirmauflösung ausgelesen und mit dem Original verglichen und daraus ein Faktor gebildet.


AW: Userform speziell maximieren?!
Andre
Okay, sowas ähnliches hab ich mir schon fast gedacht, aber mein Problem ist erstmal nicht abhängig von der Bildschirmauflösung.
Ich lasse die Benutzer meiner Datei mit einer zusätzlichen "Statusleiste" (2.Userform!) arbeiten, in der alles Mögliche angezeigt wird. Nutze ich nun die Maximierung, überdeckt die maximierte Userform meine "Statusleiste" und den Titel der Application im oberen Bereich. Das würde ich gerne vermeiden und die Userformen lediglich nur soweit maximieren lassen, bis sie den Zwischenraum zwischen Menüleiste oben und "Statusleiste" unten ausfüllt.
Hatte an Zeilen gedacht wie "Userform1.height = ?" und "Userform1.width = ?" beim Maximieren.
Gruß Andre
Anzeige
AW: Userform speziell maximieren?!
Hajo_Zi
Hallo Andre
ich vermute mal da machts Du noch enen Denkfehler. Ziehe doch von der ermittelten Bildschirmgröße einen festen Wert ab bzw. multipliziere sie mit einem festen Faktor (0,9)


AW: Userform speziell maximieren?!
Andre
Wenn das meinen gewünschten Effekt bewirkt, okay.
Sorry, aber mein Problem dabei bleibt dann: wie und vor Allem wo?
Die Zeilen dafür müßten doch irgendwo im Klassenmodul stecken oder?
hier mal das Klassenmodul:
Option Explicit
'Code von Thomas Risi, Softwareentwicklung
'thomas.risi@t-online.de
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
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
Const WS_BORDER = &H800000
Const WS_CAPTION = &HC00000
Const WS_CHILD = &H40000000
Const WS_HSCROLL = &H100000
Const WS_MAXIMIZE = &H10000000
Const WS_MAXIMIZEBOX = &H10000
Const WS_MINIMIZEBOX = &H20000
Const WS_THICKFRAME = &H40000
Const WS_SIZEBOX = WS_THICKFRAME
Const WS_SYSMENU = &H80000
Const WS_EX_ACCEPTFILES = &H10
Const WS_EX_STATICEDGE = &H20000
Const WS_EX_TOOLWINDOW = &H80
Const WS_EX_TRANSPARENT = &H20
Const WS_EX_WINDOWEDGE = &H100
Const GWL_STYLE = (-16)
Const GWL_EXSTYLE = (-20)
Dim WithEvents myUserForm As MSForms.UserForm
Dim myHandle&, lStyle&, Border&
Dim MaxBox As Boolean, MinBox As Boolean
Public Enum BorderStyles
xlFest = 0
xlÄnderbar = 1
End Enum
Public Sub Create(UF As MSForms.UserForm)
Dim ret&
Set myUserForm = UF

myHandle = GetHandle

SetWindowLong myHandle, GWL_STYLE, GetStyle Or WS_CAPTION Or Border

If MaxBox Then SetWindowLong myHandle, GWL_STYLE, GetStyle Or WS_MAXIMIZEBOX
If MinBox Then SetWindowLong myHandle, GWL_STYLE, GetStyle Or WS_MINIMIZEBOX

SetWindowLong myHandle, GWL_EXSTYLE, GetStyle And WS_EX_STATICEDGE And WS_EX_WINDOWEDGE

End Sub

Private Function GetHandle() As Long
Select Case Int(Val(Application.Version))
Case 8 'Excel 97
GetHandle = FindWindow("ThunderXFrame", vbNullString)
Case 9 'Excel 2000
GetHandle = FindWindow("ThunderDFrame", vbNullString)
Case 10 'Excel XP
GetHandle = FindWindow("ThunderDFrame", vbNullString)
End Select
End Function

Public Property Get hWnd() As Boolean
hWnd = myHandle
End Property
Public Property Get MaxButton() As Boolean
MaxButton = MaxBox
End Property
Public Property Let MaxButton(Status As Boolean)
MaxBox = Status
End Property
Public Property Get MinButton() As Boolean
MinButton = MinBox
End Property
Public Property Let MinButton(Status As Boolean)
MinBox = Status
End Property
Public Property Let BorderStyle(Style As BorderStyles)
Select Case Style
Case 0: Border = 0
Case 1: Border = WS_SIZEBOX
End Select
End Property

Private Function GetStyle() As Long
GetStyle = GetWindowLong(myHandle, GWL_STYLE)
End Function


Private Sub Class_Initialize()
MaxBox = False
MinBox = False
End Sub

mfg Andre
Anzeige
AW: Userform speziell maximieren?!
Hajo_Zi
Hallo Andre
die Datei ist mir verloren gegangen. Ich bin eigentlich auch der Auffasung das Sie nicht mehr auf meiner HP ist. Kannst Du mir mal den Dateinamen mitteilen.


AW: Userform speziell maximieren?!
Andre
Ist auch schon ´ne Weile her, aber soweit ich weiß, hieß die Datei: "uf_minmax_button.xls"!
AW: Userform speziell maximieren?!
Hajo_Zi
Hallo Andre
dann haben wir uns über zweii völlig unterschiedliche Dinge unterhalten (dabei ist mir nur aufgefallen das meine HP einen Fehler hat)
Die Datei ist nicht von meiner HP, die habe ich irgendwann mal im Forum gepostet. Ich hbe das Beispiel von Thomas Risi nur in eine Datei umgesetzt. Es ging dabei um eine Userform mit Min/Max Button.
Dazu kann ich Dir leider keine Auskunft geben.


Anzeige
Trotzdem Danke. o.T.
Andre
AW: Userform speziell maximieren?! Hajo?
harry
hi andre,
ich mach das so:
in der allgemeinen deklaration:
'Bildschirmauflösung
Private Declare Function GetSystemMetrics Lib _
"user32" (ByVal nIndex As Long) As Long
Private Const SM_CYSCREEN As Long = 1
Private Const SM_CXSCREEN As Long = 0
'Position
Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, ByVal _
lpWindowName As String) As Long
Private Declare Function MoveWindow Lib "user32" (ByVal hwnd _
As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, _
ByVal nHeight As Long, ByVal bRepaint As Long) As Long
dann:

Private Sub UserForm_Activate()
BildschirmBreite = GetSystemMetrics(SM_CXSCREEN)'hier größe ändern, z.b. /2
BildschirmHöhe = GetSystemMetrics(SM_CYSCREEN)'hier größe ändern, z.b. /2
wHandle = FindWindow(vbNullString, Me.Caption)
MoveWindow wHandle, 0, 0, BildschirmBreite, BildschirmHöhe, 1
End Sub

hoffe, es hilft
liebe grüße,
harry
Anzeige
AW: Userform speziell maximieren?! Hajo?
Andre
Das machst du aber nicht zufällig auch mit Min/Max-Button? Denn dein Beispiel zeigt die Userform generell in der Größe.
Aber danke trotzdem.
Gruß Andre
AW: Userform speziell maximieren?! Hajo?
harry
wie meinst du das?
bei BildschirmBreite bzw. BildschirmHöhe die werte ändern und ich kann die uf in beliebiger größe laden.
AW: Userform speziell maximieren?! Hajo?
Andre
Schon klar, aber ich hätte gerne einen Maximierungs-Button (wie bei jedem Windowsfenster!) auf der Userform, der deinen Code erst bei Bestätigung ausführt!
Ansonsten macht der Code schon das Richtige.
Gruß Andre
AW: Userform speziell maximieren?! Hajo?
Andre
So ungefähr, nur mit den typischen Max/Min Button neben dem "X" oben rechts!
Aber ich denke, dass wird nichts.
Danke für deine Hilfe.
Gruß Andre

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige