Biliyorsunuz ki her objenin contextmenu veya right click eventi yok. Dolayısıyla bu objelere popup menü (sağ tık menü) yapamıyorduk. Memory plugini bu noktada bize yardımcı oluyor. Kodlarımızı inceleyelim.
Öncelikle Global Functions kısmına kodlarımızı yazıyoruz ;
WM_LBUTTONDOWN = 513
WM_LBUTTONUP = 514
WM_RBUTTONDOWN = 516
function SelectItem(hWnd, wParam, lParam)
LeftButtonDown(hWnd, wParam, lParam)
LeftButtonUp(hWnd, wParam, lParam)
end
function LeftButtonUp(hWnd, wParam, lParam)
va_args = string.format("%d,%d,%d,%d",hWnd, WM_LBUTTONUP, wParam, lParam)
DLL.CallFunction("User32.dll", "SendMessageA", va_args, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL);
end
function LeftButtonDown(hWnd, wParam, lParam)
va_args = string.format("%d,%d,%d,%d",hWnd, WM_LBUTTONDOWN, wParam, lParam)
DLL.CallFunction("User32.dll", "SendMessageA", va_args, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL);
end
function LOWORD(value)
return Memory.BitAND(value, 65535)
end
function HIWORD(value)
return Memory.BitAND(Memory.ShiftRight(value, 16), 65535)
end
---------- Menü kodlarımız ------------
function ShowPopUpMenu()
tblMenu = {};
tblMenu[1] ={};
tblMenu[1].Text = "ExtremitySoft";
tblMenu[1].ID = 100;
tblMenu[1].IconID = 0;
tblMenu[1].Checked = false;
tblMenu[1].Enabled = true;
tblMenu[2] ={};
tblMenu[2].Text = "Divane ©";
tblMenu[2].ID = 200;
tblMenu[2].IconID = 0;
tblMenu[2].Checked = false;
tblMenu[2].Enabled = true;
Mouse = System.GetMousePosition(true, nil);
nRes = Application.ShowPopupMenu(Mouse.X, Mouse.Y, tblMenu, TPM_LEFTALIGN, TPM_TOPALIGN, true, true);
end
Globale kodlarımızı yazdık, aynı zamanda menümüzü de oluşturduk. Şimdi sıra obje ile ilişkilendirmede. Kodları inceleyelim ;
On show eventine kodlarımızı yazıyoruz.
function CallBack(hWnd, uMsg, wParam, lParam)
if uMsg == WM_RBUTTONDOWN then
SelectItem(hWnd,wParam, lParam)
ShowPopUpMenu()
end
end
LBHandle = ListBox.GetProperties("ListBox1").WindowHandle;
Memory.CreateWindowSubClass(LBHandle, 0, "CallBack");
İşlem tamamdır. Listbox objemize sağ tık menüsü oluşturmuş olduk. Bu kodlarla tüm objelere menü ekleyebilirsiniz.
LBHandle = ListBox.GetProperties("ListBox1").WindowHandle;
Sayfamızın on show evresine yazdığımız yukarıdaki kod Listbox'un handle değerini alıyordu. Bu satırda istediğiniz objenin handle değerini alarak popup menü göstermiş olacaksınız. Kolay gelsin.
Öncelikle Global Functions kısmına kodlarımızı yazıyoruz ;
WM_LBUTTONDOWN = 513
WM_LBUTTONUP = 514
WM_RBUTTONDOWN = 516
function SelectItem(hWnd, wParam, lParam)
LeftButtonDown(hWnd, wParam, lParam)
LeftButtonUp(hWnd, wParam, lParam)
end
function LeftButtonUp(hWnd, wParam, lParam)
va_args = string.format("%d,%d,%d,%d",hWnd, WM_LBUTTONUP, wParam, lParam)
DLL.CallFunction("User32.dll", "SendMessageA", va_args, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL);
end
function LeftButtonDown(hWnd, wParam, lParam)
va_args = string.format("%d,%d,%d,%d",hWnd, WM_LBUTTONDOWN, wParam, lParam)
DLL.CallFunction("User32.dll", "SendMessageA", va_args, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL);
end
function LOWORD(value)
return Memory.BitAND(value, 65535)
end
function HIWORD(value)
return Memory.BitAND(Memory.ShiftRight(value, 16), 65535)
end
---------- Menü kodlarımız ------------
function ShowPopUpMenu()
tblMenu = {};
tblMenu[1] ={};
tblMenu[1].Text = "ExtremitySoft";
tblMenu[1].ID = 100;
tblMenu[1].IconID = 0;
tblMenu[1].Checked = false;
tblMenu[1].Enabled = true;
tblMenu[2] ={};
tblMenu[2].Text = "Divane ©";
tblMenu[2].ID = 200;
tblMenu[2].IconID = 0;
tblMenu[2].Checked = false;
tblMenu[2].Enabled = true;
Mouse = System.GetMousePosition(true, nil);
nRes = Application.ShowPopupMenu(Mouse.X, Mouse.Y, tblMenu, TPM_LEFTALIGN, TPM_TOPALIGN, true, true);
end
Globale kodlarımızı yazdık, aynı zamanda menümüzü de oluşturduk. Şimdi sıra obje ile ilişkilendirmede. Kodları inceleyelim ;
On show eventine kodlarımızı yazıyoruz.
function CallBack(hWnd, uMsg, wParam, lParam)
if uMsg == WM_RBUTTONDOWN then
SelectItem(hWnd,wParam, lParam)
ShowPopUpMenu()
end
end
LBHandle = ListBox.GetProperties("ListBox1").WindowHandle;
Memory.CreateWindowSubClass(LBHandle, 0, "CallBack");
İşlem tamamdır. Listbox objemize sağ tık menüsü oluşturmuş olduk. Bu kodlarla tüm objelere menü ekleyebilirsiniz.
LBHandle = ListBox.GetProperties("ListBox1").WindowHandle;
Sayfamızın on show evresine yazdığımız yukarıdaki kod Listbox'un handle değerini alıyordu. Bu satırda istediğiniz objenin handle değerini alarak popup menü göstermiş olacaksınız. Kolay gelsin.