2016-10-05 2 views
1

Это РАБОТАЕТ, как ожидалось, на двух системах Windows 10 (на виртуальной машине, а другой - на ПК). Но на третьей системе (к сожалению, клиент) форма сводит к минимуму, а не сверху.Windows 10 сводит к минимуму программу, когда я звоню, чтобы установить ее на верхнюю

SetwindowPos (TargetForm.hwnd, HWND_TOP,0,0,0,0, SWP_NOMOVE Or SWP_NOSIZE) 

Форма (окно) минимизирует.

Любая идея, что может вызвать это?

Это программа VB6 (не смейтесь !, я зарабатывать на жизнь по этой программе :)

UPDATE:

Более подробную информацию о коде:

Set FormActive = frmToShow 
frmToShow.Show 
FormZorderSet frmToShow, Z_top 

If Not frmPrevious Is Nothing Then 
frmPrevious.Hide 
End If 

Public Function FormZorderSet(frmTarget As Form, Zorder As FormZorderType) As Long 

    FLAGS = SWP_NOMOVE Or SWP_NOSIZE 
    FormZorderSet = SetWindowPos(frmTarget.hwnd, Zorder, 0, 0, 0, 0, FLAGS) 

Global объявляет

Public 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 
    Const SWP_NOSIZE = &H1 
    Const SWP_NOMOVE = &H2 
    Const HWND_TOPMOST = -1 
    Const HWND_TOP = 0 
+2

Покажите нам API 'SetwindowPos' и объявляйте значения' HWND_TOPMOST', 'SWP_NOMOVE' и' SWP_NOSIZE', пожалуйста – wqw

ответ

0

Попробуйте использовать эту функцию ontop

'moudle code 
    Option Explicit 
    Public Const SWP_NOMOVE = 2 
    Public Const SWP_NOSIZE = 1 
    Public Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE 
    Public Const HWND_TOPMOST = -1 
    Public Const HWND_NOTOPMOST = -2 

    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 

    Public Function SetTopMostWindow(hwnd As Long, Topmost As Boolean) _ 
    As Long 

    If Topmost = True Then 'Make the window topmost 
     SetTopMostWindow = SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, _ 
      0, FLAGS) 
    Else 
     SetTopMostWindow = SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, _ 
      0, 0, FLAGS) 
     SetTopMostWindow = False 
    End If 
    End Function 

Тогда для использования

'use 
Dim lR As Long 

Private Sub Form_Load() 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
'set form to allways on top 
lR = SetTopMostWindow(Me.hwnd, True) 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
End Sub 

Это работает для меня в Windows 10 без него минимизируя мою программу.

+0

Вы можете использовать таймер, чтобы убедиться, что он остается на вершине – vbdevelp

+1

Посмотрите ближе. Это то же самое, что я использую. И помните, что моя функция работает на Windows 10. Просто на одном ПК с Windows 10 это не работает. –