一个贱问题,分项设置控件属性的,希望不要因为我人贱就不看偶的问题啊~~

banxian 2002-06-15 09:10:19
偶转行的,Delphi中组件都可以有颜色和字体等属性让你设定.
ASM中好像挺麻烦的,据说要拦截
WM_CTLCOLORBTN
WM_CTLCOLOREDIT
等等然后
invoke SetTextColor,WParam,Black
最后还要返回刷子
invoke GetStockObject,BLACK_BRUSH
可是我新手一个,不知道如何获取控件的句柄,也不知道如何设置控件的其他属性和其他控件要在哪些事件里面拦截,
找到的代码偶也没有调试通过,还望各位大侠指点一下,讲下方法,给点资料就好,在此先谢过了~~~~
毕竟某些时候需要设置给某些不同的字体和颜色的,偶给窗体颜色为Black他竟然给我变成无色的了(例如在桌面就可以看见后面图标),唉,晕呀,设置为White运行了连窗口就不出现~~~~
...全文
42 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
banxian 2002-06-19
  • 打赏
  • 举报
回复
字体可以这样设置:
invoke CreateWindowEx,0h,addr szButton,addr szButtonCap4,58018000h,108,45,79,37,hWin,IDC_check,hInstance,0
;这个是创建一个按纽
mov htmp, eax
;这个是将句柄读取到一个暂时值
INVOKE SendMessage ,htmp,WM_SETFONT,hFontB,0
;hFontB是我在代码中生成的字体,将其作为传递给窗口的消息的参数来实现更改字体
banxian 2002-06-17
  • 打赏
  • 举报
回复
.586
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
include kernel32.inc
include gdi32.inc

includelib user32.lib
includelib kernel32.lib
includelib gdi32.lib


WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
ControlButt PROTO :DWORD, :DWORD, :DWORD, :DWORD
ButtonType PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD

.data
ClassName db "MainWinClass",0
AppName db "PExplr181 keygen & patch",0
ButtClass db 'BUTTON',0
szRaised db 'Raised',0
FontName db 'Tahoma',0

.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
hButt1 dd ?
hButt2 dd ?
hButt3 dd ?
SubControl dd ?
SubControl1 dd ?
hFontB dd ?

lf LOGFONT <>
lf1 LOGFONT <>

.code


; ---------------------------------------------------------------------------


start:
invoke GetModuleHandle, NULL
mov hInstance,eax

invoke GetCommandLine
mov CommandLine,eax

invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
invoke ExitProcess,eax

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND

mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInstance
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+1
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET ClassName

invoke LoadIcon,hInst,101
mov wc.hIcon,eax
invoke LoadIcon,hInst,102
mov wc.hIconSm,eax

invoke LoadCursor,hInst,401
mov wc.hCursor,eax

invoke RegisterClassEx, addr wc
;---------- [Crate the main frame] ----------
INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
WS_OVERLAPPEDWINDOW-WS_MAXIMIZEBOX-WS_SIZEBOX,\
CW_USEDEFAULT, CW_USEDEFAULT,256,192,NULL,NULL,\
hInst,NULL
mov hwnd,eax

;========== [Create the Button Control] ----------
INVOKE CreateWindowEx, NULL, addr ButtClass, addr szRaised,
WS_CHILD or WS_VISIBLE,
10, 135, 80, 26, hwnd, 0050018000h, hInst, 0
mov hButt2, eax

;---------- [Subclass the Control] ----------
INVOKE SetWindowLong, hButt2, GWL_WNDPROC, ControlButt
mov SubControl, eax

;---------- [Create the Button Font] ----------
INVOKE lstrcpy, addr lf.lfFaceName, addr FontName
mov lf.lfHeight, 13
mov lf.lfWeight, 600
INVOKE CreateFontIndirect, ADDR lf
mov hFontB, eax


;========== [Create the Button Control] ----------
INVOKE CreateWindowEx, NULL, addr ButtClass, addr szRaised,
WS_CHILD or WS_VISIBLE,
120, 135, 80, 26, hwnd, 86, hInst, 0
mov hButt1, eax

;---------- [Subclass the Control] ----------
; INVOKE SetWindowLong, hButt2, GWL_WNDPROC, ControlButt
; mov SubControl1, eax

;---------- [Create the Button Font] ----------
; INVOKE lstrcpy, addr lf1.lfFaceName, addr FontName
; mov lf1.lfHeight, 12
; mov lf1.lfWeight, 400
; INVOKE CreateFontIndirect, ADDR lf
; mov hFontB, eax

invoke ShowWindow, hwnd,SW_SHOWNORMAL
invoke UpdateWindow, hwnd

.WHILE TRUE
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW

mov eax,msg.wParam
ret
WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

.IF uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.ELSEIF uMsg==WM_CREATE
;
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF

xor eax,eax
ret
WndProc endp

;=================================================
; Subclass procedure for the Control Buttons
;=================================================
ControlButt PROC hwnd:DWORD, wMsg, wParam, lParam
LOCAL UpDown:DWORD, hBR

INVOKE CallWindowProc, SubControl, hwnd, wMsg, wParam, lParam

mov UpDown , 1
.if wMsg == WM_PAINT
PaintEM:
mov eax, hwnd
.if eax == hButt2
INVOKE ButtonType, hButt2, hFontB, 000000ffh, 00000000h, addr szRaised, UpDown
.endif
mov UpDown, 1

.elseif wMsg == WM_LBUTTONDOWN || wMsg == WM_LBUTTONDBLCLK
mov UpDown, 2
jmp PaintEM

.elseif wMsg == WM_MOUSEMOVE || wMsg == WM_NCMOUSEMOVE
.if wParam == MK_LBUTTON
mov UpDown, 2
.else
mov UpDown, 1
.endif
jmp PaintEM

.elseif wMsg == WM_LBUTTONUP
mov UpDown, 1
jmp PaintEM
.endif

Ret1:
mov eax, TRUE
ret
ControlButt ENDP

;=============================================================================
; Creates various appearances of Buttons
;=============================================================================
ButtonType PROC hButt:DWORD, hFont, BackC, TextC, szText, Bor
LOCAL rect:RECT
LOCAL hOldFont:DWORD, hBR, hDC

INVOKE GetDC, hButt
mov hDC, eax
.if Bor == 2
mov BackC, 00929292h
.endif
INVOKE CreateSolidBrush, BackC
mov hBR, eax
INVOKE GetClientRect, hButt, addr rect
INVOKE FillRect, hDC, addr rect, hBR
INVOKE DeleteObject, hBR ; Delete the brush handle
mov eax, hButt
.if Bor == 1 && eax == hButt2
INVOKE DrawEdge, hDC, addr rect, BDR_RAISEDOUTER, BF_TOPLEFT
INVOKE DrawEdge, hDC, addr rect, BDR_RAISEDOUTER, BF_BOTTOMRIGHT
.elseif Bor == 2
INVOKE DrawEdge, hDC, addr rect, EDGE_SUNKEN, BF_RECT
.endif
INVOKE SelectObject, hDC, hFont ; Select the font into the dc
mov hOldFont, eax
INVOKE SetTextColor, hDC, TextC ; Set the text color
INVOKE SetBkMode, hDC, TRANSPARENT ; Set the text background to transparent
INVOKE DrawText, hDC, szText, -1, addr rect, DT_CENTER or DT_VCENTER or DT_SINGLELINE
INVOKE SelectObject, hDC, hOldFont
INVOKE ReleaseDC, hButt, hDC ; Release the control dc

xor eax, eax
ret
ButtonType ENDP

end start

这个麻烦了点,而且还正在调试.
banxian 2002-06-16
  • 打赏
  • 举报
回复
嗯,这个么,拿个实际的说,我要做一个补丁,和一个kengen,要是使用Delphi做起来的话真是有可能比原程序还大,呵呵.....
ckc 2002-06-16
  • 打赏
  • 举报
回复
delphi挺好的啊,为什么一定要用汇编写啊
我感觉汇编应该只用在一些特殊的场合,而不是什么应用都用汇编,连写窗口这样的活都用汇编,这个不是它的强项啊
banxian 2002-06-16
  • 打赏
  • 举报
回复
偶想做作补丁的工具也~~~~
vBin 2002-06-16
  • 打赏
  • 举报
回复
网上有做补丁的工具

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧