'форма
Private Sub Command1_Click()
Call UpdateTest(Me)
End Sub
'внешний модуль
Public Function UpdateTest(frm As Form)
For k = 0 To 65000
DoEvents
frm.Label1.Caption = k
frm.Show
Next k
End Function
Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
Do
код..
Sleep 2
Doevents
Loop
For k = 0 To 65000
if k mod 1000 =0 then DoEvents
frm.Label1.Caption = k
frm.Show
Next k
Inferno писал(а):Возьми пример. Создай форму на ней по дефолту лейбл и комманд буттон. Засунь код ф форму и модуль. Посмотри на результат. Потом заремь в модуле DoEvents и посмотри еще раз.
Inferno писал(а):Есть окно с прогресс баром и внешняя функция для управления прогресс баром. Если функция находится в форме - никаких проблем с обновлением, если во вненшнем модуле, то в лучшем случае окно просто не обновляется. Можно конечно вставить в функцию Form.Show, но хотелось бы что-то более цивильное.
Private Declare Function GetInputState Lib "user32" () As Long
Private Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Sub 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)
Public Enum WindowState
SW_HIDE = 0
SW_MAXIMIZE = 3
SW_MINIMIZE = 6
SW_RESTORE = 9
SW_SHOW = 5
SW_SHOWMAXIMIZED = 3
SW_SHOWMINIMIZED = 2
SW_SHOWMINNOACTIVE = 7
SW_SHOWNA = 8
SW_SHOWNOACTIVATE = 4
SW_SHOWNORMAL = 1
End Enum
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_SHOWWINDOW = &H40
Private WindowIsActive As Boolean
Public Function Redraw(ByVal hWnd As Long, ByVal State As WindowState, ByVal OnTop As Boolean)
If Not GetInputState <> 0 Then DoEvents
If WindowIsActive OR Not OnTop Then
ShowWindow hWnd, State
Else
SetWindowPos hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
WindowIsActive = True
End If
End Function
If Not GetInputState <> 0 Then DoEvents
If GetInputState() Then DoEvents
Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 166