Entwickler-Ecke
Sonstiges (Delphi) - Ein OnClick für mehrere MainMenue Einträge?
pwsolaris - Mo 02.08.10 10:04
Titel: Ein OnClick für mehrere MainMenue Einträge?
Hallo,
ich habe ein Mainmenu mit drei Hauptpunkten. Zu einem der Hauptpunkte existiert ein Unterpunkt (hier im Beispiel mal "Testfälle" genannt).
Zu dem Unterpunkt "Testfälle" existieren die Einträge "Test A", "Test B" und "Test C".
Für jeden der Testfälle soll nun ein und dieselbe Prozedur aufgerufen werden, jedoch mit unterschiedlichem Übergabeparameter (hier im Beispiel ist der Übergabeparameter die Caption des Menüpunktes: Also "Test A", "Test B" oder "Test C").
Bisher muss ich für jeden Testfall ein eigenes OnClick Ereignis haben.
Ich habe aber vor, das Ganze etwas übersichtlicher zu gestalten und will daher unnötige Codezeilen sparen.
Ist es also möglich, ein einziges OnClick Ereignis zu haben, welches für jeden Untermenupunkt zählt und in dem ich dann den Namen (Caption) des gedrückten Punktes auslesen kann?
In meinem Beispiel ist es ja noch einfach gehalten mit drei Punkten. Im späteren Projekt können es aber wesentlich mehr Punkte werden. Für jeden dieser Punkte dann ein eigenes Ereignis zu benutzen wäre zwar einfach, aber auch unübersichtlich. Zumal bei jedem OnClick ja die gleiche Prozedur aufgerufen wird, nur mit anderem Übergabeparameter.
Ist so etwas also möglich oder muss ich den "großen" Weg gehen?
Xion - Mo 02.08.10 10:38
Hi,
du weist einfach allen Einträgen die selbe Procedure zu.
Die Caption kannst du per TMainMenuItem(Sender).Caption herausfinden. (TMainMenuItem oder so ähnlich, dort steht immer der type, den sender hat).
pwsolaris - Mo 02.08.10 11:42
Wie könnte ich denn dann alle Einträge auf die gleiche Prozedur verweisen?
Also im OnClick Ereignis eines einzelnen Eintrags will ich das ja nicht machen.
Habe hier momentan leider kein Delphi zur Verfügung, kann demnach also nicht eben schnell nachschauen.
jasocul - Mo 02.08.10 11:54
Du kannst im Objekt-Inspektor zum jeweiligen Menüpunkt auch andere Methoden aufrufen, die "passend" sein könnten.
Das funktioniert nicht nur für Menüpunkte. :wink:
Xion - Mo 02.08.10 11:56
pwsolaris hat folgendes geschrieben : |
| Wie könnte ich denn dann alle Einträge auf die gleiche Prozedur verweisen? |
Du kannst es entweder im Objektinspektor machen oder (am besten wenn du die Einträge zur Laufzeit erstellst) die procedure zur Laufzeit zuweisen. Dann gäbe es noch die Möglichkeit per FindComponent die entsprechenden Items zu suchen und dann zuzuweisen(langsam).
Dynamsiches zuweisen (Beispiel für TButton):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure ItemOnClick(Sender: TObject); ... Btn1.OnClick:=ItemOnClick; Btn2.OnClick:=ItemOnClick; Btn3.OnClick:=ItemOnClick; ...
procedure TForm1.ItemOnClick(Sender: TObject); begin S:=TButton(Sender).Caption;
if S='ModusA' then beep else if S='ModusB' then beep else beep; end; |
//Edit:
Für den Objektinspektor brauchst du natürlich erstmal eine Procedure. Die kannst du z.B. herkömmlich durch doppelklick erzeugen. Den andren weist du dann die selbe procedure zu (also keine neue, wie sie bei Doppelklick erzeugt würde, sondern du gibts in dem Feld einfach die alte an). Diese kannst du später auch noch im SourceCode umbennenen und es wird dann (soweit ich weiß) für die Objekte übernommen.
pwsolaris - Mo 02.08.10 12:11
Alles klar.
Danke :)
Sobald ich wieder in meiner Delphi-Umgebung bin wird das direkt getestet.
//Edit
Hat alles wunderbar geklappt. Danke für eure Hilfe :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!