⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 project.asm

📁 汇编资源编辑器
💻 ASM
📖 第 1 页 / 共 2 页
字号:
					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 + -