📄 keywords.asm
字号:
IDD_DLGKEYWORDS equ 4000
IDC_LSTKWCOLORS equ 4001
IDC_LSTKWACTIVE equ 4014
IDC_LSTKWHOLD equ 4013
IDC_LSTCOLORS equ 4015
IDC_BTNKWAPPLY equ 4002
IDC_BTNHOLD equ 4009
IDC_BTNACTIVE equ 4008
IDC_EDTKW equ 4012
IDC_BTNADD equ 4011
IDC_BTNDEL equ 4010
IDC_CHKBOLD equ 4004
IDC_CHKITALIC equ 4003
IDC_CHKRCFILE equ 4005
IDC_SPNTABSIZE equ 4017
IDC_EDTTABSIZE equ 4018
IDC_CHKEXPAND equ 4019
IDC_CHKAUTOINDENT equ 4020
IDC_CHKHILITELINE equ 4021
IDC_CHKHILITECMNT equ 4026
IDC_BTNCODEFONT equ 4024
IDC_STCCODEFONT equ 4022
IDC_BTNLNRFONT equ 4025
IDC_STCLNRFONT equ 4023
szColors db '代码窗口背景',0
db '代码窗口文本',0
db '选择背景',0
db '选择文本',0
db '注释',0
db '字符串',0
db '操作符',0
db '注释背景',0
db '光标所在行',0
db '缩进标线',0
db '左侧选条',0
db '选条边线',0
db '行号',0
db '数字',0
db '子程序选择背景',0
db '子程序选择文本',0
db '资源窗口背景',0
db '资源窗口文本',0
db 0
szCustColors db 'CustColors',0
.data?
nKWInx dd ?
CustColors dd 16 dup(?)
hCFnt dd ?
hLFnt dd ?
.code
SetKeyWordList proc uses esi edi,hWin:HWND,idLst:DWORD,nInx:DWORD
LOCAL hMem:DWORD
LOCAL buffer[64]:BYTE
mov eax,nInx
mov nKWInx,eax
invoke SendDlgItemMessage,hWin,idLst,LB_RESETCONTENT,0,0
invoke GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,16384
mov hMem,eax
invoke MakeKey,offset szGroup,nInx,addr buffer
mov lpcbData,16384
invoke RegQueryValueEx,hReg,addr buffer,0,addr lpType,hMem,addr lpcbData
mov eax,hMem
mov al,[eax]
mov esi,nInx
.if !al && esi<16
lea esi,kwofs[esi*4]
mov esi,[esi]
.else
mov esi,hMem
.endif
dec esi
Nxt:
inc esi
mov al,[esi]
or al,al
je Ex
cmp al,VK_SPACE
je Nxt
lea edi,buffer
@@:
mov al,[esi]
.if al==VK_SPACE || !al
mov byte ptr [edi],0
invoke SendDlgItemMessage,hWin,idLst,LB_ADDSTRING,0,addr buffer
dec esi
jmp Nxt
.endif
mov [edi],al
inc esi
inc edi
jmp @b
Ex:
invoke SendDlgItemMessage,hWin,IDC_LSTKWCOLORS,LB_GETITEMDATA,nInx,0
.if eax!=LB_ERR
shr eax,24
mov esi,eax
mov eax,BST_UNCHECKED
test esi,1
.if !ZERO?
mov eax,BST_CHECKED
.endif
invoke CheckDlgButton,hWin,IDC_CHKBOLD,eax
mov eax,BST_UNCHECKED
test esi,2
.if !ZERO?
mov eax,BST_CHECKED
.endif
invoke CheckDlgButton,hWin,IDC_CHKITALIC,eax
mov eax,BST_UNCHECKED
test esi,10h
.if !ZERO?
mov eax,BST_CHECKED
.endif
invoke CheckDlgButton,hWin,IDC_CHKRCFILE,eax
.endif
invoke GlobalFree,hMem
ret
SetKeyWordList endp
SaveKeyWordList proc uses esi edi,hWin:HWND,idLst:DWORD,nInx:DWORD
LOCAL hMem:DWORD
LOCAL buffer[64]:BYTE
invoke GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,16384
mov hMem,eax
mov edi,eax
xor esi,esi
@@:
invoke SendDlgItemMessage,hWin,idLst,LB_GETTEXT,esi,edi
.if eax!=LB_ERR
invoke lstrlen,edi
add edi,eax
mov byte ptr [edi],VK_SPACE
inc edi
inc esi
jmp @b
.endif
.if edi!=hMem
mov byte ptr [edi-1],0
.endif
sub edi,hMem
invoke MakeKey,offset szGroup,nInx,addr buffer
invoke RegSetValueEx,hReg,addr buffer,0,REG_SZ,hMem,edi
invoke GlobalFree,hMem
ret
SaveKeyWordList endp
DeleteKeyWords proc hWin:HWND,idFrom:DWORD
LOCAL nInx:DWORD
LOCAL nCnt:DWORD
invoke SendDlgItemMessage,hWin,idFrom,LB_GETSELCOUNT,0,0
mov nCnt,eax
mov nInx,0
.while nCnt
invoke SendDlgItemMessage,hWin,idFrom,LB_GETSEL,nInx,0
.if eax
invoke SendDlgItemMessage,hWin,idFrom,LB_DELETESTRING,nInx,0
dec nCnt
mov eax,1
.endif
xor eax,1
add nInx,eax
.endw
ret
DeleteKeyWords endp
MoveKeyWords proc hWin:HWND,idFrom:DWORD,idTo:DWORD
LOCAL buffer[64]:BYTE
LOCAL nInx:DWORD
LOCAL nCnt:DWORD
invoke SendDlgItemMessage,hWin,idFrom,LB_GETSELCOUNT,0,0
mov nCnt,eax
mov nInx,0
.while nCnt
invoke SendDlgItemMessage,hWin,idFrom,LB_GETSEL,nInx,0
.if eax
invoke SendDlgItemMessage,hWin,idFrom,LB_GETTEXT,nInx,addr buffer
invoke SendDlgItemMessage,hWin,idFrom,LB_DELETESTRING,nInx,0
invoke SendDlgItemMessage,hWin,idTo,LB_ADDSTRING,0,addr buffer
dec nCnt
mov eax,1
.endif
xor eax,1
add nInx,eax
.endw
ret
MoveKeyWords endp
UpdateKeyWords proc uses ebx,hWin:HWND
xor ebx,ebx
.while ebx<16
invoke SendDlgItemMessage,hWin,IDC_LSTKWCOLORS,LB_GETITEMDATA,ebx,0
mov kwcol[ebx*4],eax
inc ebx
.endw
invoke RegSetValueEx,hReg,addr szKeyWordColor,0,REG_BINARY,addr kwcol,sizeof kwcol
invoke SetKeyWords
invoke UpdateAll,WM_PAINT
ret
UpdateKeyWords endp
UpdateToolColors proc
LOCAL racol:RACOLOR
LOCAL rescol:COLOR
invoke SendMessage,hOut,REM_GETCOLOR,0,addr racol
mov eax,col.toolback
mov racol.bckcol,eax
mov eax,col.tooltext
mov racol.txtcol,eax
invoke SendMessage,hOut,REM_SETCOLOR,0,addr racol
invoke SendMessage,hBrowse,FBM_SETBACKCOLOR,0,col.toolback
invoke SendMessage,hBrowse,FBM_SETTEXTCOLOR,0,col.tooltext
mov eax,col.dialogback
mov rescol.back,eax
mov eax,col.dialogtext
mov rescol.text,eax
invoke SendMessage,hResEd,DEM_SETCOLOR,0,addr rescol
.if hBrBack
invoke DeleteObject,hBrBack
.endif
invoke CreateSolidBrush,col.toolback
mov hBrBack,eax
ret
UpdateToolColors endp
KeyWordsProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL nInx:DWORD
LOCAL buffer[256]:BYTE
LOCAL rect:RECT
LOCAL hBr:DWORD
LOCAL cc:CHOOSECOLOR
LOCAL cf:CHOOSEFONT
LOCAL lf:LOGFONT
mov eax,uMsg
.if eax==WM_INITDIALOG
push esi
push edi
invoke SendDlgItemMessage,hWin,IDC_SPNTABSIZE,UDM_SETRANGE,0,00010014h ; Set range
invoke SendDlgItemMessage,hWin,IDC_SPNTABSIZE,UDM_SETPOS,0,edopt.tabsize ; Set default value
invoke CheckDlgButton,hWin,IDC_CHKEXPAND,edopt.exptabs
invoke CheckDlgButton,hWin,IDC_CHKAUTOINDENT,edopt.indent
invoke CheckDlgButton,hWin,IDC_CHKHILITELINE,edopt.hiliteline
invoke CheckDlgButton,hWin,IDC_CHKHILITECMNT,edopt.hilitecmnt
mov esi,offset szColors
mov edi,offset col
@@:
invoke SendDlgItemMessage,hWin,IDC_LSTCOLORS,LB_ADDSTRING,0,esi
invoke SendDlgItemMessage,hWin,IDC_LSTCOLORS,LB_SETITEMDATA,eax,[edi]
invoke lstrlen,esi
add esi,eax
inc esi
add edi,4
mov al,[esi]
or al,al
jne @b
invoke SendDlgItemMessage,hWin,IDC_LSTCOLORS,LB_SETCURSEL,0,0
mov edi,offset kwcol
mov nInx,0
.while nInx<16
invoke MakeKey,offset szGroup,nInx,addr buffer
invoke SendDlgItemMessage,hWin,IDC_LSTKWCOLORS,LB_ADDSTRING,0,addr buffer
invoke SendDlgItemMessage,hWin,IDC_LSTKWCOLORS,LB_SETITEMDATA,eax,[edi]
add edi,4
inc nInx
.endw
invoke SendDlgItemMessage,hWin,IDC_LSTKWCOLORS,LB_SETCURSEL,0,0
invoke SetKeyWordList,hWin,IDC_LSTKWHOLD,10
invoke SetKeyWordList,hWin,IDC_LSTKWACTIVE,0
invoke SendDlgItemMessage,hWin,IDC_EDTKW,EM_LIMITTEXT,63,0
mov eax,IDC_BTNKWAPPLY
xor edx,edx
call EnButton
pop edi
pop esi
invoke SendDlgItemMessage,hWin,IDC_STCCODEFONT,WM_SETFONT,hFont,FALSE
invoke SendDlgItemMessage,hWin,IDC_STCLNRFONT,WM_SETFONT,hLnrFont,FALSE
.elseif eax==WM_COMMAND
mov eax,wParam
mov edx,eax
shr edx,16
and eax,0FFFFh
.if edx==BN_CLICKED
.if eax==IDOK
call Update
invoke SendMessage,hWin,WM_CLOSE,NULL,NULL
.elseif eax==IDCANCEL
.if hCFnt
invoke DeleteObject,hCFnt
.endif
.if hLFnt
invoke DeleteObject,hLFnt
.endif
invoke SendMessage,hWin,WM_CLOSE,NULL,NULL
.elseif eax==IDC_BTNKWAPPLY
call Update
.elseif eax==IDC_BTNHOLD
invoke MoveKeyWords,hWin,IDC_LSTKWACTIVE,IDC_LSTKWHOLD
mov eax,IDC_BTNHOLD
xor edx,edx
call EnButton
mov eax,IDC_BTNDEL
xor edx,edx
call EnButton
mov eax,IDC_BTNKWAPPLY
mov edx,TRUE
call EnButton
.elseif eax==IDC_BTNACTIVE
invoke MoveKeyWords,hWin,IDC_LSTKWHOLD,IDC_LSTKWACTIVE
mov eax,IDC_BTNACTIVE
xor edx,edx
call EnButton
mov eax,IDC_BTNKWAPPLY
mov edx,TRUE
call EnButton
.elseif eax==IDC_BTNADD
invoke GetDlgItemText,hWin,IDC_EDTKW,addr buffer,64
invoke SendDlgItemMessage,hWin,IDC_LSTKWACTIVE,LB_ADDSTRING,0,addr buffer
mov buffer,0
invoke SetDlgItemText,hWin,IDC_EDTKW,addr buffer
mov eax,IDC_BTNKWAPPLY
mov edx,TRUE
call EnButton
.elseif eax==IDC_BTNDEL
invoke DeleteKeyWords,hWin,IDC_LSTKWACTIVE
mov eax,IDC_BTNHOLD
xor edx,edx
call EnButton
mov eax,IDC_BTNDEL
xor edx,edx
call EnButton
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -