[gelöst] Methode einem Ereignis zuweisen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Scurra
Beiträge: 29
Registriert: Mi 31. Dez 2014, 12:08

[gelöst] Methode einem Ereignis zuweisen

Beitrag von Scurra »

Hallo,

ich bin gerade fleißig dabei, Delphi-Tutorials durchzuarbeiten, bin nun aber an einer Stelle auf ein Problem gestoßen. Ich möchte (wie hier: Tutorial im Abschnitt "Ereignisse" fast ganz unten beschrieben) einem Ereignis eine Methode zuweisen. Im betreffenden Fall soll ein Button (name: Button1) erzeugt werden und im OnCreate-Event des Formulars soll dem OnClick-Ereignis des Buttons eine Methode zugewiesen werden. Im Quelltext sieht das dann so aus, nachdem man die im Tutorial angegebenen Schritte abarbeitet:

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    procedure doSomething(Sender: TObject);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.OnClick := doSomething;  // HIER ERSCHEINT EIN FEHLER BEIM KOMPILIEREN
end;
 
procedure TForm1.doSomething(Sender: TObject);
begin
  ShowMessage('Foo');
end;
 
end.
Wenn man das Programm ausführt und auf Button1 klickt, sollte die Methode TForm1.doSomething ausgeführt werden, es sollte also eine Textnachricht mit dem Inhalt "Foo" erscheinen. Bei mir lässt sich der Quellcode jedoch nicht kompilieren, es erscheint ein Fehler in der Zeile, die ich oben angegeben habe. Die Fehlermeldung lautet:
Error: Wrong number of parameters specified for call to "doSomething"
Wenn ich das also richtig verstehe, sagt mir der Kompiler, dass ich in der betreffenden Zeile doSomething aufrufe, ohne einen Parameter vom Typ TObject (wie in der Definition von doSomething gefordert) aufrufe. Ich habe schon etwas herumprobiert und z. B. versucht, Button1 als Parameter zu übergeben, aber das hat leider auch nicht funktioniert.

Was habe ich falsch gemacht?
Zuletzt geändert von Scurra am Mo 12. Jan 2015, 19:40, insgesamt 1-mal geändert.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Methode einem Ereignis zuweisen

Beitrag von Michl »

Scurra hat geschrieben:ich bin gerade fleißig dabei, Delphi-Tutorials durchzuarbeiten
das freut mich. Bei weiteren Fragen sind wir gern bereit, Dir zu helfen.

Bei so einem Problem, wäre mein erster Gedanke, ob nicht jemand zuvor so ein Problem hatte. Gib doch einfach mal die Fehlermeldung in die Suchmaschine Deiner Wahl ein "Error: Wrong number of parameters specified for call to", da kommst Du sofort auf diese Seite: http://wiki.lazarus.freepascal.org/FPC_ ... ecified/de

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

wp_xyz
Beiträge: 5134
Registriert: Fr 8. Apr 2011, 09:01

Re: Methode einem Ereignis zuweisen

Beitrag von wp_xyz »

Die Unit ist im Modus objfpc erstellt. Da muss man bei der Zuweisung der Methode das @-Symbol verwenden (oder verwende {$mode delphi}):

Code: Alles auswählen

 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.OnClick := @doSomething;  
end;

Scurra
Beiträge: 29
Registriert: Mi 31. Dez 2014, 12:08

Re: Methode einem Ereignis zuweisen

Beitrag von Scurra »

Bei so einem Problem, wäre mein erster Gedanke, ob nicht jemand zuvor so ein Problem hatte. Gib doch einfach mal die Fehlermeldung in die Suchmaschine Deiner Wahl ein
Gewöhnlich mache ich das, schon allein, um die Fehlermeldung zu verstehen. Werde ich in Zukunft wohl auch wieder so machen, auch wenn ich die Fehlermeldung verstehe ;)
das freut mich. Bei weiteren Fragen sind wir gern bereit, Dir zu helfen.
Danke! Ich freue mich sehr, dass es viele hilfsbereite Leute gibt und hoffe, dass ich auch irgendwann einmal helfen kann, wenn ich mich besser auskenne.
Die Unit ist im Modus objfpc erstellt. Da muss man bei der Zuweisung der Methode das @-Symbol verwenden (oder verwende {$mode delphi}):
Wenn ich gewusst bzw. verstanden hätte, dass ich genau das Problem habe, über das ich hier: http://www.lazarusforum.de/viewtopic.php?f=55&t=8416 zuvor noch gelesen habe, hätte ich es mir sparen können, extra hier im Forum nachzufragen.

@wp_xyz: Auch danke für deine Hilfe!

Antworten