Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
MKN MKN вне форума

Ветеран


Сообщения: 2358
Благодарности: 559

Профиль | Отправить PM | Цитировать


Таймер обратного отсчёта на кнопке MessageBox_а

Как то эту задачу уже решали с помощью специальной DLL, что не удобно и лишено гибкости управления...
Но есть и другой способ, с помощью nsWindows плагина ( http://sourceforge.net/p/ifififi/code/HEAD/tree/ ) :
Код: Выделить весь код
!include "nsWindows.nsh"
;!include "LogicLib.nsh"
!define TimerMsgTitle "Заголовок сообщения"
Name "TimerMsgBox Example"
OutFile "TimerMsgBox.exe"
Var WINDOW
Var Time

!macro MessageBox out text title flags
 System::Call "user32::MessageBoxTimeout(i $HWNDPARENT, t '${text}', t '${title}', i ${flags}, i 0) i.s"
 Pop ${out}
 !macroend
 
 Section 
     StrCpy $Time 7
     ${NSW_CreateWindow} $WINDOW "Timer" 1018
     ${NSW_CreateTimer} OnTimer 1000
 !insertmacro MessageBox $0 "Какое то действие через :" "${TimerMsgTitle}" 0x40|0x1
 ;MessageBox MB_OK "Return Code: $0"
 ${If} $0 != 1
 MessageBox MB_OK "    Действие отменяется ! Выход."
 Quit
 ${EndIf}
 MessageBox MB_OK "       Начинаем какое то действие"
 SectionEnd

Function OnTimer
    ${If} $Time == 0
    	FindWindow $0 "#32770" "${TimerMsgTitle}"
        GetDlgItem $1 $0 1
        SendMessage $1 ${BM_CLICK} 0 0
        ${NSW_KillTimer} OnTimer
    ${Else}
        IntOp $Time $Time - 1
        FindWindow $0 "#32770" "${TimerMsgTitle}"
        GetDlgItem $2 $0 1
        SendMessage $2 ${WM_SETTEXT} 0 "STR: OK $Time sec"
        ;GetDlgItem $3 $0 65535
        ;SendMessage $3 ${WM_SETTEXT} 0 "STR:Осталось: $Time sec"
    ${EndIf}
FunctionEnd
Всё работает как надо, но есть пара не понятных моментов - во-первых после компиляции получаем сообщение :
!warning: Note: nsWindows.dll must be put in NSIS's Plugins Directory! (macro:_NSW_CreateWindow:17)
Хотя nsWindows.dll находится там где и положено !

во-вторых, зачем то создаётся файл в \NSIS\Plugins\nsWindows.tmp\nsWindows$insWindows.dll
и потом не удаляется...

Всё это дело исходит из nsWindows.nsh. Я пробовал три разных вариации nsWindows.nsh, но со всеми эффект одинаков.
(редактировать nsWindows.nsh я не решился...)

Что бы это значило и как это можно устранить ?

Последний раз редактировалось MKN, 27-05-2020 в 16:17.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:33, 21-09-2013 | #545