Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten
Autor
Nachricht
blubablub_
Tutorial Leser
Tutorial Leser



Anmeldedatum: 20.06.2007
Beiträge: 31

Minimalgröße eines Fensters festlegen
Verfasst am: 09.11.2007, 13:32

Tag,
weiß jemand von euch wie ich eine Art 'Minimalgröße' einstelle, dass man beim resizen nich diese größe unterschreiten kann?

danke im voraus Smile

mfG
King of Chaos hat Folgendes geschrieben:
MAN REGT IHR KIDDIES MICH AUF!!!!
was hatt das mit Copy PAST ZUTUEN?!
wenn man was vom VT nachmacht ?!!!!!!!

enco hat Folgendes geschrieben:
Ja King of Chaos, da meldet sich der Richtige zu Wort ...
 
Hamtaro_
« Moderator »<b><font color=green>« Moderator »</font



Anmeldedatum: 06.05.2007
Beiträge: 217
Wohnort: NRW


Verfasst am: 09.11.2007, 14:01

Ich würde sagen, im OnResize Ereignis der Form einfach:
Code:
If Me.Width < 200 Then Me.Width = 200

irgend wie sowas...
Wie findet ihr meine Sig?
 
The-God-of-all_
Poster
Poster

Anmeldedatum: 20.05.2007
Beiträge: 170
Wohnort: App.Path


Verfasst am: 09.11.2007, 14:16

Die Lösung die Hamatro genannt hat ist möglich, aber eigentlich sehr unsauber. Wenn man das so macht und man dann versucht die Form kleiner zu machen dann flackert die Form weil sie kleiner wird und dann direkt wieder größer. Ich habe diese Lösung auch schon verwendet weil mir die saubere Lösung zu umständlich war, aber die saubere Lösung findet ihr hier.
 
blubablub_
Tutorial Leser
Tutorial Leser



Anmeldedatum: 20.06.2007
Beiträge: 31


Verfasst am: 10.11.2007, 12:41

so hatte ich mir das auch gedacht, aber es sieht doch sehr schlampig aus und ist sehr langsam.

hab da was anderes gefunden, aber da blick ich nich durch... Klick

hat jemand noch ne andere idee?
King of Chaos hat Folgendes geschrieben:
MAN REGT IHR KIDDIES MICH AUF!!!!
was hatt das mit Copy PAST ZUTUEN?!
wenn man was vom VT nachmacht ?!!!!!!!

enco hat Folgendes geschrieben:
Ja King of Chaos, da meldet sich der Richtige zu Wort ...
 
Jolo_
Coder
Coder



Anmeldedatum: 20.03.2007
Beiträge: 210


Verfasst am: 10.11.2007, 12:52


Diese Lösung ist doch recht einfach,

Das ganze packst du in ein modul:
Code:
Option Explicit

Private WinOldProcMinMax
Private Const GWL_WNDPROC = (-4)

' Die Nachricht WM_GETMINMAXINFO wird an ein Fenster
' geschickt, bevor es vergrößert bzw. verkleinert wird
Private Const WM_GETMINMAXINFO = &H24

Private lX1 As Long
Private lX2 As Long
Private lY1 As Long
Private lY2 As Long

Private Type POINTAPI
  x As Long
  y As Long
End Type

Private Type MINMAXINFO
  ptReserved As POINTAPI
  ptMaxSize As POINTAPI
  ptMaxPosition As POINTAPI
  ptMinTrackSize As POINTAPI  'Minimale Größe
  ptMaxTrackSize As POINTAPI  'Maximale Größe
End Type

Private Declare Function DefWindowProc Lib "user32" Alias _
  "DefWindowProcA" (ByVal hWnd As Long, ByVal wMsg As Long, _
  ByVal wParam As Long, ByVal lParam As Long) As Long

Private Declare Function CallWindowProc Lib "user32" Alias _
  "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
    ByVal hWnd As Long, ByVal Msg As Long, _
    ByVal wParam As Long, ByVal lParam 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

Private Declare Sub CopyMemory Lib "kernel32" _
  Alias "RtlMoveMemory" ( _
  ByVal Destination As Any, _
  ByVal Source As Any, _
  ByVal Length As Long)

Private Declare Sub CopyMemory1 Lib "kernel32" _
  Alias "RtlMoveMemory" ( _
  Destination As MINMAXINFO, _
  ByVal Source As Long, _
  ByVal Length As Long)

Private Declare Sub CopyMemory2 Lib "kernel32" _
  Alias "RtlMoveMemory" ( _
  ByVal Destination As Long, _
  Source As MINMAXINFO, _
  ByVal Length As Long)

und das:

Code:
' AufrufProzedur
' Am besten im Form_Load-Ereignis aufrufen
Public Sub SetMinMax(Form As Form, x1 As Long, _
  y1 As Long, x2 As Long, y2 As Long)
 
  WinOldProcMinMax = SetWindowLong(Form.hWnd, _
    GWL_WNDPROC, AddressOf WindowProcMinMax)
 
  lX1 = x1
  lX2 = x2
  lY1 = y1
  lY2 = y2
End Sub

' Normalzustand wiederherstellen
' WICHTIG! Vor dem Beenden der Form aufrufen
Public Sub UnloadMinMax(Form As Form)
  SetWindowLong Form.hWnd, GWL_WNDPROC, _
    WinOldProcMinMax
End Sub

' Hier kommen alle Nachrichten an, die an daß Fenster
' geschickt werden
Private Function WindowProcMinMax(ByVal hWnd As Long, _
  ByVal uMsg As Long, ByVal wParam As Long, _
  ByVal lParam As Long) As Long

  Dim ret As Long
  Dim MM As MINMAXINFO
 
  If uMsg = WM_GETMINMAXINFO Then
    CopyMemory1 MM, lParam, Len(MM)
    With MM
      .ptMinTrackSize.x = lX1
      .ptMinTrackSize.y = lY1
      .ptMaxTrackSize.x = lX2
      .ptMaxTrackSize.y = lY2
    End With
    CopyMemory2 lParam, MM, Len(MM)
    ret = DefWindowProc(hWnd, uMsg, wParam, lParam)
  Else
    ' Wenn andere Nachricht, dann "durchlassen"
    ret = CallWindowProc(WinOldProcMinMax, hWnd, uMsg, _
      wParam, lParam)
  End If
  WindowProcMinMax = ret
End Function


Dann das hier in den Code von der Form:
Code:
' Größeneinschränkung festlegen
Private Sub Form_Load()
  SetMinMax Me, 200, 200, 500, 500
End Sub

' WICHTIG: Normalzustand wiederherstellen
Private Sub Form_QueryUnload(Cancel As Integer, _
  UnloadMode As Integer)

  UnloadMinMax Me
End Sub


Da kannst du auch noch einstellen wie groß Cool

MfG Jolo ^^
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten
 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Wie kann ich mich bei euch anmelden?? 916 20.05.2002, 01:28
Keine neuen Beiträge Weiß nicht was ich Coden soll. 1395 21.04.2008, 16:39
Keine neuen Beiträge Project Binder - The Art Of Deception [Beta] [UPDATE!!!] 2170 08.11.2007, 19:02
Keine neuen Beiträge Eine kleine Frage an euch.. 1023 30.09.2007, 09:57
Keine neuen Beiträge So ne art Keygen/in txt box? 432 10.08.2007, 21:01
 


[ Time: 0.0782s ][ Queries: 92 (0.0328s) ][ GZIP on - Debug on ]