我正在尝试子类化WinApi 编辑控件并覆盖绘制方法。到目前为止,我正在使用SetWindowLong函数和GWL_WNDPROC标志来覆盖原始窗口过程,然后我收到 WM_PAINT 消息并使用我自己的 Paint 逻辑,这很好用,但我想知道是否可以创建阴影TEdit组件并将 Winapi EDIT 控件的原始句柄传递给 Delphi TEdit 组件,这样我就可以使用影子 TEdit 来获取和设置 EDIT 控件的属性。那可能吗?
更新
按照 Remy 关于使用WindowHandle
属性的建议,我以这段代码结束,但不起作用(设置编辑控件的颜色无效)。
type
TWinControlCracker= class(TWinControl);
Var
ShadowEdit : TEdit;
newWndProc : Pointer;
EditHandle : NativeInt;
begin
EditHandle:=$00320530;//this is the handle to the EDIT control
ShadowEdit:=TEdit.Create(nil);
TWinControlCracker(ShadowEdit).WindowHandle:=EditHandle;
newWndProc := MakeObjectInstance(ShadowEdit.WindowProc);
SetWindowLong(EditHandle, GWL_WNDPROC, NativeInt(newWndProc));
ShadowEdit.Color:=clLime;
ShadowEdit.Refresh;
end;