📄 languages.asm
字号:
invoke SetMenuItemInfo, hMENU_Options, IDMI_DELETEALL, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_DELETESEL
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMI_DELETESELECTED, FALSE, OFFSET MII
invoke SetMenuItemInfo, hMENU_ItemOptions, IDMI_DELETESELECTED, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_ALGORITHM
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMI_ALGORITHM, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_ELEMENTS
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMI_ELEMENTS, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_COMPARISONS
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMI_CMPCOUNTER, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_EXCHANGES
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMI_MOVCOUNTER, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_TIME
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMI_TIME, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_MEMORY
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMI_MEMORY, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_DATA
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMI_DATA, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_INITVALUE
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMI_INITVALUE, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_COPYALL
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMI_COPYALL, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_COPYSEL
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMI_COPYSELECTED, FALSE, OFFSET MII
invoke SetMenuItemInfo, hMENU_ItemOptions, IDMI_COPYSELECTED, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_SAVEALL
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMI_SAVEALL, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_SAVESEL
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMI_SAVESELECTED, FALSE, OFFSET MII
invoke SetMenuItemInfo, hMENU_ItemOptions, IDMI_SAVESELECTED, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_INCLUDEHEADERS
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMI_INCLUDEHEADERS, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_DIVTABULATOR
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMI_TABSEPARATOR, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_DIVSEMICOLON
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMI_SEMISEPARATOR, FALSE, OFFSET MII
mov eax, lpSTR_PMENU_COPYSAVE
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMP_COPYSAVE, FALSE, OFFSET MII
mov eax, lpSTR_PMENU_COLUMNS
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options, IDMP_COLUMNS, FALSE, OFFSET MII
.ELSEIF eax == IDD_GRAPHIC
;-----------------------------------------------------------------------------------
;-- Dialog: Graphic
;-----------------------------------------------------------------------------------
;-- Delete all status bar texts if the sorting process is not running.
.IF !SortInfo.fSorting
invoke SendMessage, hGraphicDialog_SB, SB_SETTEXT, SB_PART_ALGORITHM, NULL
invoke SendMessage, hGraphicDialog_SB, SB_SETTEXT, SB_PART_CMPCOUNTER, NULL
invoke SendMessage, hGraphicDialog_SB, SB_SETTEXT, SB_PART_MOVCOUNTER, NULL
.ENDIF
;-----------------------------------------------------------------------------------
;-- Change the texts of the static controls.
invoke SendDlgItemMessage, hDialogGraphic, IDDI_S_ALGORITHM, WM_SETTEXT, NULL, lpSTR_S_ALGORITHMS2
invoke SendDlgItemMessage, hDialogGraphic, IDDI_S_DATA2, WM_SETTEXT, NULL, lpSTR_S_DATA
invoke SendDlgItemMessage, hDialogGraphic, IDDI_S_ELEMENTS2, WM_SETTEXT, NULL, lpSTR_S_ELEMENTS
invoke SendDlgItemMessage, hDialogGraphic, IDDI_S_DELAY, WM_SETTEXT, NULL, lpSTR_S_DELAY
invoke SendDlgItemMessage, hDialogGraphic, IDDI_S_INITVALUE2, WM_SETTEXT, NULL, lpSTR_S_INITVALUE
;-----------------------------------------------------------------------------------
;-- Change the texts of the buttons.
invoke SendMessage, hGraphicDialog_B_Generate, WM_SETTEXT, NULL, lpSTR_B_GENERATE
invoke SendMessage, hGraphicDialog_B_Options2, WM_SETTEXT, NULL, lpSTR_B_OPTIONS
.IF SortInfo.fSorting && SortInfo.fGraphic
mov eax, lpSTR_B_CANCEL
.ELSE
mov eax, lpSTR_B_SORT
.ENDIF
invoke SendMessage, hGraphicDialog_B_Start, WM_SETTEXT, NULL, eax
;-----------------------------------------------------------------------------------
;-- Change the item texts of the data combo box.
;---------------------------------------------------------------------------------
;-- Get the index of the selected item.
invoke SendMessage, hGraphicDialog_CB_Data, CB_GETCURSEL, NULL, NULL
push eax
;---------------------------------------------------------------------------------
;-- Delete all items.
invoke SendMessage, hGraphicDialog_CB_Data, CB_RESETCONTENT, NULL, NULL
;---------------------------------------------------------------------------------
;-- Insert the items.
invoke SendMessage, hGraphicDialog_CB_Data, CB_ADDSTRING, NULL, lpSTR_UNSORTED
invoke SendMessage, hGraphicDialog_CB_Data, CB_ADDSTRING, NULL, lpSTR_SORTEDASC
invoke SendMessage, hGraphicDialog_CB_Data, CB_ADDSTRING, NULL, lpSTR_SORTEDDESC
;---------------------------------------------------------------------------------
;-- Select the previous selected item again.
pop eax
invoke SendMessage, hGraphicDialog_CB_Data, CB_SETCURSEL, eax, NULL
;-----------------------------------------------------------------------------------
;-- Change the item texts of the delay combo box (position).
;---------------------------------------------------------------------------------
;-- Get the index of the selected item.
invoke SendMessage, hGraphicDialog_CB_DelayPos, CB_GETCURSEL, NULL, NULL
push eax
;---------------------------------------------------------------------------------
;-- Delete all items.
invoke SendMessage, hGraphicDialog_CB_DelayPos, CB_RESETCONTENT, NULL, NULL
;---------------------------------------------------------------------------------
;-- Insert the items.
invoke SendMessage, hGraphicDialog_CB_DelayPos, CB_ADDSTRING, NULL, lpSTR_CBI_EACHPASS
invoke SendMessage, hGraphicDialog_CB_DelayPos, CB_ADDSTRING, NULL, lpSTR_CBI_EACHCOMPARISON
invoke SendMessage, hGraphicDialog_CB_DelayPos, CB_ADDSTRING, NULL, lpSTR_CBI_EACHEXCHANGE
;---------------------------------------------------------------------------------
;-- Select the previous selected item again.
pop eax
invoke SendMessage, hGraphicDialog_CB_DelayPos, CB_SETCURSEL, eax, NULL
;-----------------------------------------------------------------------------------
;-- Fill the delay combo box (number of milliseconds).
;---------------------------------------------------------------------------------
;-- Get the index of the selected item.
invoke SendMessage, hGraphicDialog_CB_Delay, CB_GETCURSEL, NULL, NULL
push eax
;---------------------------------------------------------------------------------
;-- Delete all items.
invoke SendMessage, hGraphicDialog_CB_Delay, CB_RESETCONTENT, NULL, NULL
;---------------------------------------------------------------------------------
;-- Insert the items.
mov eax, OFFSET AllowedDelays
@@:
push eax
;-----------------------------------------------------------------------------
;-- Get a number, convert it to an ASCII-string and add an item.
mov ebx, DWORD PTR [eax]
invoke dwtoa, ebx, OFFSET Buffer
invoke szCatStr, OFFSET Buffer, lpSTR_MS
invoke SendMessage, hGraphicDialog_CB_Delay, CB_ADDSTRING, NULL, OFFSET Buffer
pop eax
add eax, 4
cmp DWORD PTR [eax], -1
jnz @B
;---------------------------------------------------------------------------------
;-- Select the previous selected item again.
pop eax
invoke SendMessage, hGraphicDialog_CB_Delay, CB_SETCURSEL, eax, NULL
;-----------------------------------------------------------------------------------
;-- Change the item texts of the menu.
mov MII.cbSize, SIZEOF MII
mov MII.fMask, MIIM_STRING
mov MII.fType, MFT_STRING
mov eax, lpSTR_MENUI_LINES
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options2, IDMI_LINES, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_POINTS
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options2, IDMI_POINTS, FALSE, OFFSET MII
mov eax, lpSTR_MENUI_SAVEASBITMAP
mov MII.dwTypeData, eax
invoke SetMenuItemInfo, hMENU_Options2, IDMI_SAVEASBITMAP, FALSE, OFFSET MII
.ENDIF
@Return:
ret
LoadLanguageStrings ENDP
;-----------------------------------------------------------------------------------------
; Purpose: Fills an array with offsets of the strings of an specified language.
;
; Inputs: lpLangStrings - pointer to the first language string of a language.
; lpOffsets - pointer to the array that shall be filled.
;
; Outputs: none
;
; Notes: Each string has to be terminated by a NULL-byte, whereas the last string
; has to be terminated by two NULL-bytes.
;-----------------------------------------------------------------------------------------
LoadOffsets PROC USES eax ebx ecx dx lpLangStrings:DWORD, lpOffsets:DWORD
mov eax, lpLangStrings
mov ebx, lpOffsets
mov ecx, 0
;---------------------------------------------------------------------------------------
;-- Copy the offset of the first string to the array.
mov DWORD PTR [ebx], eax
dec eax
@NextChar:
;---------------------------------------------------------------------------------------
;-- Is the current char NULL?
inc eax
mov dl, BYTE PTR [eax]
test dl, dl
jnz @NextChar ;-- No. Check the next char.
;---------------------------------------------------------------------------------------
;-- Yes. Have all strings been processed?
cmp ecx, COUNT_LANG_STRINGS
jnb @Return ;-- Yes. -> return.
;---------------------------------------------------------------------------------------
;-- No. Is the next byte NULL?
cmp BYTE PTR [eax + 1], NULL
jz @Return ;-- Yes. The last string was processed.
;-- -> return.
;---------------------------------------------------------------------------------------
;-- No. A new String begins here. Increment the offset, the string counter and the
;-- offset of the array and copy th string offset to the array.
inc eax
inc ecx
add ebx, 4
mov DWORD PTR [ebx], eax
jmp @NextChar ;-- Process the next char.
@Return:
ret
LoadOffsets ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -