PDA

View Full Version : سوال: چگونگی ادغام دو Popup Menu



khorsandreza
سه شنبه 21 مهر 1394, 12:22 عصر
سلام دوستان
ضمن عرض تسلیت ایام سوگواری سالار شهیدان حضرت اباعبدا...
من در دو Popup Menu را در دو فرم جداگانه دارم یکی در فرم مستر و دومی در سایر فرم . حال می خواهم در فرم دومی وقیی باز میشه دو popup menu با هم ادغام شوند اگر بر روی یک ایتم راست کلیک کردم یک popup menu باز شود بخش پاپ منو فرم اصلی ایتم های عمومی دارد و بخش دوم پاپ منو در فرم دوم خصوصیات مورد نیاز ان فرم با دستور زیر میشه ادغام کرد ولی من نمی خواهم ساب منو باشد بلکه به ادامه ان اضافه شود

PrintPopupMenu.Items.Add(PopupMenu1.Items);

مثل شکل زیرمیباشد
135997
حال میخواهم بشکل زیر نشان داده شود
135998

یوسف زالی
سه شنبه 21 مهر 1394, 13:17 عصر
سلام.


var
menu: TMenuItem;
begin
menu := TMenuItem.Create(PopupMenu1);
menu.Caption := 'test';
PopupMenu1.Items.Add(menu);
end;

khorsandreza
سه شنبه 21 مهر 1394, 18:29 عصر
این کد روش دستی ایجاد پاپ منو می باشد .

ببنید من دوتا popup menu دارم بنام های PopupMenu1 و PopupMenu2 که هرکدام ایتم های بخصوص خود و رویدادهای اختصاصی هر منو است بخاطر یک نیاز قصد دارم وقتی بر روی کنترل خاص (مثلا دبی گیرد) راست کلیک کردم دو PopupMenu را به هم پیوند بزند و باهم نمایش دهد . اگر بخواهم مشابه دستور بالا ، همه اینها را هندل کنم کد نویسی زیاد میشود ظاهرا خود دلفی دستور خطی دارد که دو PopupMenu را با هم ادغام می کند

ابوالفضل عباسی
چهارشنبه 22 مهر 1394, 10:57 صبح
سلام دوست عزیز
من گشتم ولی فرمانی پیدا نکردم ولی برات بصورت procedure نوشتم:

procedure MergePopupMenu (var PopUp:TPopupMenu;PopUp1:TPopupMenu;PopUp2:TPopupMe nu);
var i:integer;
Meno1,Meno2,Meno3:TMenuItem;
begin
for I := 0 to PopUp1.Items.Count-1 do
begin
meno1:=Popup1.Items[i];
meno2:=TMenuItem.Create(form1);
meno2.Caption:=meno1.Caption;
meno2.OnClick:=Popup1.Items[i].OnClick;
PopUp.Items.Add(meno2);
end;
for I := 0 to PopUp2.Items.Count-1 do
begin
meno1:=Popup2.Items[i];
meno2:=TMenuItem.Create(Form1);
meno2.Caption:=meno1.Caption;
meno2.OnClick:=Popup2.Items[i].OnClick;
PopUp.Items.Add(meno2);
end;
end;


و برای استفاده به این صورت بنویس:

MergePopupMenu(PopupMenu3,PopupMenu1,PopupMenu2);
به جای popupmenu3 باید پوپ اپی که باید ادغام بشه رو بگذارید. به جای پوپ اپ 1 اون اصلی رو بگذاری. و به جای اون پوپ اپ 2 اون منویی که test روش نوشتی رو بگذاری.


برو حالش رو ببر.ولی بازم شرمنده که نتونستم راحتر بنویسم یا کد راحتری پیدا کنم:خجالت::ناراحت:

khorsandreza
دوشنبه 27 مهر 1394, 09:29 صبح
سلام
ممنون زحمت کشیدین من هم تقریبا کار را بشکل دستورات شما انجام دادم ولی شکل پروسیجر شما بنظرم جامع تر است .
این هم شکل پروسیجر من

Procedure AddNewSubMenu(PMenu:TPopupMenu;_Self:TForm);
Var
Item : TMenuItem;
I : Word;
Begin

for I := 0 to PMenu.Items.Count-1 do
Begin
_SeprtPopupMenu := TPopupMenu.Create(_Self);
Item := TMenuItem.Create(_SeprtPopupMenu);
Item.Caption := PMenu.Items[I].Caption;
Item.OnClick := PMenu.Items[I].OnClick;
Item.ShortCut := PMenu.Items[I].ShortCut;
MainForm.PrintPopupMenu.Items.Add(Item);
End;



End;