PDA

View Full Version : حذف PopupMenu مربوط به کامپونتها؟



SYNDROME
سه شنبه 05 تیر 1386, 15:58 عصر
با سلام
بنده تعدادی کامپونت روی صفحه گذاشتم(Edit و . . . ).
حالا در زمان اجرای برنامه اگر بر روی این کامپونتها راست کلیک کنیم یک لیس از منوها نشان می دهد.
مثلا در Edit گزینه هایی مثل Copy و Past و Cut و . . . را نمایش می دهد.(البته کامپونتهای دیگری هم است)
حالا کسی می داند بنده چطور می توانم این PopupMenuها را در هنگام اجرای برنامه غیر فعال کنم.
با تشکر فراوان

saman020
سه شنبه 05 تیر 1386, 16:45 عصر
component ها یک property بنام popupmenu دارند
روی فرم یک popupmenu قرار دهید و property مربوط به component مربوطه را به این popupmenu ی خالی ارتباط دهید

Mahmood_M
سه شنبه 05 تیر 1386, 18:26 عصر
با سلام
بنده تعدادی کامپونت روی صفحه گذاشتم(Edit و . . . ).
حالا در زمان اجرای برنامه اگر بر روی این کامپونتها راست کلیک کنیم یک لیس از منوها نشان می دهد.
مثلا در Edit گزینه هایی مثل Copy و Past و Cut و . . . را نمایش می دهد.(البته کامپونتهای دیگری هم است)
حالا کسی می داند بنده چطور می توانم این PopupMenuها را در هنگام اجرای برنامه غیر فعال کنم.
با تشکر فراوان
می خواید اصلا نشون ندید ؟ یا اینکه یک منوی دیگه نشون بدید ؟
اگه میخواید یک منوی دیگه نشون بدید ، همونطور که دوستمون گفتند عمل میکنید ولی اگه می خواید که اصلا نشون ندید از روش زیر استفاده میکنید :
برای این کار باید از رویداد OnMessage مربوط به کامپوننت TApplicationEvents استفاده کنید ، مثلا اگه بخواید منوی یک Edit رو حذف کنید ، باید این کامپوننت رو روی فرم گذاشته و در رویداد OnMessage اون مثلا کد زیر رو بنویسید :

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (Msg.message = WM_RBUTTONDOWN) and (Msg.hwnd = Edit1.Handle) then
begin
ApplicationEvents1.CancelDispatch;
Handled := True;
end;
end;
در کد بالا اگر پیغام فرستاده شده به برنامه ، از نوع راست کلیک باشه و هندل اون هم بر روی Edit1 باشه ، پیغام اجرا نخواهد شد ...

میتونید از کد زیر استفاده کنید تا هر جای فرم که راست کلیک انجام شد ، اتفاقی نیافته :

if Msg.message = WM_RBUTTONDOWN then
begin
ApplicationEvents1.CancelDispatch;
Handled := True;
end;

ولی اگه بخواید ، PopUp منوی مربوط به همه Edit ها رو حذف کنید ، میتونید یک PopUp منوی خالی روی فرم بزارید و بعد PopUp منوی Edit ها رو با اون ارتباط بدید ، اینطوری وقتی راست کلیک انجام بشه چیزی نمایش داده نمی شه ...
ولی برخی کامپوننتها هستند که خاصیت PopUpMenu ندارند ، برای این کامپوننتها باید از همون روش بالا استفاده کنید ، ولی برای سایر کامپوننتها که خاصیت PopUpMenu دارند ، میتونید از یک PopUpMenu ی خالی استفاده کنید ...
نکته دیگه این که در کد بالا ، اگه بخواید یک PopUpMenu ی دیگه نشون بدید ، به جای قسمت " ;Handled := True " از " ;(PopUpMenu1.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y " استفاده کنید ... ( یک PopUpMenu نشان دهید )

موفق باشید ...

m-khorsandi
سه شنبه 05 تیر 1386, 19:11 عصر
از رویداد OnContextPopup کامپوننت استفاده کن و کد زیر رو بنویس:


handled := true;

به این شکل در واقع قصد داری که Context Menu رو خودت کنترل کنی.

SYNDROME
سه شنبه 05 تیر 1386, 20:56 عصر
با سلام
دوستان عزیز آقا محمد و محمود دستت درد نکنه.
مشکلم حل شد.