我正在尝试subclass和WinApi edit control并重写paint方法。到目前为止我使用SetWindowLong函数和GWL_WNDPROC标志来重写原始窗口过程,然后我收到WM_PAINT消息并使用我自己的Paint逻辑,这是工作良好,但我想知道是否有可能创建一个shadow TEdit组件并将Winapi编辑控件的原始句柄传递给Delphi TEdit组件,这样我就可以使用阴影TEdit来获取和设置EDIT控件的属性。那可能吗?使用delphi VCL组件如何子类化WinApi Edit控件?
更新
继雷米建议有关使用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;
什么是影子组件?这是德尔福的概念吗?由“影子” –
我的意思是创建一个“假”TEdit VCL控件。 – Salvador
好的。那么在这种情况下,我并不知道WinAPI中的任何功能都可以用来编辑可执行文件的资源文件(如果存在的话)。 –