Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    1,003

    [Delphi] Gestire eventi in componenti creati a runtime

    un piccolo esempio:

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    var button2: tbutton;
    begin
    button2:= Tbutton.create(self);
    button2.parent:= self;
    button2.left:=x;
    button2.Top:=Y;
    button2.OnClick:= showmessage('ciao'); //ERRORE!!
    end;

    in questo caso come si fa ad eseguire un codice o una procedura all'evento onclick?


  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,295
    Un evento non è altro che una proprietà particolare la quale può assumere l'indirizzo di un metodo da eseguire; a seconda del tipo di evento, il prototipo del metodo può essere differente.

    Per "prototipo", intendo il numero e il tipo di parametri.

    Nel tuo caso, ad esempio, l'evento OnClick normalmente accetta un metodo che abbia un unico parametro, Sender, di tipo TObject.

    L'unica cosa che devi fare è aggiungere un metodo compatibile alla tua form e implementarlo. Un esempio:
    codice:
      TForm1 = class(TForm)
      private
        { Private declarations }
        procedure MioClick(Sender: TObject);
      public
        { Public declarations }
      end;
    L'implementazione può contenere la visualizzazione di un messaggio. Ad esempio, possiamo visualizzare il nome del pulsante sul quale è stato fatto il clic:
    codice:
    procedure TForm1.MioClick(Sender: TObject);
    begin
      ShowMessage(TButton(Sender).Caption);
    end;
    Il parametro Sender rappresenta sempre l'oggetto che ha generato l'evento; in questo caso, va esplicitato che vogliamo trattare tale oggetto generico come un pulsante (ovviamente, deve essere un pulsante a generare l'evento, altrimenti otteniamo risultati impredicibili) e visualizzarne la proprietà Caption.

    Per collegare l'evento ai pulsanti generati a runtime, ti basterà seguire la scrittura che hai riportato nel tuo messaggio:
    codice:
    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 
    var
      button2: tbutton; 
    begin
      button2:= Tbutton.create(self); 
      button2.parent:= self; 
      button2.left:=x; 
      button2.Top:=Y; 
      button2.OnClick:= MioClic;
    end;
    e il gioco è fatto.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    1,003
    perfetto
    grazie




Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.