Results 1 to 2 of 2

Thread: Modifying form behavior in a multi-form app

  1. #1

    Thread Starter
    Member
    Join Date
    Jan 2001
    Posts
    36

    Modifying form behavior in a multi-form app

    I have a multi-form (non-MDI) app that I'm developing. When the user activates one of the forms in the app by clicking on it, all of the other forms in my app come to the top of the z-order. Is there any way to change this behavior? I would like to make it so that only the form that has been clicked comes to the foreground. I have tried to make an ActiveX .EXE with the thread per instance option out of the form that I'm creating multiple instances of, and this does create the effect that I'm looking for, but after creating 10 or 15 instances of the form, VB issues an "Out of memory" error.

    Any ideas?

    --Steve
    [email protected]

  2. #2
    I'm about to be a PowerPoster! Hack's Avatar
    Join Date
    Aug 2001
    Location
    Searching for mendhak
    Posts
    58,333
    When your users click on a specific form, do you want that form to be the topmost window? If so, then try this:
    VB Code:
    1. Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long,  ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
    2.  
    3. Private Const SWP_NOMOVE = 2
    4. Private Const SWP_NOSIZE = 1
    5. Private Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
    6. Private Const HWND_TOPMOST = -1
    7. Private Const HWND_NOTOPMOST = -2
    8.  
    9. Private Function SetTopMostWindow(hwnd As Long, Topmost As Boolean) As Long
    10.   On Error Goto ErrRtn
    11.    If (Topmost) Then
    12.       SetTopMostWindow = SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
    13.    Else
    14.       SetTopMostWindow = SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS)
    15.       SetTopMostWindow = False
    16.    End If
    17.    Exit Function
    18. ErrRtn:
    19. MsgBox "Error in SetTopMostWindow " & Err & " " & Error, vbExclamation + vbOKCancel
    20. End Function
    Then, in your forms put
    VB Code:
    1. Private Sub Form_GotFocus()
    2. SetTopMostWindow Me.hwnd, True
    3. End Sub
    4. Private Sub Form_LostFocus()
    5. SetTopMostWindow Me.hwnd, False
    6. End Sub
    I hope I'm properly understanding your question.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width