Announcement

Collapse
No announcement yet.

Ereignisroutienen für Objekte die zur Laufzeit erstellt wurden

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

  • Ereignisroutienen für Objekte die zur Laufzeit erstellt wurden

    Hallo Profies
    Ich habe endlich geschnallt, wie ich Objekte (im besonderen Buttons) zur Laufzeit erstelle, wie kann ich nun aber diesen Objekten Ereignisroutienen zuweisen (konkret: wie bekomme ich die OnKlickmethode zu meinem Button hin?)
    was hat es mit Onklick und soweiter auf sich?

    vielen Dank im Voraus
    Dominik

  • #2
    Hallo Dominik,

    Du mußt einfach eine Procedure erstellen die dem Typ der Ereignisbehandlungsroutine OnClick entspricht
    (für OnClick = TNotifyEvent also procedure (Sender: TObject) of object), dann kann man diese einfach zuweisen
    (Button1.OnClick := ButtonClickProc).

    Beispiel:

    <pre>

    procedure TForm1.ButtonClickProc(Sender: TObject);
    begin
    Caption := 'Hallo';
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    Button1 := TButton.Create ( Self );
    Button1.Parent := Self;
    Button1. Left := 20;
    Button1.Top := 50;
    Button1.Caption := 'TestButton';
    Button1.OnClick := ButtonClickProc;
    end;

    procedure TForm1.FormDestroy(Sender: TObject);
    begin
    Button1.Free;
    end;
    </pre>

    Gruß Grego

    Comment


    • #3
      Vielen Dank Gregor, es klappt. Aber dadurch ergeben sich neue Probleme.
      Ich erstelle ein Array aus Buttons und, denen alle die gleiche ereignisprocedur zugeordnet wird. Kein problem! Aber ich muss wissen welche der Knöpfe des Arrays gedrückt wurde. Wie mach ich das? Mit einem Parameter? oder einem Array von Proceduren (wenn es sowas gibt), oder kann ich irgendwie die Quelle des Ereignisses, also den Knopf ausfindig machen

      Comment


      • #4
        Hallo Dominik,

        wenn man unterstellt, dass das OnClick-Ereignis nur von der aktiven Komponente (z.B. Button) ausgelöst werden kann (programmgesteuert geht es auch anders), dann hilft Dir der Wert der Eigenschaft <b>ActiveControl</b> des aktuellen Form. In ActiveControl ist immer die Komponente gespeichert, die gerade den Tastaturfokus hat.

        Tschüß

        Torste

        Comment


        • #5
          Natürlich gibt's auch eine "Quelle des Ereignis", die Variable <b>Sender</b> die der Ereignis-Prozedur übergeben wird

          Comment


          • #6
            Hallo,

            mir fallen da noch zwei Möglichkeiten ein.

            1. Der Ereignisbehandlungsroutine wird der Parameter Sender übergeben,
            der auf das Objekt zeigt das das Ereignis auslöst (also den Button).

            Man hat darüber den vollen Zugriff, z.B.:

            MessageBox ( Handle, PChar ( TButton ( Sender ).Caption + ' wurde gedrückt!' ), 'Hinweis', 0 );

            zeigt das Caption des Buttons an.

            2. In Deinem Array hast Du ja Zeiger auf die Buttons, da Sender auch ein Zeiger
            ist kann man diese vergleichen und kann damit prüfen ob ein bestimmter Button
            das Ereignis auslöste.

            if Sender = ButtonArray [2] then .....

            Gruß Grego

            Comment

            Working...
            X