WinApi 編集コントロールをサブクラス化し、ペイント メソッドをオーバーライドしようとしています。これまでのところ、SetWindowLong関数とGWL_WNDPROCフラグを使用して元のウィンドウ プロシージャをオーバーライドしてから、WM_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;