Announcement

Collapse
No announcement yet.

MenuItem onClick

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MenuItem onClick

    hi ihr alle

    ich hab da mal ne frage zu etwas! vielleicht könnte mir da jemand<br>
    helfen! also mein problem ist folgendes:<br>

    ich habe ein popupmenu in ein form eingefügt, indem noch keine items<br> vorhanden sind! nun werden während der laufzeit items hinzugefügt.<br>
    mein problem ist nun so, wie bekomme herraus, dass der benutzer des<br> programms auf eines der items geklickt hat und auf welches er geklickt hat! <br>
    ich konnte ja davor noch nichts in ein onClick event von einem<br>
    menuitem schreiben, da ja noch keines da war. <br>

    ich hoffe eine von euch kann mir helfen! <br>
    danke an alle dir mir helfen können oda mir einen lösungs ansatz<br>
    geben können!<br>

    cu r0bbyr0b <br>

  • #2
    <html>

    <head>
    <meta http-equiv="Content-Type"
    content="text/html; charset=iso-8859-1">
    <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
    <title>Normale Seite ohne Titel</title>
    </head>

    <body bgcolor="#FFFFFF">

    <p>Ich würde bereits zur Entwicklungszeit einen entsprechenden
    Dummy-Menüpunkt definieren und dessen Eigenschaft Visible im
    FormCreate auf false setzen. Wenn dann der erste Menüeintrag
    erzeugt werden soll, setzt Du Visible auf true, bei weiteren
    ezeugst Du neue Items. Das hat den Vorteil, daß Du zur
    Entwicklungszeit schnell in den OnClick-Quelltext springen kannst.
    Fast genauso schnell geht es mit einer Action-List. Wenn Du
    beides nicht magst, gehts natürlich auch. Du mußt nur darauf
    achten, daß die OnClick-Methode den Parameter TObject *Sender
    erhält.</p>

    <pre>void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TMenuItem *T=new TMenuItem(NULL);
    T-&gt;Caption=&quot;blabla&quot;;
    T-&gt;OnClick=Action1Execute;
    Item1-&gt;Add(T);
    }</pre>
    </body>
    </html&gt
    Günther

    Comment


    • #3
      ja ich bins nochmal

      der ansatz functioniert ja super!
      nochmal danke dafür!

      aba mein eigentliches problem war, dass ich allen items die in das popupmenu rein sollen, die selbe onclick procedure übergeben will!
      und in dieser procedure soll herrausgefunden werden, welches der menuitems gedrückt wurde. ich hab schon probiert, dass irgendwie über den sender herrauszubekommen, ist aba nichts bei rausgekommen!

      ich hoffe mir kann irgendjemand helfen!

      danke für jede hilfe
      cu r0bbyr0

      Comment


      • #4
        <html>

        <head>
        <meta http-equiv="Content-Type"
        content="text/html; charset=iso-8859-1">
        <meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
        <title>Normale Seite ohne Titel</title>
        </head>

        <body bgcolor="#FFFFFF">

        <p>Dazu ist die Eigenschaft Tag gedacht. Du kannst (bzw. mußt)
        dieser Eigenschaft bei der Erzeugung des MenuItems einen
        eindeutigen Integerwert zuordnen. Anhand dieses Wertes kannst Du
        den Menüeintrag später wiedererkennen. Im Prinzip kannst Du
        auch die Eigenschaft Caption verwenden, vorausgesetzt daß sie
        eindeutig ist. Aber die Auswertung eines Integerwertes ist
        bekanntlich einfacher als die eines Textes. Ich bin jetzt mal
        beim Beispiel mit der Action-List geblieben. Im Übergabeparameter
        Sender steckt das Objekt, das das Ereignis ausgelöst hat. Es muß
        immer erst in ein brauchbares Objekt konvertiert werden. Dazu
        dient das Schlüsselwort dynamic_cast. Wenn das aufrufende Objekt
        kein TMenuItem ist - was bei einer ActionList durchaus denkbar
        ist - würde beim Zugriffsversuch auf eine der Eigenschaften eine
        Exception ausgelöst. Man kann das durch eine Abfrage auf NULL
        abfangen, in der Hilfe zu dynamic_cast wird eine Möglichkeit mit
        try / catch gezeigt.</p>

        <pre>
        void __fastcall TForm1::Action1Execute(TObject *Sender)
        {
        TMenuItem *T=dynamic_cast &lt;TMenuItem *&gt;(Sender);
        if(T==NULL)
        {
        ShowMessage(&quot;Die Methode Action1Execute darf nur von einem TMenuItem aufgerufen werden&quot;
        return;
        }
        int Tag=T-&gt;Tag;

        ...

        }</pre>
        </body>
        </html&gt
        Günther

        Comment


        • #5
          hi

          nochmal danke an dich
          hat super geklappt, und es war genau das was ich gesucht hab!
          hab mich echt gefreut, wie ein kleines kind!

          danke,danke!
          cu r0bbyr0

          Comment

          Working...
          X