Autor Beitrag
pwsolaris
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 71
Erhaltene Danke: 1

MS DOS, Win 95, Win 98, Win ME, Win XP, Win Vista, Win 7 Ultimate
Delphi 5 Enterp., Delphi 2007, Delphi 2009, Informix 4GL, VB .NET, MS/SQL, PL/SQL
BeitragVerfasst: Mo 02.08.10 10:04 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: 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).

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
pwsolaris Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 71
Erhaltene Danke: 1

MS DOS, Win 95, Win 98, Win ME, Win XP, Win Vista, Win 7 Ultimate
Delphi 5 Enterp., Delphi 2007, Delphi 2009, Informix 4GL, VB .NET, MS/SQL, PL/SQL
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mo 02.08.10 11:56 
user profile iconpwsolaris hat folgendes geschrieben Zum zitierten Posting springen:
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):
ausblenden 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.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
pwsolaris Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 71
Erhaltene Danke: 1

MS DOS, Win 95, Win 98, Win ME, Win XP, Win Vista, Win 7 Ultimate
Delphi 5 Enterp., Delphi 2007, Delphi 2009, Informix 4GL, VB .NET, MS/SQL, PL/SQL
BeitragVerfasst: 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 :)