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

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

Ветеран


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

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


Код программы "Font Viewer" :
(от китайских товарищей. Перевод гугловский, может быть не точен... )
читать дальше »
Код: Выделить весь код
!include MUI2.nsh
!include nsWindows.nsh
!include WinCore.nsh

!define BS_SOLID                0
!define BS_NULL                 1
!define TRANSPARENT             1
!define OPAQUE                  2
!define CC_TEXT                 1
!define CC_BK                   4
!define CC_BKB                  16
!define GWL_USERDATA            -21

!define CF_SCREENFONTS          0x00000001
!define CF_PRINTERFONTS         0x00000002
!define CF_BOTH                 ${CF_SCREENFONTS}|${CF_PRINTERFONTS}
!define CF_SHOWHELP             0x00000004
!define CF_ENABLEHOOK           0x00000008
!define CF_ENABLETEMPLATE       0x00000010
!define CF_ENABLETEMPLATEHANDLE 0x00000020
!define CF_INITTOLOGFONTSTRUCT  0x00000040
!define CF_USESTYLE             0x00000080
!define CF_EFFECTS              0x00000100
!define CF_APPLY                0x00000200
!define CF_ANSIONLY             0x00000400
#if(WINVER >= 0x0400)
!define CF_SCRIPTSONLY          ${CF_ANSIONLY}
#endif /* WINVER >= 0x0400 */
!define CF_NOVECTORFONTS        0x00000800
!define CF_NOOEMFONTS           ${CF_NOVECTORFONTS}
!define CF_NOSIMULATIONS        0x00001000
!define CF_LIMITSIZE            0x00002000
!define CF_FIXEDPITCHONLY       0x00004000
!define CF_WYSIWYG              0x00008000 #// must also have CF_SCREENFONTS & CF_PRINTERFONTS
!define CF_FORCEFONTEXIST       0x00010000
!define CF_SCALABLEONLY         0x00020000
!define CF_TTONLY               0x00040000
!define CF_NOFACESEL            0x00080000
!define CF_NOSTYLESEL           0x00100000
!define CF_NOSIZESEL            0x00200000
#if(WINVER >= 0x0400)
!define CF_SELECTSCRIPT         0x00400000
!define CF_NOSCRIPTSEL          0x00800000
!define CF_NOVERTFONTS          0x01000000
#endif /* WINVER >= 0x0400 */

!define BOLD_FONTTYPE           0x0100
!define ITALIC_FONTTYPE         0x0200
!define REGULAR_FONTTYPE        0x0400
!define SCREEN_FONTTYPE         0x2000
!define PRINTER_FONTTYPE        0x4000
!define SIMULATED_FONTTYPE      0x8000

!define CF_TEXT                 1
!define CF_BITMAP               2
!define CF_METAFILEPICT         3
!define CF_SYLK                 4
!define CF_DIF                  5
!define CF_TIFF                 6
!define CF_OEMTEXT              7
!define CF_DIB                  8
!define CF_PALETTE              9
!define CF_PENDATA              10
!define CF_RIFF                 11
!define CF_WAVE                 12
!define CF_UNICODETEXT          13
!define CF_ENHMETAFILE          14
!define CF_HDROP                15
!define CF_LOCALE               16
!define CF_DIBV5                17

!define CF_PRIVATEFIRST         0x0200
!define CF_PRIVATELAST          0x02FF
!define CF_GDIOBJFIRST          0x0300
!define CF_GDIOBJLAST           0x03FF
!define CF_OWNERDISPLAY         0x0080
!define CF_DSPTEXT              0x0081
!define CF_DSPBITMAP            0x0082
!define CF_DSPMETAFILEPICT      0x0083
!define CF_DSPENHMETAFILE       0x008E

!define GMEM_FIXED              0x0000
!define GMEM_MOVEABLE           0x0002
!define GMEM_ZEROINIT           0x0040
!define GPTR                    ${GMEM_FIXED}|${GMEM_ZEROINIT}
!define GHND                    ${GMEM_MOVEABLE}|${GMEM_ZEROINIT}

Name ChooseFont
Caption ChooseFont
OutFile ChooseFont.exe
XPStyle on

Page custom Page.Create
!insertmacro MUI_PAGE_INSTFILES 
!insertmacro MUI_LANGUAGE "English"

Var HWND

Function Page.Create

  !insertmacro MUI_HEADER_TEXT "ChooseFont Function" "ChooseFont"

  nsDialogs::Create 1018
  Pop $HWND

  nsDialogs::CreateControl ${__NSD_Label_Class} ${__NSD_Label_STYLE}|${SS_CENTER}|${SS_CENTERIMAGE} \
                           ${WS_EX_CLIENTEDGE}|${WS_EX_WINDOWEDGE} 0u 0u 300u 50u "Просмотр шрифта"
  Pop $0

  ${NSD_CreateButton} 250u 54u 50u 14u "Шрифт"
  Pop $1
  ${NSD_OnClick} $1 ChooseFont

  ${NSD_CreateLabel} 0u 57u 80u 8u "LOGFONT : "
  Pop $3
  ${NSD_CreateLabel} 80u 57u 20u 8u ""
  Pop $3

  ${NSD_CreateLabel} 72u 72u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 222u 72u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 72u 82u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 222u 82u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 72u 92u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 222u 92u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 72u 102u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 222u 102u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 72u 112u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 222u 112u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 72u 122u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 222u 122u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 72u 132u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 222u 132u 78u 8u ""
  Pop $3

  ${NSD_CreateLabel} 0u 72u 72u 8u "iPointSize: "
  Pop $3
  ${NSD_CreateLabel} 150u 72u 72u 8u "rgbColors: "
  Pop $3
  ${NSD_CreateLabel} 0u 82u 72u 8u "lfEscapement: "
  Pop $3
  ${NSD_CreateLabel} 150u 82u 72u 8u "lfOrientation: "
  Pop $3
  ${NSD_CreateLabel} 0u 92u 72u 8u "lfWeight: "
  Pop $3
  ${NSD_CreateLabel} 150u 92u 72u 8u "lfItalic: "
  Pop $3
  ${NSD_CreateLabel} 0u 102u 72u 8u "lfUnderline: "
  Pop $3
  ${NSD_CreateLabel} 150u 102u 72u 8u "lfStrikeOut: "
  Pop $3
  ${NSD_CreateLabel} 0u 112u 72u 8u "lfCharSet: "
  Pop $3
  ${NSD_CreateLabel} 150u 112u 72u 8u "lfOutPrecision: "
  Pop $3
  ${NSD_CreateLabel} 0u 122u 72u 8u "lfClipPrecision: "
  Pop $3
  ${NSD_CreateLabel} 150u 122u 72u 8u "lfQuality: "
  Pop $3
  ${NSD_CreateLabel} 0u 132u 72u 8u "lfPitchAndFamily: "
  Pop $3
  ${NSD_CreateLabel} 150u 132u 72u 8u "lfFaceName: "
  Pop $3

  ${NSD_CreateText} 100u 55u 145u 12u "Образец"
  Pop $3
  ${NSD_OnChange} $3 SetSampleText

  nsDialogs::Show
FunctionEnd

Function ChooseFont

  IntCmpU 0 $R0 0 +5
  #Создать структуру LOGFONT
  ; GetDC извлекает дескриптор дисплейного контекста устройства (DC) для рабочей области заданного окна или для всего экрана
  ;(Идентифицирует контекст устройства для CWnd клиентской области)
  System::Call `user32::GetDC(in)i.s`
  ; GetDeviceCaps извлекает зависимую от устройства информацию для заданного устройства
  ; LOGPIXELSX	Число пикселей на логический дюйм по экранной ширине. В системе с многоэкранными мониторами, это значение одно и то же  для всех  мониторов. 
  System::Call `gdi32::GetDeviceCaps(is,i${LOGPIXELSX})i.s`
  
  ; Умножение двух 32-битных значений, а затем делит 64-битный результат на треть 32-битное значение.  
  ;Окончательный результат округляется до ближайшего целого числа.
  System::Call `kernel32::MulDiv(i9,is,i72)i.s`
  System::Call `*(is,i,i,i,i,&i1,&i1,&i1,&i1,&i1,&i1,&i1,&i1,&t32"Tahoma")i.R0`
  
  #Создать структуру CHOOSEFONT
  System::Call `*(i60,i$HWNDPARENT,i20,iR0,i,i${CF_INITTOLOGFONTSTRUCT}|${CF_BOTH}|${CF_EFFECTS}|${CF_NOVERTFONTS}|${CF_NOOEMFONTS},ir4,i,i,i,i,i,&i2,i,i)i.R1`
  System::Call `comdlg32::ChooseFont(iR1)i.r2`
  IntCmp $2 0 end

  #Пользователь выбирает выходные параметры шрифта
  System::Call `*$R0(i.s,i.s,i.s,i.s,i.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&t32.s)`
  #Согласно информации, для создания шрифта
  System::Call `gdi32::CreateFont(is,is,is,is,is,is,is,is,is,is,is,is,is,ts)i.s`
  #Установка области, предварительного просмотра шрифта
  System::Call `user32::SendMessage(ir0,i${WM_SETFONT},is,i0)`

  #Пользователь выбирает выходные параметры шрифта
  System::Call `*$R0(i,i,i.s,i.s,i.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&t32.s)`
  #Размер  и цвет
  System::Call `*$R1(i,i,i,i,i.s,i,i.r4,i,i,i,i,i,&i2,i,i)`
  #SetCtlColors Нельзя использовать переменные
  #Следующие две строки для установки цвета 
  System::Call `*(ir4,i0,i${BS_NULL},i0,i${TRANSPARENT},i${CC_TEXT}|${CC_BKB})i.r5`
  System::Call `user32::SetWindowLong(ir0,i${GWL_USERDATA},lr5)`
  #обновить окно
  System::Call `user32::ShowWindow(ir0,i${SW_HIDE})`
  System::Call `user32::ShowWindow(ir0,i${SW_SHOW})`

  #Размер дисплея, и шрифт информационной структуры
  System::Call `*$R0(&l.s)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1203,i${WM_SETTEXT},i0,ts)`

  System::Call `user32::SendDlgItemMessage(i$HWND,i1204,i${WM_SETTEXT},i0,ts)`
  #Цвет строки форматирования
  IntFmt $4 0x%06X $4
  System::Call `user32::GetDlgItem(i$HWND,i1205)i.r6`
  System::Call `user32::SendMessage(ir6,i${WM_SETTEXT},i0,tr4)`
  System::Call `user32::SetWindowLong(ir6,i${GWL_USERDATA},lr5)`
  System::Call `user32::ShowWindow(ir6,i${SW_HIDE})`
  System::Call `user32::ShowWindow(ir6,i${SW_SHOW})`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1206,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1207,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1208,i${WM_SETTEXT},i0,ts)`

  System::Call `user32::SendDlgItemMessage(i$HWND,i1209,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1210,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1211,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1212,i${WM_SETTEXT},i0,ts)`

  System::Call `user32::SendDlgItemMessage(i$HWND,i1213,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1214,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1215,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1216,i${WM_SETTEXT},i0,ts)`

  System::Call `user32::SendDlgItemMessage(i$HWND,i1217,i${WM_SETTEXT},i0,ts)`
  System::Free $R1
  end:
FunctionEnd

Function SetSampleText
  System::Call `user32::SendDlgItemMessage(i$HWND,i1232,i${WM_GETTEXT},i${NSIS_MAX_STRLEN},t.s)`
  System::Call `user32::SendMessage(ir0,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::ShowWindow(ir0,i${SW_HIDE})`
  System::Call `user32::ShowWindow(ir0,i${SW_SHOW})`
FunctionEnd

Function .onGUIEnd
  System::Free $R0
  System::Free $5
FunctionEnd

Section 
SectionEnd
PS после компиляции будет немного ругани, не влияющей на работоспособность. И похоже опять - из nsWindows.nsh...

Последний раз редактировалось MKN, 02-10-2013 в 16:45.


Отправлено: 17:39, 01-10-2013 | #563