obiekty menu i submenu

0

Witam,

być może to błahostka, ale nie wiem jak zrobić cóś takiego.

Tworzę sobie w runtime popupmenu a wraz z nim kilka elementów głównych menu i kilka elementów w submenu. Wszystkie elementy, które w jakiś sposób reagują na clicknięcie odwołują się do tej samej procedurki.

I teraz
Czy można w jakiś sposób rozpoznać czy kliknąłem obiekt menu czy submenu, a jeśli tak to chciałbym dla submenu pobrać Caption obiektu menu do którego on należy, tak zeby połączyć teksty z dwóch poziomów menu

Jak dotychczas mam coś takeigo

procedure TForm1.COSClick(Sender: TObject);
var str:string;
begin
if (Sender is TMenuItem) then begin
.....
str:=(Sender as TMenuItem).Caption;
if (Sender as TMenuItem).Owner<>MyPopupMenu then
str:=
((Sender as TMenuItem).Owner as TMenuItem).Caption+
#13#10+str;
......

end;
red.SelText:=str;
end;

ale nie działa :-( :-( :-( :-( :-(
bo nie znajduje obiektu wyższego

0
(Sender as TMenuItem).Caption + (Sender as TMenuItem).Parent.Caption;
0

Jasne że Parent a nie Owner [glowa] [glowa] [glowa] [glowa] [glowa] [glowa] [glowa] [glowa] [glowa] [glowa] [glowa]

ale i tak nie wiem jak zrobić sprawdzenie czy element jest najwyżej w hierarchii (jak to się pisze [???]) mojego PopupMenu czy gdzieś głębiej.

Niestety porównanie typu
if (Sender as TMenuItem).Parent<>MyPopupMenu jest niemożliwe bo Delphik chce porównać TMenuItem z TPopupMenu.

Czy macie jakieś pomysły???
Ja jedyny jaki znalazłem to:
[code] if (Sender as TMenuItem).Parent.Caption<>'' then[/code] ale zdecydowanie mi on "nie leży".

Pozdrawiam wszystkich Delphi-nów

0

AHA i jeszcze jedno

Czy jest jakaś szansa, żeby w Caption obiektu TMainMenu wpisać tekst bez znaczka '&' (podkreślenia). Bo tak to muszę go szukać i usuwać, a chciałbym jakoś to uprościć

maManual Proste i jakże ODKRYWCZE
10x WeeR

0

Musisz dać <B>AutoHotKeys</B> na <B>maManual</B> i wtedy delphi ci nie robi automatycznie skrótów.. czyli czegoś takiego: <U>P</U>lik

0

Nie wiem jak to zrobić.. póki co proponuje nadać "Tagi" poszczególnym gałęziom i sprawdzać na nich.. przynajmniej do czasu aż się sprawa wyjaśni...

0

10x DETOX

Doszedłem do tego samego wniosku, ale ciut nie za bardzo mi się on podoba (za dużo mam tych elementów menu, a do tego tworzę je dynamicznie w zależności od uprawnień użytkownika).

Ale mam jeszcze jedno pytanko (UPS.jeszcze nie przeszukiwałem zasobów).

Czy da się zapisać jeden element menu w dwóch liniach?
Próbowałem z przejściem do nowej linii ale wyświetla tylko "kwadraciki".

Z góry wielkie dziękis za jakieś pomysły

0
with Sender as TMenuItem do
      if MainMenu.Items.IndexOf(Parent) = -1 then
          // NIE jest to item podczepiony do glownego menu
0
with Sender as TMenuItem do
      if MainMenu.Items.IndexOf(Parent) = -1 then
          // NIE jest to item podczepiony do glownego menu

Niestety działa niepoprawnie, bo u mnie wszystkie
[code](Sender as TMenuItem).IndexOf((Sender as TMenuItem).Parent)[/code] dają wynik -1, ale wbrew pozorom wyświetla się to co chciałem

tylko pewnie wszystko padnie w najmniej oczekiwanym momencie :-(

0
if ((Sender as TMenuItem).Parent.Name) = '' then 
  ShowMessage('To jest Item główny')
else ShowMessage('To jest SubItem');
0

Niestety działa niepoprawnie, bo u mnie wszystkie
(Sender as TMenuItem).IndexOf((Sender as TMenuItem).Parent) dają wynik -1, ale wbrew pozorom wyświetla się to co chciałem

Bo powinno być tak:
MainMenu.IndexOf((Sender as TMenuItem).Parent)

0

Dzięki MatroX

Jak widać niektórym trzeba ze dwa razy [krzyk] [krzyk] powiedzieć, żeby zrozumieli :-D

A propos mojego wcześniejszego (nieco zgubionego pytanka)

Czy można zapisać jeden element menu w więcej niż jedna linijka? Ot mam straszne długi tekst, który wyświetla mi się na 1/3 ekranu. Czy da się coś z tym zrobić, np. ograniczyć rozmiar PopupMenu ale tak, żeby tekst był cały. :d

0

Czy można zapisać jeden element menu w więcej niż jedna linijka?

Może pomoże takie coś:

menu.Caption:='Linia1%0D%0ALinia2';

A jak nie to, to chyba już tylko ownerDraw :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1