![]() |
Feststellen welches Menü item im submenü geklickt wurde
Wieder Menü!
In VB kann ich einen Submenü für jeden eintrag einen Index zuweisen.. und damit vergleichen welcher eintrag geklickt wurde.
Delphi-Quellcode:
wie geht das in Delphi ?
Private Sub mnuEffectes_Click(Index As Integer)
Select Case Index ... bal, bla. bla ... umstellen ist schwierig man kennt die meisten functionen noch nicht. gruss Emil |
Re: Feststellen welches Menü item im submenü geklickt wurde
Da ich mich mit VB net gut auskenne, bin ich mir net sicher ob das ist was du suchst, aber jeder Menu eintrag hat die eigenschaft TAG, die ist glaube ich was du suchst. Du musst den nur setzen, wird nicht automatisch gemacht
Thorben |
Re: Feststellen welches Menü item im submenü geklickt wurde
Zitat:
Kann man verwenden.. Nur wie komme ich jetzt an das submenuitem ? Hab da nix gefunden.
Delphi-Quellcode:
gibt mir ja nur den Tag vom Vismodule1 nicht aber die von deren Submenü
case Vismodule1.Items.Tag of ...
was muss dann aber nach Vismodule1 ... stehen ? gruss Emil |
Re: Feststellen welches Menü item im submenü geklickt wurde
Der Parameter Sender ist die Instanz des SubMenus, welches geklickt wurde. Vergleiche dies doch einfach mit deinem Submenu-Items der Form. Wenn der Vergleich stimmt, der war's dann.
Wenn du ganz allgemein auf das MenuItem zugreifen willst, dann mache einen typecast von Sender auf TMenuItem... |
Re: Feststellen welches Menü item im submenü geklickt wurde
Zitat:
Delphi-Quellcode:
Hab da noch ncihts eingetragen das ich es testen könnte..
procedure TVisForm.Vismodule1Click(Sender: TObject);
begin case Vismodule1.items[Vismodule1.MenuIndex].Tag of 0: ; 1: ; 2: ; 3: ; 4: ; 5: ; 6: ; end; end; Habe den Tag's die jeweiligen Indexe übergeben. gruss Emil |
Re: Feststellen welches Menü item im submenü geklickt wurde
Entweder über Sender und Instanzenvergleich:
Delphi-Quellcode:
Oder über den Tag:
Procedure TBlubbv.Click(Sender: TObject);
Begin If ( Sender = miMeinMenuItem1 ) Then ShowMessage('Das war miMeinMenuItem1') Else If ( Sender = miMeinMenuItem2 ) Then ShowMessage('Das war miMeinMenuItem2') Else If ( Sender = miMeinMenuItem3 ) Then ShowMessage('Das war miMeinMenuItem3') Else ShowMessage('Das war irgendwas anderes...'); End;
Delphi-Quellcode:
Procedure TBlubb.Click(Sender: TObject);
Begin If Sender Is TComponent Then Begin Case TComponent(Sender).Tag Of 1: ShowMessage('Tag = 1'); 2: ShowMessage('Tag = 2'); 3: ShowMessage('Tag = 3'); 4: ShowMessage('Tag = 4'); End; End; End; |
Re: Feststellen welches Menü item im submenü geklickt wurde
Habe das mal nachvollzogen
komme aber nicht auf das submenuitem
Delphi-Quellcode:
Er springt immer in 'Das war irgendwas anderes...'
procedure TVisForm.Vismodule1Click(Sender: TObject);
Begin If ( Sender = Spectrum1 ) Then ShowMessage('Das war Spectrum1') Else If ( Sender = VuBox1 ) Then ShowMessage('Das war VuBox1') Else If ( Sender = Peristalsis1 ) Then ShowMessage('Das war Peristalsis1') Else ShowMessage('Das war irgendwas anderes...'); end; Sobald ich mit der maus auf den eintrag Vismodule1 komme Ein klick Event kann ich dann nicht mehr auslösen. Auch nach den kommentieren dieser zeile komm ich niemals ins submenü .... Verstehe nicht das es so kompliziert ist an den eintrag eines Menüs zu gelangen Sorry das ich nochmal mit VB anfange.. Ich gebe im Designer einen Index für den Eintrag ein. Dann wird beim aufruf direkt ne sub angelegt wo ein Index mit übergeben wird.
Delphi-Quellcode:
Dann kann ich mit dem Index arbeiten ohne irgendwelche probleme
Private Sub mnuVis_Click(Index As Integer)
DoEvents Select Case Index Case 0, 1, 2, 3, 4 VisAll = False Case 5 VisAll = True End Select mnuVis(Index).Checked = True CurFlame = Index For Index = 0 To 5 If Index <> CurFlame Then mnuVis(Index).Checked = False End If Next Index If Index = 5 Then CurFlame = 4 End If SaveSetting EMPLAYER, "Visual", "CurFlame", CurFlame End Sub oder etwas anderes dafür zu initialisieren. gruss |
Re: Feststellen welches Menü item im submenü geklickt wurde
Ich kenne mich mit Delphi.NET zwar nicht aus, aber wieso weißt du nicht einfach für jedes SubMenu-Item den gleichen OnClick-Event zu?
In dem Event castest du den Sender einfach auf TMenuItem (oder wie das in Delphi.NET heisst) und schon hast du das geklickte Item.
Delphi-Quellcode:
Geht das nicht?
procedure TVisForm1.FooMenuItemClick (Sender: TObject);
begin ShowMessage ((Sender as TMenuItem).Caption); end; |
Re: Feststellen welches Menü item im submenü geklickt wurde
Zitat:
Aber das war sehr Hilfreich. Jetzt funktioniert auch diese Abfrage!
Delphi-Quellcode:
gruss Emil
procedure TVisForm.Vismodule1Click(Sender: TObject);
Begin If ( Sender = Spectrum1 ) Then ShowMessage('Das war Spectrum1') Else If ( Sender = VuBox1 ) Then ShowMessage('Das war VuBox1') Else If ( Sender = Peristalsis1 ) Then ShowMessage('Das war Peristalsis1') Else ShowMessage('Das war irgendwas anderes...'); end; |
Re: Feststellen welches Menü item im submenü geklickt wurde
Zitat:
Zitat:
|
Re: Feststellen welches Menü item im submenü geklickt wurde
Zitat:
Habe jetzt alle OnClick ereignisse auf die sub gelegt.
Delphi-Quellcode:
Das funktioniert zwar ..
procedure TVisForm.ModuleClick(Sender: TObject);
Var i : Integer; mi: TMenuItem; CurrentItem: Integer; begin mi := Sender as TMenuItem; CurrentItem:= mi.tag; If ( Sender = Spectrum1 ) Then ShowMessage('Das war Spectrum1') Else If ( Sender = VuBox1 ) Then ShowMessage('Das war VuBox1') Else If ( Sender = Peristalsis1 ) Then ShowMessage('Das war Peristalsis1') Else ShowMessage('Das war irgendwas anderes...'); for i := 0 to 6 do If i = CurrentItem Then mi.Checked := true else mi.Checked := false; end; Aber wie kann ich jetzt außerhalb der form den Menüeintrag abfragen welcher angeklickt wurde ? Wenn ich immer noch nicht weiss wie ich an die submenuitems gelange. Auch wird mir so der eintrag nicht als checked makiert ... gruss Emil |
Re: Feststellen welches Menü item im submenü geklickt wurde
procedure TVisForm.ModuleClick(Sender: TObject);
Var i : Integer; mi: TMenuItem; CurrentItem: Integer; begin mi := Sender as TMenuItem; CurrentItem:= mi.tag; If ( Sender = Spectrum1 ) Then Spectrum1.checked:= not spectrum.checked usw. usw. [delphi] Ich hoffe das hilft dir |
Re: Feststellen welches Menü item im submenü geklickt wurde
Zitat:
mi ist doch als TMenuItem declariert findet also den richtigen eintrag (Index) eingestellt im Tag des menüItem Warum schaltet mi dann diesen eintrag nicht auf true Der Tag wird doch auch erkannt! gruss Emil |
Re: Feststellen welches Menü item im submenü geklickt wurde
Der Tag ist eine Eigenschaft des Objects Submenuitem von Typ Integer(Glaub ich..).
Das Checked ist eine Eigenschaft des Objects Submenuitem von Typ Boolean(weis ich!). Wenn du also den Tag einen Wert zuweist hat das noch lang nix mit der Eigenschaft Checked zu tun ! Gruß Matthias |
Re: Feststellen welches Menü item im submenü geklickt wurde
Zitat:
Ich rede aber nicht von bool, integer oder Tag .. sorry sondern davon das mi als MenuItem declariert ist. Also theoretisch alle eigenschaften des MenuItem besitzen muss! Sonst könnte ich ja den Tag auch nicht abfragen oder ? Warum wird dann wenn ich mi.checked := True angebe der Menüeintrag nicht auf true gesetzt ? Wenn mi den Menüeintrag repräsentiert ? begin EDIT: Dann brauche ich mi auch nicht declarieren da es in dem Fall unsinnig wäre und die Tag eigenschaften bringen dann auch nichts. was ich verstehe das er unterumständen die eigenschaften der anderen menüs nicht erkennt da er hier ja nur das aktuelle angeklickte Menü erkennt. Aber das muss mindestens auf True gesetzt werden können. end EDIT gruss Emil |
Re: Feststellen welches Menü item im submenü geklickt wurde
Bist du schon mal mit dem debugger durchegegangen was der Code macht.
Habs mal mit dienem Code bei mir versucht nachzustellen. Klappt wunderbar. |
Re: Feststellen welches Menü item im submenü geklickt wurde
Zitat:
Ja er geht auch durch ohne ärger. Schaltet aber den eintrag nicht auf true = checked Keine ahnung warum. EDIT: Die MessageBox hat das problem verursacht. Aber funktionieren tut das ganze immer noch nicht. Habe immer noch nicht die info wie ich an die submenuitems gelange Es gibt nix im inet keine Seite hat ein Sample wo man sich das mal anschauen kann. Auch hier gibt es nix ;) Wär mal was für die codelib gruss |
Re: Feststellen welches Menü item im submenü geklickt wurde
Liste der Anhänge anzeigen (Anzahl: 1)
mein letzter Versuch.(Mein Badewasser wird grad kalt !
hab dir schnell was zusammengebastelt und angehängt. Vielleicht kannst du damit dein Problem finden |
Re: Feststellen welches Menü item im submenü geklickt wurde
Zitat:
Ich habe es jetzt so gelößt.
Delphi-Quellcode:
Mein problem bleibt aber bestehen.
procedure TVisForm.ModuleClick(Sender: TObject);
Var IntI : Integer; mi : TMenuItem; CurrentItem : Integer; begin mi := Sender as TMenuItem; CurrentItem := mi.tag; mi.checked := True; If ( Sender = Spectrum1 ) Then ShowMessage('Das war Spectrum1') Else If ( Sender = VuBox1 ) Then ShowMessage('Das war VuBox1') Else If ( Sender = Peristalsis1 ) Then ShowMessage('Das war Peristalsis1') Else If ( Sender = Polygone1 ) Then ShowMessage('Das war Polygone') Else If ( Sender = CompactDisc1 ) Then ShowMessage('Das war CompactDisc') Else If ( Sender = Plasma1 ) Then ShowMessage('Das war Plasma') Else If ( Sender = Water1 ) Then ShowMessage('Das war Water'); for IntI := 0 to 6 do if IntI <> CurrentItem then case IntI of 0: Spectrum1.checked := False; 1: VuBox1.checked := False; 2: Peristalsis1.checked := False; 3: Polygone1.checked := False; 4: CompactDisc1.checked := False; 5: Plasma1.checked := False; 6: Water1.checked := False; end; end; Innerhalb der form ist das nun geklärt aber ich muss das submenuItem auch außerhalb der Form erkennen können welcher index(eintrag) nun gewählt ist. Da ich hier eine case anweisung einbauen muss welche daraufhin das im Menu gewählte Visualisierungs-Modul ausführt. Geht das generell oder muss ich mir da externe variablen einrichten ? gruss |
Re: Feststellen welches Menü item im submenü geklickt wurde
So bin wieder sauber :)
Wenn du das mit TVisForm.Spectrum1.checked prüfst mußt du nichts eintragen. Du kannst von jeder Form der Anwendung aus auf jede andere Form zugreifen. Du darfst nur nicht vergessen die entsprechende Zielform anzugeben, sonst geht die aktuelle form von self.spectrum1.checked aus und das gibts dann ja nicht. Gruß Matthias |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz