Cześć ;)
Nareszcie znalazłem coś skutecznego i o dość krótkim kodzie.
Odgrzebałem stary post pisany przez Eristoffa
http://4programmers.net/Forum/viewtopic.php?id=44281
Skopiowałem go poniżej ponieważ mam pytanie (dobrze by było gdyby on na to zerknoł).
Kod działa pięknie - podmienia standardowe PopupMenu myszki, drugim
popupem (moim) ale musiałem wyciąć kawałek kodu:
and
(GetParent(GetParent(msg.hwnd)) =PrivFrm.PrvChatWebBrowser.Handle
I pytanie co jest w tej linii schrzanione ?
Bez tego działa pięknie - ale umrę z ciekawości dlaczego z tą linią nie działa ? ;)
Poniżej podaje cały kod (pisał Eristoff) z tą linijką:
type
TPrivFrm = class(TForm)
PrvChatWebBrowser: TWebBrowser;
PopMenuPrvChatWebBrowser: TPopupMenu;
procedure MessageLoop(var Msg : TMsg ; var Handled : Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
PrivFrm: TPrivFrm;
function Klasa(Handle : THandle) : string;
var str : array[0..MAX_PATH] of Char;
begin
GetClassName(Handle, str, MAX_PATH);
result := StrPas(str);
end;
procedure TPrivFrm.MessageLoop(var Msg: TMsg; var Handled: Boolean);
var
mouse:Tpoint;
begin
if (Klasa(msg.hwnd) = 'Internet Explorer_Server')
and
(GetParent(GetParent(msg.hwnd)) =PrivFrm.PrvChatWebBrowser.Handle) then
begin
if (Msg.message = WM_RBUTTONDOWN) or (Msg.message = WM_RBUTTONUP) or (Msg.message = WM_CONTEXTMENU)
then begin
handled:=true;
getcursorpos(Mouse);
self.PopMenuPrvChatWebBrowser.Popup(Mouse.X, Mouse.Y);
end
else Handled := False; //not rbutton
end
else
Handled := false; //not webbrowser msg
end;
procedure TPrivFrm.FormActivate(Sender: TObject);
begin
Application.OnMessage := self.MessageLoop;
end;
PopMenuPrvChatWebBrowser <== popupmenu
<url></url>