Цитата MKN:
Эээээ.... А чего я такого несбыточного спросил ? »
|
Дело не в "несбыточности", а в том, что такой функционал писать лучше отдельной DLL, почему - уже объяснили, тонна кода, который при всём необходимом функционале будет работать через костыли. Но это касается не всех элементов, а конкретно твоего - "статика", т.к. по стандарту статик не обрабатывает перемещение курсора мыши над собой, а отловить такое можно только (если делать правильно, а не "лишь бы работало") через подмену стандартной процедуры элемента, в которой и будет находиться весь код. Может, я как-то неправильно выражаюсь, "уж простите, не программисты мы"
Короче говоря, в твоём вопросе в пределах NSIS-кода для элемента статика - только таймер
Может, конечно, найдёшь другой метод, но я не в курсе, как это ещё можно сделать
Цитата MKN:
Как бы его причесать и упростить ? »
|
Ну, если брать этот код - я бы посоветовал удалить 2 лишних элемента, у тебя для одной кнопки создаётся аж 3 элемента, зачем, когда можно обойтись одним?
Скрытый текст
Код:
![Выделить весь код](images/misc/selectcode.png)
!include "MUI2.nsh"
Page custom nsDialogsPage
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
OutFile "click_pict.exe"
Var dlg
Var Click
Var IMAGE
Var IMAGECTL
Var IMAGE2
Var IMAGECTL2
Function OnTimer
System::Alloc 16
Pop $0
System::Call USER32::GetCursorPos(ir0)
System::Call *$0(i.r1,i.r2)
System::Free $0
System::Call USER32::WindowFromPoint(ir1,ir2)i.r1
${If} $1 = $IMAGECTL
System::Call USER32::LoadCursor(i,i32649)i.s
System::Call USER32::SetCursor(is)
SendMessage $IMAGECTL ${STM_SETIMAGE} ${IMAGE_BITMAP} $IMAGE
${Else}
SendMessage $IMAGECTL ${STM_SETIMAGE} ${IMAGE_BITMAP} $IMAGE2
${EndIf}
System::Call user32::RedrawWindow(i$Click,i0,i0,i0x0105)
FunctionEnd
Function nsDialogsPage
nsDialogs::Create 1018
Pop $dlg
nsDialogs::CreateControl STATIC ${WS_VISIBLE}|${WS_CHILD}|${WS_CLIPSIBLINGS}|${SS_BITMAP} 0 140u 20u 48u 32u ""
Pop $IMAGECTL
StrCpy $6 "$EXEDIR\a.bmp"
System::Call 'user32::LoadImage(i 0, t r6, i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_LOADFROMFILE}) i.s'
Pop $IMAGE
SendMessage $IMAGECTL ${STM_SETIMAGE} ${IMAGE_BITMAP} $IMAGE
StrCpy $7 "$EXEDIR\b.bmp"
System::Call 'user32::LoadImage(i 0, t r7, i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_LOADFROMFILE}) i.s'
Pop $IMAGE2
${NSD_AddStyle} $IMAGECTL ${SS_NOTIFY}
${NSD_OnClick} $IMAGECTL OnClick
${NSD_CreateTimer} OnTimer 50
nsDialogs::Show
System::Call 'gdi32:DeleteObject(i $IMAGE)'
System::Call 'gdi32:DeleteObject(i $IMAGE2)'
FunctionEnd
Function OnClick
MessageBox MB_OK "Кликнули на изображении"
FunctionEnd
Section
SectionEnd
Цитата MKN:
Хорошо бы всё это загнать в DLL... Вполне реально и полезно... Но с dll мне не справиться... Вся надежда на вас, на гуру. »
|
Для меня то код здесь накидать - великое дело в последнее время, а что уж говорить про написание dll...мне над креатором ещё работать не знаю сколько, так что на меня можно не надеяться
![Smile](images/smilies/new/smile.gif)