ThaKladd Skrevet 24. februar 2005 Del Skrevet 24. februar 2005 Hvordan stopper man en form slik at den ikke er mulig å dra ut av skjermbildet...? Lenke til kommentar
Jonas Skrevet 24. februar 2005 Del Skrevet 24. februar 2005 Siden det ikke finnes noe Form_Move-event, må man bruke subclassing for å mota en melding om at formen flyttes på. Lim dette inn i formen din: Option Explicit Private Sub Form_Load() SubclassForm Me End Sub Private Sub Form_Unload(Cancel As Integer) EndSubclassForm Me End Sub Public Sub Form_Move() If Me.Left < 0 Then Me.Left = 0 If Me.Left + Me.Width > Screen.Width Then Me.Left = Screen.Width - Me.Width If Me.Top < 0 Then Me.Top = 0 If Me.Top + Me.Height > Screen.Height Then Me.Top = Screen.Height - Me.Height End Sub Og dette i en modul: Option Explicit Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong 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 SetClipboardViewer Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long Private Const WM_MOVE = &H3 Private Const WM_MOVING = &H216 Private Const GWL_WNDPROC = (-4) Private PrevProc As Long Private MyForm As Form Public Sub SubclassForm(F As Form) Set MyForm = F PrevProc = SetWindowLong(F.hwnd, GWL_WNDPROC, AddressOf WindowProc) End Sub Public Sub EndSubclassForm(F As Form) SetWindowLong F.hwnd, GWL_WNDPROC, PrevProc End Sub Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If uMsg = WM_MOVING Or WM_MOVE Then Call MyForm.Form_Move End If WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam) End Function Lenke til kommentar
DevN Skrevet 24. februar 2005 Del Skrevet 24. februar 2005 Finnes det ikke en annen metode, slik at man unngår flimringen? Lenke til kommentar
Jonas Skrevet 24. februar 2005 Del Skrevet 24. februar 2005 (endret) Det var mye flimring med bare WM_MOVING, men straks jeg la til WM_MOVE ble det bedre, men jeg regner med at det er litt forskjellig fra maskin til maskin. Jeg tror ikke det finnes noe flere events man kan legge til. Mulig jeg er helt på jordet, men disse kommer rett fra windows, og det finnes ikke noe bak der som leverer alt raskere. Edit: Jo, det finnes nok andre måter, som bla. Winamp bruker, men jeg vet ikke om den/de. Endret 24. februar 2005 av Jonas Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå