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

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

Ветеран


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

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


Фоновое изображение на стандартных страницах (на всех или по выбору)

открыть код
Код: Выделить весь код
!include MUI.nsh
!include WinMessages.nsh
 
 ;size 497x314
!define BITMAP_FILE bg.bmp
 
Name "Background Bitmap"
OutFile "bgbitmap.exe"
InstallDir "$TEMP"
ShowInstDetails show
 
!define MUI_COMPONENTSPAGE_NODESC
!define MUI_FINISHPAGE_NOAUTOCLOSE
!define MUI_CUSTOMFUNCTION_GUIINIT MyGUIInit
 
!define LR_LOADFROMFILE     0x0010
!define LR_CREATEDIBSECTION 0x2000
!define IMAGE_BITMAP        0
!define SS_BITMAP           0x0000000E
!define WS_CHILD            0x40000000
!define WS_VISIBLE          0x10000000
!define HWND_TOP            0
!define SWP_NOSIZE          0x0001
!define SWP_NOMOVE          0x0002
!define IDC_BITMAP          1500
!define stRECT "(i, i, i, i) i"
 
Var hBitmap
 
!define MUI_PAGE_CUSTOMFUNCTION_SHOW WelcomePageShow
!insertmacro MUI_PAGE_WELCOME
;!define MUI_PAGE_CUSTOMFUNCTION_SHOW LicensePageShow
;!insertmacro MUI_PAGE_LICENSE bgbitmap.nsi
!define MUI_PAGE_CUSTOMFUNCTION_SHOW DirectoryPageShow
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_PAGE_CUSTOMFUNCTION_SHOW ComponentsPageShow
!insertmacro MUI_PAGE_COMPONENTS
!define MUI_PAGE_CUSTOMFUNCTION_SHOW InstFilesPageShow
!insertmacro MUI_PAGE_INSTFILES
!define MUI_PAGE_CUSTOMFUNCTION_SHOW FinishPageShow
!insertmacro MUI_PAGE_FINISH
 !insertmacro MUI_LANGUAGE English
 
; Destroy a window.
!macro DestroyWindow HWND IDC
  GetDlgItem $R0 ${HWND} ${IDC}
  System::Call `user32::DestroyWindow(i R0)`
!macroend
 
; Give window transparent background.
!macro SetTransparent HWND IDC
  GetDlgItem $R0 ${HWND} ${IDC}
  SetCtlColors $R0 0xFFFFFF transparent
!macroend
 
; Refresh window.
!macro RefreshWindow HWND IDC
  GetDlgItem $R0 ${HWND} ${IDC}
  ShowWindow $R0 ${SW_HIDE}
  ShowWindow $R0 ${SW_SHOW}
!macroend
 
Function MyGUIInit
  InitPluginsDir
  ReserveFile `${BITMAP_FILE}`
  File `/ONAME=$PLUGINSDIR\bg.bmp` `${BITMAP_FILE}`
 
  ; Получение параметров родительского окна
  System::Call `*${stRECT} .R0`
  System::Call `user32::GetClientRect(i $HWNDPARENT, i R0)`
  System::Call `*$R0${stRECT} (, , .R1, .R2)`
  System::Free $R0
 
  ; Создание нового окна и помещение в него изображения
  System::Call `kernel32::GetModuleHandle(i 0) i.R3`
  System::Call `user32::CreateWindowEx(i 0, t "STATIC", t "", i ${SS_BITMAP}|${WS_CHILD}|${WS_VISIBLE}, i 0, i 0, i R1, i R2, i $HWNDPARENT, i ${IDC_BITMAP}, i R3, i 0) i.R1`
  System::Call `user32::SetWindowPos(i R1, i ${HWND_TOP}, i 0, i 0, i 0, i 0, i ${SWP_NOSIZE}|${SWP_NOMOVE})`
  System::Call `user32::LoadImage(i 0, t "$PLUGINSDIR\bg.bmp", i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_CREATEDIBSECTION}|${LR_LOADFROMFILE}) i.s`
  Pop $hBitmap
  SendMessage $R1 ${STM_SETIMAGE} ${IMAGE_BITMAP} $hBitmap
 
  ; Установка прозрачности фона
  !insertmacro SetTransparent $HWNDPARENT 3
  !insertmacro SetTransparent $HWNDPARENT 1
  !insertmacro SetTransparent $HWNDPARENT 2
  !insertmacro SetTransparent $HWNDPARENT 1034
  !insertmacro SetTransparent $HWNDPARENT 1037
  !insertmacro SetTransparent $HWNDPARENT 1038
 
;Удаление не нужных контролов (элементов управления)
  !insertmacro DestroyWindow  $HWNDPARENT 1256
  !insertmacro DestroyWindow  $HWNDPARENT 1028
  !insertmacro DestroyWindow  $HWNDPARENT 1039
FunctionEnd
 
;Обновление контролов родительского окна. Необходимо для некоторых элементов управления, 
;если они имеют прозрачный фон.
Function RefreshParentControls
   !insertmacro RefreshWindow  $HWNDPARENT 1037
  !insertmacro RefreshWindow  $HWNDPARENT 1038
FunctionEnd
 
Function WelcomePageShow
  SetCtlColors $MUI_HWND 0xFFFFFF transparent
  !insertmacro SetTransparent $MUI_HWND 1200
  !insertmacro SetTransparent $MUI_HWND 1201
  !insertmacro SetTransparent $MUI_HWND 1202
 FunctionEnd
 
/*; For license page.
Function LicensePageShow
  FindWindow $MUI_HWND "#32770" "" $HWNDPARENT
  SetCtlColors $MUI_HWND 0xFFFFFF transparent
  !insertmacro SetTransparent $MUI_HWND 1040
  !insertmacro SetTransparent $MUI_HWND 1000
  !insertmacro SetTransparent $MUI_HWND 1006
  !insertmacro SetTransparent $MUI_HWND 1034
  !insertmacro SetTransparent $MUI_HWND 1035
  Call RefreshParentControls
 FunctionEnd*/
 
Function DirectoryPageShow
  FindWindow $MUI_HWND "#32770" "" $HWNDPARENT
  SetCtlColors $MUI_HWND 0xFFFFFF transparent
  !insertmacro SetTransparent $MUI_HWND 1019
  !insertmacro SetTransparent $MUI_HWND 1001
  !insertmacro SetTransparent $MUI_HWND 1024
  !insertmacro SetTransparent $MUI_HWND 1008
  !insertmacro SetTransparent $MUI_HWND 1023
  !insertmacro SetTransparent $MUI_HWND 1006
  !insertmacro SetTransparent $MUI_HWND 1020
  ; Remove group box text. $R0 still contains HWND of 1020 
  SendMessage $R0 ${WM_SETTEXT} 0 STR:
  ; Refresh controls.
  Call RefreshParentControls
 FunctionEnd
 
Function ComponentsPageShow
  FindWindow $MUI_HWND "#32770" "" $HWNDPARENT
  SetCtlColors $MUI_HWND 0xFFFFFF transparent
  !insertmacro SetTransparent $MUI_HWND 1017
  !insertmacro SetTransparent $MUI_HWND 1022
  !insertmacro SetTransparent $MUI_HWND 1021
  !insertmacro SetTransparent $MUI_HWND 1023
  !insertmacro SetTransparent $MUI_HWND 1006
  !insertmacro SetTransparent $MUI_HWND 1032
  Call RefreshParentControls
 FunctionEnd
 
Function InstFilesPageShow
  FindWindow $MUI_HWND "#32770" "" $HWNDPARENT
  SetCtlColors $MUI_HWND 0xFFFFFF transparent
  !insertmacro SetTransparent $MUI_HWND 1027
  !insertmacro SetTransparent $MUI_HWND 1004
  !insertmacro SetTransparent $MUI_HWND 1006
  !insertmacro SetTransparent $MUI_HWND 1016
  Call RefreshParentControls
 FunctionEnd
 
Function FinishPageShow
  SetCtlColors $MUI_HWND 0xFFFFFF transparent
  !insertmacro SetTransparent $MUI_HWND 1200
  !insertmacro SetTransparent $MUI_HWND 1201
  !insertmacro SetTransparent $MUI_HWND 1202
  !insertmacro SetTransparent $MUI_HWND 1203
  !insertmacro SetTransparent $MUI_HWND 1204
  !insertmacro SetTransparent $MUI_HWND 1205
  !insertmacro SetTransparent $MUI_HWND 1206
 FunctionEnd
 
; Free loaded resources. Destroy the bitmap.
Function .onGUIEnd
  System::Call `gdi32::DeleteObject(i s)` $hBitmap
 FunctionEnd
 
Section "Section1"
SectionEnd

Картинку фона ессно используйте свою - bg.bmp размером 497x314
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:05, 07-02-2013 | #191