Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Rechtsklick in Flashplayer abfangen (https://www.delphipraxis.net/154371-rechtsklick-flashplayer-abfangen.html)

greenmile 8. Sep 2010 15:33

Rechtsklick in Flashplayer abfangen
 
Hallo,

ich denke mal, die Frage passt hier rein. Also, ich habe einen TEmbeddedWB in meine Form eingebunden, in der mittels HTML ein Flashplayer geladen wird. Allerdings nervt das Pop-Menü, wenn man mit der rechten Maustaste auf diesen Flashplayer klickt ("Option", "Über" usw.), auch die linke Maustaste (bei Videos z.B. "Pause" / "Play") lässt sich nicht abfangen. Weiß jemand, ob und wie ich das deaktivieren oder abfangen kann? Die Option "menu='false'" in der Quellhtml Datei bringt leider nichts ...

Gruß,
Paul

Daniel 8. Sep 2010 15:37

AW: Rechtsklick in Flashplayer abfangen
 
Bist Du selbst Erzeuger des Flash-Objektes? Beim Exportieren kann man u.a. dies explizit festlegen.

greenmile 8. Sep 2010 15:38

AW: Rechtsklick in Flashplayer abfangen
 
Nein, ist ein fremdes Flashobject.

blackfin 8. Sep 2010 16:49

AW: Rechtsklick in Flashplayer abfangen
 
Du kannst es damit versuchen, die Message WM_RBUTTONDOWN abzufangen und somit auf einen rechten Mausklick + Koordinaten prüfen / reagieren.
Wenn die Mausklick-Koordinaten dann innerhalb des Rects des Flashmovies sind, die Message als "handled" gelten lassen und schon ist das Popup-Menü passé.
Ich hab sowas schonmal gemacht, um genau dieses Flash-Menü zu deaktivieren, allerdings habe ich da den Mausklick generell für das gesamte Delphi-Programm abgeschaltet.
(weil er da eh keine Verwendung hatte..und....reine Faulheit natürlich :D)

Wenn du den rechten Mausklick in deinem Programm anderweitig brauchst, musst du in meinem Code eben noch eine Prüfung auf den lParam der Message einbauen, der angibt, wo geklickt wurde (X/Y der Client-Area) und dann dementsprechend den Mausklick erlauben oder nicht.
Hier die Message-beschreibung im MSDN: WM_RBUTTONDOWN

Delphi-Quellcode:
Application.OnMessage := Form1.NoFlashRightClick ;
...
..
Delphi-Quellcode:
procedure Form1.NoFlashRightClick(var Msg: TMsg; var Handled: Boolean) ;
begin
   // hier noch durch eine Prüfung ergänzen, wo geklickt wurde (durch den Msg.lParam)

  if((Msg.message = WM_RBUTTONDOWN) and (Msg.wParam = MK_RBUTTON)) then
  begin
    Handled := true ;
  end
  else
  begin
    Handled := false ;
  end;
end;

Mit der linken Maustaste verhält es sich genauso, nur ist das dann natürlich die Message WM_LBUTTONDOWN

greenmile 9. Sep 2010 09:34

AW: Rechtsklick in Flashplayer abfangen
 
Wow, das funktioniert erste Sahne, vielen Dank. Für die Nachwelt hier der Source:


Code:
Application.OnMessage := NoFlashRightClick;
Code:
procedure TfrmMain.NoFlashRightClick(var Msg: TMsg; var Handled: Boolean);

  Function CursorInPlayerWindow: Boolean;
    var cPos, playerPos: TPoint;
  begin
    GetCursorPos(cPos);
    playerPos := Player.ClientToScreen(point(0,0));
    Result := (cPos.x>playerPos.x) and (cPos.y>playerPos.y) and (cPos.x<(playerPos.x+Player.Width)) and (cPos.y<(playerPos.y+Player.Height)));
  end;

begin
  Handled := false;

  If ((Msg.message = WM_RBUTTONDOWN) and (Msg.wParam = MK_RBUTTON)) then begin
    If CursorInPlayerWindow then Handled := True;
    // Hier ggf eigenes Menü "aufpoppen" lassen
  End Else If ((Msg.message = WM_LBUTTONDOWN) and (Msg.wParam = MK_LBUTTON)) then begin
    If CursorInPlayerWindow then Handled := True;
  End Else If ((Msg.message = WM_RBUTTONDBLCLK) or (Msg.message = WM_LBUTTONDBLCLK)) then begin
    If CursorInPlayerWindow then Handled := True;
  End;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz