📄 project.asm
字号:
invoke lstrcat,lpRCMem,hMem
invoke GlobalUnlock,hMem
invoke GlobalFree,hMem
.endif
.elseif [esi].PROJECT.ntype==TPE_ACCEL
mov eax,[esi].PROJECT.hmem
invoke ExportAccel,eax
.if eax
mov hMem,eax
invoke lstrcat,lpRCMem,hMem
invoke GlobalUnlock,hMem
invoke GlobalFree,hMem
.endif
.elseif [esi].PROJECT.ntype==TPE_INCLUDE
mov eax,[esi].PROJECT.hmem
invoke ExportInclude,eax
.if eax
mov hMem,eax
invoke lstrcat,lpRCMem,hMem
invoke GlobalUnlock,hMem
invoke GlobalFree,hMem
.endif
.elseif [esi].PROJECT.ntype==TPE_RESOURCE
mov eax,[esi].PROJECT.hmem
invoke ExportResource,eax
.if eax
mov hMem,eax
invoke lstrcat,lpRCMem,hMem
invoke GlobalUnlock,hMem
invoke GlobalFree,hMem
.endif
.elseif [esi].PROJECT.ntype==TPE_STRING
mov eax,[esi].PROJECT.hmem
invoke ExportString,eax
.if eax
mov hMem,eax
invoke lstrcat,lpRCMem,hMem
invoke GlobalUnlock,hMem
invoke GlobalFree,hMem
.endif
.endif
.endif
add esi,sizeof PROJECT
.endw
ret
ExportProject endp
GetProjectModify proc uses esi,lpProMem:DWORD
mov esi,lpProMem
xor eax,eax
.while [esi].PROJECT.hmem
mov eax,[esi].PROJECT.changed
.break .if eax
.if ![esi].PROJECT.delete
.if [esi].PROJECT.ntype==TPE_DIALOG
mov edx,[esi].PROJECT.hmem
mov eax,[edx].DLGHEAD.changed
.break .if eax
.elseif [esi].PROJECT.ntype==TPE_MENU
mov edx,[esi].PROJECT.hmem
mov eax,[edx].MNUHEAD.changed
.break .if eax
.endif
.endif
add esi,sizeof PROJECT
.endw
ret
GetProjectModify endp
SetProjectModify proc uses esi,lpProMem:DWORD,fChanged:DWORD
mov esi,lpProMem
mov eax,fChanged
.while [esi].PROJECT.hmem
mov [esi].PROJECT.changed,eax
.if [esi].PROJECT.ntype==TPE_DIALOG
mov edx,[esi].PROJECT.hmem
mov [edx].DLGHEAD.changed,eax
.elseif [esi].PROJECT.ntype==TPE_MENU
mov edx,[esi].PROJECT.hmem
mov [edx].MNUHEAD.changed,eax
.endif
add esi,sizeof PROJECT
.endw
ret
SetProjectModify endp
AddProjectItem proc uses esi,lpProMem:DWORD,nType:DWORD,fOpen:DWORD
LOCAL buffer[MAX_PATH]:BYTE
mov esi,lpProMem
.while [esi].PROJECT.hmem
add esi,sizeof PROJECT
.endw
mov eax,nType
.if eax==TPE_DIALOG
invoke CreateDlg,hDEd,esi
mov [esi].PROJECT.hmem,eax
mov [esi].PROJECT.ntype,TPE_DIALOG
invoke GetProjectItemName,esi,addr buffer
invoke AddProjectNode,TPE_DIALOG,addr buffer,esi
invoke ExpandProjectNodes,hNodeDlg
.elseif eax==TPE_MENU
invoke CreateMnu,hDEd,NULL
.if eax
mov [esi].PROJECT.hmem,eax
mov [esi].PROJECT.ntype,TPE_MENU
invoke GetProjectItemName,esi,addr buffer
invoke AddProjectNode,TPE_MENU,addr buffer,esi
invoke ExpandProjectNodes,hNodeMnu
.endif
.elseif eax==TPE_ACCEL
.if fOpen
invoke DialogBoxParam,hInstance,IDD_DLGACCEL,hPrj,offset AccelEditProc,NULL
.else
invoke AddProjectNode,TPE_ACCEL,offset szACCELERATORS,esi
invoke AddTypeMem,lpProMem,64*1024,TPE_ACCEL
invoke ExpandProjectNodes,hNodeMisc
.endif
.elseif eax==TPE_VERSION
.if fOpen
invoke DialogBoxParam,hInstance,IDD_DLGVERSION,hPrj,offset VersionEditProc,NULL
.else
invoke AddProjectNode,TPE_VERSION,offset szVERSIONINFO,esi
invoke AddTypeMem,lpProMem,64*1024,TPE_VERSION
invoke ExpandProjectNodes,hNodeMisc
.endif
.elseif eax==TPE_INCLUDE
invoke GetTypeMem,lpProMem,TPE_INCLUDE
xor edx,edx
.if eax
mov edx,[eax].PROJECT.hmem
.endif
.if fOpen
invoke DialogBoxParam,hInstance,IDD_DLGINCLUDE,hPrj,offset IncludeEditProc,eax
.elseif !edx
invoke AddProjectNode,TPE_INCLUDE,offset szIncludeFile,esi
invoke AddTypeMem,lpProMem,64*1024,TPE_INCLUDE
invoke ExpandProjectNodes,hNodeMisc
.endif
.elseif eax==TPE_RESOURCE
invoke GetTypeMem,lpProMem,TPE_RESOURCE
xor edx,edx
.if eax
mov edx,[eax].PROJECT.hmem
.endif
.if fOpen
invoke DialogBoxParam,hInstance,IDD_DLGRESOURCE,hPrj,offset ResourceEditProc,eax
.elseif !edx
invoke AddProjectNode,TPE_RESOURCE,offset szResource,esi
invoke AddTypeMem,lpProMem,64*1024,TPE_RESOURCE
invoke ExpandProjectNodes,hNodeMisc
.endif
.elseif eax==TPE_STRING
invoke GetTypeMem,lpProMem,TPE_STRING
xor edx,edx
.if eax
mov edx,[eax].PROJECT.hmem
.endif
.if fOpen
invoke DialogBoxParam,hInstance,IDD_DLGSTRING,hPrj,offset StringEditProc,eax
.elseif !edx
invoke AddProjectNode,TPE_STRING,offset szStringTable,esi
invoke AddTypeMem,lpProMem,64*1024,TPE_STRING
invoke ExpandProjectNodes,hNodeMisc
.endif
.endif
mov eax,esi
ret
AddProjectItem endp
GetProjectItemName proc uses esi,lpProItemMem:DWORD,lpBuff:DWORD
mov esi,lpProItemMem
mov eax,[esi].PROJECT.ntype
mov esi,[esi].PROJECT.hmem
.if eax==TPE_DIALOG
lea eax,[esi+sizeof DLGHEAD].DIALOG.idname
mov edx,[esi+sizeof DLGHEAD].DIALOG.id
call CopyName
.elseif eax==TPE_MENU
lea eax,[esi].MNUHEAD.menuname
mov edx,[esi].MNUHEAD.menuid
call CopyName
.elseif eax==TPE_ACCEL
lea eax,[esi].ACCELMEM.szname
mov edx,[esi].ACCELMEM.value
call CopyName
.elseif eax==TPE_VERSION
lea eax,[esi].VERSIONMEM.szname
mov edx,[esi].VERSIONMEM.value
call CopyName
.elseif eax==TPE_RESOURCE
invoke lstrcpy,lpBuff,offset szResource
.elseif eax==TPE_INCLUDE
invoke lstrcpy,lpBuff,offset szIncludeFile
.elseif eax==TPE_STRING
invoke lstrcpy,lpBuff,offset szStringTable
.endif
ret
CopyName:
.if byte ptr [eax]
invoke lstrcpy,lpBuff,eax
.else
invoke ResEdBinToDec,edx,lpBuff
.endif
retn
GetProjectItemName endp
SetProjectItemName proc uses esi,lpProItemMem:DWORD,lpName:DWORD
LOCAL tvi:TV_ITEMEX
invoke GetWindowLong,hPrj,0
.if eax
mov eax,lpProItemMem
.if eax
mov eax,[eax].PROJECT.ntype
.endif
.if !eax
mov tvi.imask,TVIF_TEXT
mov eax,hRoot
mov tvi.hItem,eax
mov eax,lpName
mov tvi.pszText,eax
invoke SendMessage,hPrjTrv,TVM_SETITEM,0,addr tvi
.elseif eax==TPE_DIALOG
mov tvi.imask,TVIF_HANDLE or TVIF_PARAM
invoke SendMessage,hPrjTrv,TVM_GETNEXTITEM,TVGN_CHILD,hNodeDlg
.while eax
mov tvi.hItem,eax
invoke SendMessage,hPrjTrv,TVM_GETITEM,0,addr tvi
mov eax,tvi.lParam
.if eax==lpProItemMem
mov tvi.imask,TVIF_TEXT
mov eax,lpName
mov tvi.pszText,eax
invoke SendMessage,hPrjTrv,TVM_SETITEM,0,addr tvi
invoke SendMessage,hPrjTrv,TVM_SORTCHILDREN,0,hNodeDlg
jmp Ex
.endif
invoke SendMessage,hPrjTrv,TVM_GETNEXTITEM,TVGN_NEXT,tvi.hItem
.endw
.elseif eax==TPE_MENU
mov tvi.imask,TVIF_HANDLE or TVIF_PARAM
invoke SendMessage,hPrjTrv,TVM_GETNEXTITEM,TVGN_CHILD,hNodeMnu
.while eax
mov tvi.hItem,eax
invoke SendMessage,hPrjTrv,TVM_GETITEM,0,addr tvi
mov eax,tvi.lParam
.if eax==lpProItemMem
mov tvi.imask,TVIF_TEXT
mov eax,lpName
mov tvi.pszText,eax
invoke SendMessage,hPrjTrv,TVM_SETITEM,0,addr tvi
invoke SendMessage,hPrjTrv,TVM_SORTCHILDREN,0,hNodeMnu
jmp Ex
.endif
invoke SendMessage,hPrjTrv,TVM_GETNEXTITEM,TVGN_NEXT,tvi.hItem
.endw
.elseif eax==TPE_ACCEL
mov tvi.imask,TVIF_HANDLE or TVIF_PARAM
invoke SendMessage,hPrjTrv,TVM_GETNEXTITEM,TVGN_CHILD,hNodeMisc
.while eax
mov tvi.hItem,eax
invoke SendMessage,hPrjTrv,TVM_GETITEM,0,addr tvi
mov eax,tvi.lParam
.if eax==lpProItemMem
mov tvi.imask,TVIF_TEXT
mov eax,lpName
mov tvi.pszText,eax
invoke SendMessage,hPrjTrv,TVM_SETITEM,0,addr tvi
invoke SendMessage,hPrjTrv,TVM_SORTCHILDREN,0,hNodeMisc
jmp Ex
.endif
invoke SendMessage,hPrjTrv,TVM_GETNEXTITEM,TVGN_NEXT,tvi.hItem
.endw
.elseif eax==TPE_VERSION
mov tvi.imask,TVIF_HANDLE or TVIF_PARAM
invoke SendMessage,hPrjTrv,TVM_GETNEXTITEM,TVGN_CHILD,hNodeMisc
.while eax
mov tvi.hItem,eax
invoke SendMessage,hPrjTrv,TVM_GETITEM,0,addr tvi
mov eax,tvi.lParam
.if eax==lpProItemMem
mov tvi.imask,TVIF_TEXT
mov eax,lpName
mov tvi.pszText,eax
invoke SendMessage,hPrjTrv,TVM_SETITEM,0,addr tvi
invoke SendMessage,hPrjTrv,TVM_SORTCHILDREN,0,hNodeMisc
jmp Ex
.endif
invoke SendMessage,hPrjTrv,TVM_GETNEXTITEM,TVGN_NEXT,tvi.hItem
.endw
.endif
.endif
Ex:
ret
SetProjectItemName endp
GetProjectSelected proc
LOCAL tvi:TV_ITEMEX
invoke SendMessage,hPrjTrv,TVM_GETNEXTITEM,TVGN_CARET,NULL
.if eax
mov tvi.hItem,eax
mov tvi.imask,TVIF_PARAM
invoke SendMessage,hPrjTrv,TVM_GETITEM,0,addr tvi
.if eax
mov eax,tvi.lParam
.if eax
mov eax,[eax].PROJECT.ntype
.endif
.endif
.endif
ret
GetProjectSelected endp
RemoveProjectSelected proc
LOCAL tvi:TV_ITEMEX
invoke SendMessage,hPrjTrv,TVM_GETNEXTITEM,TVGN_CARET,NULL
.if eax
mov tvi.hItem,eax
mov tvi.imask,TVIF_PARAM
invoke SendMessage,hPrjTrv,TVM_GETITEM,0,addr tvi
.if eax
mov edx,tvi.lParam
.if edx
mov eax,[edx].PROJECT.ntype
.if eax && eax!=TPE_NAME
inc nUndo
mov eax,nUndo
mov [edx].PROJECT.delete,eax
invoke SendMessage,hPrjTrv,TVM_DELETEITEM,0,tvi.hItem
invoke SendMessage,hPrj,PRO_SETMODIFY,TRUE,0
.endif
.endif
.endif
.endif
ret
RemoveProjectSelected endp
ProjectCanUndo proc uses esi
invoke GetWindowLong,hPrj,0
.if eax
mov esi,eax
xor eax,eax
.while [esi].PROJECT.hmem
.if [esi].PROJECT.delete
mov eax,TRUE
.endif
add esi,sizeof PROJECT
.endw
.endif
ret
ProjectCanUndo endp
ProjectUndoDeleted proc uses ebx esi
LOCAL buffer[64]:BYTE
invoke GetWindowLong,hPrj,0
.if eax
mov esi,eax
xor eax,eax
xor ebx,ebx
.while [esi].PROJECT.hmem
.if eax<[esi].PROJECT.delete
mov eax,[esi].PROJECT.delete
mov ebx,esi
.endif
add esi,sizeof PROJECT
.endw
.if ebx
mov [ebx].PROJECT.delete,FALSE
invoke GetProjectItemName,ebx,addr buffer
mov edx,[ebx].PROJECT.ntype
invoke AddProjectNode,edx,addr buffer,ebx
invoke SendMessage,hPrj,PRO_SETMODIFY,TRUE,0
.endif
.endif
ret
ProjectUndoDeleted endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -