私はsubclassとWinApi edit controlをしようとしており、ペイント方法をオーバーライドしています。これまでのところ、SetWindowLong関数とGWL_WNDPROCフラグを使用して元のウィンドウプロシージャをオーバーライドすると、WM_PAINTメッセージが表示され、自分のペイントロジックを使用していますが、これはうまくいきましたが、 影 TEditコンポーネントとWinapi EDITコントロールの元のハンドルをDelphi TEditコンポーネントに渡します。そうすることで、シャドーTEditを使用してEDITコントロールのプロパティを取得および設定できます。それは可能ですか?delphi VCLコンポーネントを使用してWinApi Editコントロールをサブクラス化する方法はありますか?
更新
私はこのコードで終了WindowHandle
プロパティを使用しますが、動作していない程度レミーの提案(エディットコントロールの色を設定することが影響していない)に続き。 (TEdit
から派生)
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;
シャドウコンポーネントとは何ですか?それはDelphiのコンセプトですか? –
"shadow"とは、 "偽の" TEdit VCLコントロールを作成することを意味します。 – Salvador
申し訳ありません。その場合、WinAPIの機能のうち、実行可能ファイルのリソースファイルを編集することができないような機能(存在する場合)を認識できません。 –