我正在嘗試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中的任何功能都可以用來編輯可執行文件的資源文件(如果存在的話)。 –