kostenloser Webspace werbefrei: lima-city


[Delphi] Variable Events

lima-cityForumProgrammiersprachenDelphi & Pascal

  1. Autor dieses Themas

    k**********k

    Hallo,

    Hm.... Ich habe irgend wie ein Problem. Ich habe versucht ein Programm zu schreiben welches mir einen Ordner ausließt. Wenn es auf einen Unterordner stößt soll es einen neue Button erstellen. Nun: Bis hierher klappts (^^ Wow) aber jetzt hab ich ein Problem: Ich brauche natürlich für jeden Button nun ein Onklick-event.

    Ich habe jetzt scho heraus bekommen das ich eine Fuktion schreibe die den Rückgabedatentyp TNotifyEvent hat. Wenn ich jetzt aber einem Button mit

    Button[x].Onclick:=irgend_eine_funktion();


    zuweise. wird die funktion Am Anfang ausgeführt. Und eben nicht wenn ich auf den Button klicke.


    Ich hoffe ihr wisst wie ichs meine

    mfg ketchup



    Beitrag geaendert: 10.5.2007 18:59:49 von ketchupfleck
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Was meinst du damit, dass die Funktion dann "am Anfang" ausgeführt wird?

    Edit: Probier's halt einfach so??
    unit chrUnit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      ShowMessage('Neues OnClick!');
      Button1.OnClick := Button1Click;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage('altes OnClick!');
      Button1.OnClick := Button2Click;
    end;
    
    end.


    Beitrag geaendert: 10.5.2007 20:23:16 von burgi
  4. Autor dieses Themas

    k**********k

    Hallo,

    Danke schon mal für eure Antworten

    Ähh ich glaub ich hab mich etwas verdreht ausgedrückt.


    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;



    Bei dir Hab ich jetzt ein Button mit 2 Events. Aber ich wollte eine Variable Anzahl an Buttons die mit einem Event ausgestattet sind.

    (Ok ich gebs zu das war ein bisschen verwirrend. ^^)

    Button[x].Onclick:=irgend_eine_funktion();


    Die erklärung wie das gemeint war:

    Das [x] steht eben dafür das es eine variable anzahl an Buttons ist. (Eben ein Array) "Irgend_eine_funktion" ist eben irgend eine funktion ( XD ) der ich noch Parameter über geben musst.

    Das zuweisen ist auch kein Problem, aber die funktion wird nicht ausgeführt wenn der entsprechende Button geklickt wird sondern eben beim erstellen des Buttons (d.h. ganz am Anfang). Hm was Mach ich falsch?

    Ich hoffe ich hab es ein bisschen klarer gemacht.

    mfg Ketchup

    Beitrag geaendert: 11.5.2007 15:16:21 von ketchupfleck
  5. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Ja, ist schon klar! Ich wollte dir mit dem Beispiel eingentlich nur zeigen, wie du das zuweist. Also in deinem speziellen Fall sollte das irgendwie so in der Art gehen:
    //du erzeugst deine Buttons
    var
      buttons: araray[0..5] of TButton;
    
    for i:= 0 to 5 do
    begin
    
      buttons[i] := TButton.Create(Self);
      buttons[i].Name := 'Whatever';
      buttons[i].Left := links; //analog für rechts
    //nehmen wir an, du hast wie in meinem ersten Beispiel gepostet, 
    //die Button2Click-Funktion deklariert, 
    //dann kannst du sie jetzt zuweisen für alle deine Buttons
      buttons[i].OnClick := Button2Click;
    //und schon haben die alle den selben Eventhandler!
    //... you can push my button ...
    
    end;


    Ist hoffentlich klarer mit dem Beispiel. Hab' den Code nicht probiert, sondern einfach nur so dahingetippselt! Also kreuzige mich bitte nicht, wenn er nicht ohne kleine Veränderungen läuft! ;)
  6. Autor dieses Themas

    k**********k

    Ok ist klar funktioniert auch. XD

    Dankeschön!!

    Nun brauch ich nur noch die Caption die der Button der gedrückt wurde, hat.
    wie bekomm ich die?

    mfg Ketchup

    Beitrag geaendert: 11.5.2007 17:00:43 von ketchupfleck
  7. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Indem du in der Event-Funktion (bleiben wir bei Button2Click) einfach die String-Variable Sender.Caption auswertest?

    Edit:
    Richtig: St := TButton(Sender).Caption, denn Sender wird als TObject od. TComponent übergeben, und da klappt's mit .Caption sonst nicht ...

    Beitrag geaendert: 11.5.2007 18:33:56 von burgi
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!