Hej Det finns två sätt att visa formulär i VB. Modalt och icke-modalt. Så här är koden: Vänta nu, nu har jag nog missförståt dig litegrann.Ha ett öppet formulär i ett program för visning av status på
Jag Jobbar i ett annat program som använder sig av VB att köra vissa funktioner.
Nu vill jag att ett formulär alltid ska vara "öppet" i detta programmet för att visa statusen för ett visst objekt med hjälp av olika bilder. Jag har testat att koppla det till en commandbutton, så när jag trycker på denna så öppnas formuläret med rätt bild enligt statusen. Det som nu är problemet är att så länge formuläret är öppet så har det "Focus" vilket medför att jag kan inte aktivera några andra knappar i programmet förrän jag har stängt ner formuläret.
Hur gör jag för att det alltid ska vara öppet + att det inte är i focus men ska ändå byta bilderna i formuläret efter hand som statusen ändras på objektet.
MVH
UbbeSv: Ha ett öppet formulär i ett program för visning av status p
<code>
Form1.Show vbModal 'modalt
Form1.Show 'icke-modalt
</code>
Ifall formen visas modalt så väntar programmet tills fönstret är stängt innan det fortsätter köra. Ifall det inte visas modalt fortsätter programmet att köra med en gång det har visat formuläret.
Illustrerar skillnaden:
<code>
'modalt
Dim I%
I=3
Form2.Show vbModal
Debug.Print I
</code>
Ifall du kör detta exempel (använd en tom form som Form2) kommer du upptäcka att I inte skrivs ut i direktfönstret innan du stängt Form2.
<code>
'icke-modalt
Dim I%
I=3
Form2.Show
Debug.Print I
</code>
När du kör detta exempel kommer du se att I skrivs ut i direktfönstret redan innan du stängt Form2.
Alltså för att svara på din fråga: Låt oss säga du har en form frmMain som huvudform. På den har du en knapp cmdShowStatus. Ett tryck på den knappen visar form frmStatus icke-modalt. I frmStatus finns den publika subrutinen ChangeStatus. När status ändras kallar du på den funktionen.
<code>
' Globalt, i en modul
Public Enum eStatus
eStatus1
eStatus2
End Enum
' I frmMain
Public Sub cmdShowStatus_Click()
frmStatus.Show
frmStatus.ChangeStatus eStatus1
End Sub
' I frmStatus
Public Sub ChangeStatus()
... 'valfri kod
End Sub
</code>
/JörgenSv: Ha ett öppet formulär i ett program för visning av status p&a
Menar du att du vill att ditt VBprogram alltid ska synas fast du använder ett annat program?
Isåfall måste du använda dig av lite API's
<code>
' I modul
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, y, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const TOPMOST_FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Public Sub VisaNormalt(hwnd As Long)
SetWindowPos hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS
End Sub
Public Sub VisaOnTop(hwnd As Long)
SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS
End Sub
'frmStatus
Public Sub Form_Load()
VisaOnTop Me.hWnd
End Sub
</code>
/Jörgen