eigenes Event deklarieren und nutzen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
diejohi
Beiträge: 9
Registriert: Mo 29. Dez 2014, 15:13

eigenes Event deklarieren und nutzen

Beitrag von diejohi »

Hallo zusammen,
ich habe heute begonnen mich mit der Programmierung mit Hilfe von Lazarus zu beschäftigen. Ich möchte in einer eignen Klasse ein Ereignis erzeugen das ich in der MainForm nutzen möchte.

Meine Klasse:

Code: Alles auswählen

type
    TOnFindFile = procedure(Filename: string) of object;
    TOnDirectoryFind = procedure(Directory: string) of object;
    TFindFiles = class(TObject)
private
    FSubfolders: Boolean;
    FMask: string;
    FOnFindFile: TOnFindFile;
    FOnFindDirectory: TOnDirectoryFind;
public
    constructor Create;
    procedure Find(RootFolder: string);
    property SubFolders: Boolean read FSubFolders write FSubFolders;
    property Mask: string read FMask write FMask;
    property OnFileFind: TOnFindFile read FOnFindFile write FOnFindFile;
    property OnDirectoryFind: TOnDirectoryFind read FOnFindDirectory write FOnFindDirectory;
end;
 
In der Mainform habe ich den Code:
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Menus,
  StdCtrls, ExtCtrls, FindFilesCls;
 
type
 
  { TTestForm }
 
  TTestForm = class(TForm)
    Datei: TMenuItem;
    Image1: TImage;
    Beenden: TMenuItem;
    Memo1: TMemo;
    OeffnenItem: TMenuItem;
    TestOpenDialog1: TOpenDialog;
    TestMenu: TMainMenu;
    procedure BeendenClick(Sender: TObject);
    procedure DateiClick(Sender: TObject);
    procedure OeffnenItemClick(Sender: TObject);
 
  private
    { private declarations }
  public
    { public declarations }
    procedure MyOnFindDirecetory(Directory: string);
    procedure MyOnFindFile(Filename: string);
 
  end;
 
var
  TestForm: TTestForm;
 
implementation
 
{$R *.lfm}
 
{ TTestForm }
 
procedure TTestForm.DateiClick(Sender: TObject);
begin
 
end;
 
procedure TTestForm.BeendenClick(Sender: TObject);
begin
  TestForm.Close;
end;
 
procedure TTestForm.OeffnenItemClick(Sender: TObject);
var
   FindFiles: TFindFiles;
begin
     if TestOpenDialog1.Execute then
     begin
       FindFiles := TFindFiles.Create;
        try
          FindFiles.SubFolders := True;
          FindFiles.Mask := '*.jpg';
          FindFiles.OnFileFind := MyOnFindFile;
          FindFiles.OnDirectoryFind := MyOnFindDirecetory;
          // FindFiles.Find(Edit1.Text);
        finally
          FindFiles.Free;
        end;
          Image1.Picture.LoadFromFile(TestOpenDialog1.FileName);
     end;
end;
 
procedure TTestForm.MyOnFindDirecetory(Directory: string);
begin
   Memo1.Lines.Add(Directory);
   Application.ProcessMessages;
end;
 
procedure TTestForm.MyOnFindFile(Filename: string);
begin
   Memo1.Lines.Add(Filename);
   Application.ProcessMessages;
end;
end.
 
Die Zuweisung Eventprocedure erzeugt eine Fehlermeldung. Was habe ich falsch gemacht?

Schon mal Danke für Eure Hilfe
Dieter

Benutzeravatar
theo
Beiträge: 10861
Registriert: Mo 11. Sep 2006, 19:01

Re: eigenes Event deklarieren und nutzen

Beitrag von theo »

FindFiles.OnDirectoryFind := @MyOnFindDirecetory;
im Modus objfpc.

Grün ist noch ein Tippfehler. Ist dem Compiler zwar egal, aber stiftet nur Verwirrung. :wink:

diejohi
Beiträge: 9
Registriert: Mo 29. Dez 2014, 15:13

Re: eigenes Event deklarieren und nutzen

Beitrag von diejohi »

Danke Dir Theo. Heißt das ich muss wirklich einen Zeiger zuweisen?

Benutzeravatar
theo
Beiträge: 10861
Registriert: Mo 11. Sep 2006, 19:01

Re: eigenes Event deklarieren und nutzen

Beitrag von theo »

diejohi hat geschrieben:Danke Dir Theo. Heißt das ich muss wirklich einen Zeiger zuweisen?
Im strikteren objfpc Modus: Ja.
Du kannst auch

Code: Alles auswählen

{$mode delphi}
in die Unit schreiben, dann geht es ohne.

diejohi
Beiträge: 9
Registriert: Mo 29. Dez 2014, 15:13

Re: eigenes Event deklarieren und nutzen

Beitrag von diejohi »

Danke Dir

Antworten