Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Formun tamamında geçerli mouse sağ click olayı yakalama
#1
İyi günler.
Formun her yerinde geçerli mouse sağ tuş click olayını nasıl yakalarım.
formun üstündeki tüm componentler de geçerli olacak.

 
Formun keypreview açık
formun olaylarında Formmousedown olayına kod yazdım.
Form da çalışıyor form üzerindeki herhangi bir componentte çalışmıyor.
hepsinin olayına yazma olmaz herhalde.

// mouse sağ tuşu yakala
Case Button of
 // mbLeft : ShowMessage('Sol tuşa basıldı');
 // mbMiddle : ShowMessage('Orta tuşa basıldı');
 mbRight : sag_clik_menu.Popup(mouse.CursorPos.x,mouse.CursorPos.y);
End;
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#2
Merhaba,
her bileşene aynı kodu yazmaktansa her bileşenin mousedown olayına formun mousedown olayını tanıtmakta olası bir seçenek sanırım.
En temelde bu şekilde yapılabilir. tabi çok bilgim yok aklıma bu geldi sadece.
Cevapla
#3
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Menus;

type
 TForm1 = class(TForm)
   sag_clik_menu: TPopupMenu;
    aa1: TMenuItem;
   bb1: TMenuItem;
   cc1: TMenuItem;
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 end;

 MouseLLHookStruct = record
   pt          : TPoint;
   mouseData   : cardinal;
   flags       : cardinal;
   time        : cardinal;
   dwExtraInfo : cardinal;
 end;

var
 Form1 : TForm1;
 mHook : cardinal;

implementation

{$R *.dfm}

function LowLevelMouseHookProc(nCode, wParam, lParam : integer) : integer; stdcall;
var
 info : ^MouseLLHookStruct absolute lParam;
begin
result := CallNextHookEx(mHook, nCode, wParam, lParam);
with info^ do
case wParam of
  wm_rbuttondown : Form1.sag_clik_menu.Popup(pt.x, pt.y);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
const
 wh_mouse_ll = 14;
begin
mHook := SetWindowsHookEx(wh_mouse_ll, @LowLevelMouseHookProc, hInstance, 0);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnhookWindowsHookEx(mHook);
end;

end.
Cevapla
#4
(07-11-2020, Saat: 17:21)Mr.Developer Adlı Kullanıcıdan Alıntı: Merhaba,
her bileşene aynı kodu yazmaktansa her bileşenin mousedown olayına formun mousedown olayını tanıtmakta olası bir seçenek sanırım.
En temelde bu şekilde yapılabilir. tabi çok bilgim yok aklıma bu geldi sadece.

Cevap için teşekkür ederim .
Label,Edit, v.s gibi 100 den fazla component  için pek uygun olmadığı kanaatindeyim.

(07-11-2020, Saat: 18:51)bibilen Adlı Kullanıcıdan Alıntı:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Menus;

type
 TForm1 = class(TForm)
   sag_clik_menu: TPopupMenu;
    aa1: TMenuItem;
   bb1: TMenuItem;
   cc1: TMenuItem;
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 end;

 MouseLLHookStruct = record
   pt          : TPoint;
   mouseData   : cardinal;
   flags       : cardinal;
   time        : cardinal;
   dwExtraInfo : cardinal;
 end;

var
 Form1 : TForm1;
 mHook : cardinal;

implementation

{$R *.dfm}

function LowLevelMouseHookProc(nCode, wParam, lParam : integer) : integer; stdcall;
var
 info : ^MouseLLHookStruct absolute lParam;
begin
result := CallNextHookEx(mHook, nCode, wParam, lParam);
with info^ do
case wParam of
  wm_rbuttondown : Form1.sag_clik_menu.Popup(pt.x, pt.y);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
const
 wh_mouse_ll = 14;
begin
mHook := SetWindowsHookEx(wh_mouse_ll, @LowLevelMouseHookProc, hInstance, 0);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnhookWindowsHookEx(mHook);
end;

end.

cevap için teşekkür ederim daha önce bilmediğim kodlar inceleyerek deneyeceğim
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
Cevapla
#5
Bir an genel programlama da açıldığını fark ettim.  Blush
Sağ tık olayından bahsetmiş olmanıza rağmen aklım FMX de kalmış özür dilerim. "100'den fazla" ibaresini görünce dedim "neee!".
Mobil de o kadar şey nasıl sığmış falan diye geçirdim bir an aklımdan Smile
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi ile SQL server bağlantı hatası yakalama Under 20 1.981 21-11-2025, Saat: 15:24
Son Yorum: mrmarman
  Firedac Query-Dataset Kaydırma DataChange Olayı YILDIRIMBEY 9 1.572 31-08-2025, Saat: 04:56
Son Yorum: emailx45
  Rest Hata Yakalama m_ekici 13 3.907 15-08-2024, Saat: 17:32
Son Yorum: mrmarman
  Fare Hareketi Yakalamak : Mouse.CursorPos.X bydelphi 8 2.304 24-06-2024, Saat: 11:17
Son Yorum: bydelphi
  FDEventAlerter Yakalama Sorunu Kral 1 586 23-05-2024, Saat: 10:18
Son Yorum: Diyojen



Konuyu Okuyanlar: 1 Ziyaretçi