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

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

Ветеран


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

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


Цитата K.A.V.:
С такими хотелками проще бросить NSIS »
Эээээ.... А чего я такого несбыточного спросил ?
Цитата K.A.V.:
А с таймером ты уже сделал такое? »
Ну да... Только чуется мне , что и без таймера можно обойтись... Там , где таймер, всегда какие то глюки...
Цитата kotkovets:
3 тонны кода, вагон и тележка с надписью: поехали »
Да вроде и не так много кода... Но хотелось бы поменее, потому и поинтересовался как бы сделать попроще. Может макросом каким, или вообще по иному организовать идею...
Вот мой рабочий тестово- корявый код (для одной кнопки-изображения) :
Код: Выделить весь код
!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 = $Click
ShowWindow $IMAGECTL 1
ShowWindow $IMAGECTL2 0
System::Call USER32::LoadCursor(i,i32649)i.s
System::Call USER32::SetCursor(is)
${Else}
ShowWindow $IMAGECTL2 1
ShowWindow $IMAGECTL 0
${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  
ShowWindow $IMAGECTL 0
		
nsDialogs::CreateControl STATIC ${WS_VISIBLE}|${WS_CHILD}|${WS_CLIPSIBLINGS}|${SS_BITMAP} 0 140u 20u 48u 32u "" 
Pop $IMAGECTL2
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 
SendMessage $IMAGECTL2 ${STM_SETIMAGE} ${IMAGE_BITMAP} $IMAGE2  
ShowWindow $IMAGECTL2 1
  
${NSD_CreateLabel} 135u 22u 40u 20u ""
Pop $Click
${NSD_OnClick} $Click OnClick
${NSD_CreateTimer} OnTimer 50
  
System::Call 'gdi32:DeleteObject(i $IMAGE)'
System::Call 'gdi32:DeleteObject(i $IMAGE2)' 
nsDialogs::Show
FunctionEnd

Function OnClick
MessageBox MB_OK "Кликнули на изображении"
FunctionEnd

Section
SectionEnd
Как бы его причесать и упростить ?

ps Для чего это всё надо ? А чтобы в ногу со временем идти и для разнообразия . Чтобы делать страницы, оформленные в стиле Metro интерфейса. При наведении курсора - вокруг кнопки (а это - цветное изображение прямоугольника на цветном фоне) появляется рамочка, чтобы был виден выбор этой кнопки, затем клик и действие. Ладошка курсора - это приятная и полезная мелочь.
Хорошо бы всё это загнать в DLL... Вполне реально и полезно... Но с dll мне не справиться... Вся надежда на вас, на гуру.

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


Отправлено: 19:06, 16-08-2015 | #1753