Solved

Making a Form Always on Top

Posted on 1998-11-13
12
254 Views
Last Modified: 2006-11-17
Hello I need a function that will make a passed in form always on top of the application, but not all windows.  Basically like a Find window.
0
Comment
Question by:cavacasp
12 Comments
 
LVL 9

Expert Comment

by:Dalin
Comment Utility
cavacasp
Try:
In form 1,
Form2.Show, me

This will keep form2 always on top of form1
Regards
Dalin

0
 
LVL 1

Expert Comment

by:MAVERICK
Comment Utility
Dont you use VBmodal ????

0
 

Author Comment

by:cavacasp
Comment Utility
That does not work it is giving me an invalid procedure call on that line.  One thing that I did not mention was that these forms are MDI Child Forms.  On thing that also is that the person needs to be able to switch between the two forms, just like they can on a Find form.
0
 
LVL 14

Expert Comment

by:waty
Comment Utility
Use this :

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

Sub AlwaysOnTop(frmID As Form, OnTop As Integer)
   ' *** Pass any non-zero value to Place on top
   ' *** Pass zero to remove top-mostness

   Const SWP_NOMOVE = 2
   Const SWP_NOSIZE = 1
   Const flags = SWP_NOMOVE Or SWP_NOSIZE
   Const HWND_TOPMOST = -1
   Const HWND_NOTOPMOST = -2

   If OnTop Then
      OnTop = SetWindowPos(frmID.hWnd, HWND_TOPMOST, 0, 0, 0, 0, flags)
   Else
      OnTop = SetWindowPos(frmID.hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, flags)
   End If

End Sub

0
 

Author Comment

by:cavacasp
Comment Utility
Two things

1) Does not work with MDI Child forms.  I can get around this if necessary even though I would prefer to make the second form a MDI Child form.

2) I only want the Always on top attribute to be application wide.  If you pull up a find box it only stays on top of the application not every program that is currently running on the computer.

0
 

Expert Comment

by:SANTOSMI
Comment Utility
use this function

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


when load a form use:

SetWindowPos hwnd, -1, 0, 0, 113, 290, conSwpNoActivate Or conSwpShowWindow

0
What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

 

Author Comment

by:cavacasp
Comment Utility
What is
conSwpNoActivate Or conSwpShowWindow
I'm getting variable not defined when it gets to this point.

Also how would I go about taking the always on top attribute off.
0
 

Author Comment

by:cavacasp
Comment Utility
I need to get and answer to this question. So I have to reject it because you are not answering my comment.  If you can answer my comment then feel free to resubmit and I'll be happy to award you the points.
0
 
LVL 1

Expert Comment

by:MAVERICK
Comment Utility
Now If I understand this correctly.....
1. You are using a MDI form
2. You want a specific MDI Child to remain on top

then there is a simple answer
Private Sub form_lost focus
form.Zorder=0
End sub

Is this what you want??


0
 

Author Comment

by:cavacasp
Comment Utility
Which form would I put this code on the one that I want to stay on top or the one beneath it.
0
 
LVL 1

Expert Comment

by:MAVERICK
Comment Utility
Oh sorry.... the one you want to keep on top.. :) I guess I should have mentioned that !


0
 
LVL 1

Accepted Solution

by:
movieguy earned 50 total points
Comment Utility
' Declare the following API function in a module
Declare Function SetWindowWord Lib "User32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal nNewWord As Long) As Long

' Place the following code in the load event of the Mdi child
' form you want to keep on top of all the other child
' forms.
' Assuming the name of the Mdi main form is mdiMain.  You will
' have to change names as needed.
SetWindowWord Me.hWnd, -8, mdiMain.hWnd

0

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

Introduction While answering a recent question about filtering a custom class collection, I realized that this could be accomplished with very little code by using the ScriptControl (SC) library.  This article will introduce you to the SC library a…
Article by: Martin
Here are a few simple, working, games that you can use as-is or as the basis for your own games. Tic-Tac-Toe This is one of the simplest of all games.   The game allows for a choice of who goes first and keeps track of the number of wins for…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now