Q&A

  • 폼의 메세지 후킹
아래는 제가 말들고자 하는 콤포넌트 소스입니다.

후킹은 되는데 실행되고 나서 폼에 WindowProc를 돌려 줘야 하는데

그게 안됩니다.

아래 방법말고 Destroy에서 돌려줄려고 하니까 에러가 나서 ....

제가 생각하기에는 돌려줘야 한다고 생각하는데

돌려주지를 못합니다.....



고수님들을 조언을 부탁드립니다.



unit TRan;



interface



uses classes, Forms, Windows, Messages, controls;



type

TTran = class(TComponent)

private

FTrnsWndProc: TWndMethod;

public

constructor Create(AOwner: TComponent); override;

destructor Destroy; override;

published

end;



procedure Register;



implementation



procedure Register;

begin

RegisterComponents('MS_Soft', [TTran]);

end;





constructor TTran.Create(AOwner: Tcomponent);

begin

inherited Create(AOwner);



FTrnsWndProc := (Self.Owner as TForm).WindowProc;

(Self.Owner as TForm).WindowProc := RunTrns;

end;



destructor TTran.Destroy;

begin

Destroying;

inherited Destroy;

end;



procedure TTran.RunTrns(var M: TMessage);

begin

if M.Msg = WM_GETMINMAXINFO then

// 이부분에서 특정 작업하기



// 메세지 돌려주기

FTrnsWndProc(M);



// Close 메세지에 WndProc 돌려주기

if M.Msg = WM_CLOSE then

(Self.Owner as TForm).WindowProc := FTrnsWndProc;

end;



end.

0  COMMENTS