Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ereignis einer neuen Klasse wird nicht ausgelöst? (https://www.delphipraxis.net/142234-ereignis-einer-neuen-klasse-wird-nicht-ausgeloest.html)

ml-kuen 24. Okt 2009 04:09


Ereignis einer neuen Klasse wird nicht ausgelöst?
 
Hallo Leute,
suche verzweifelt nach dem Fehler. Hab sowas schon mal gemacht, aber komme diesmal irgendwie nicht weiter.

Ausschnitt meiner Klasse:
Delphi-Quellcode:
Type
  //...
  TScoreCharactersEvent = Procedure(Passwordlength: Integer; var Score: Integer; var OwnerScore: Boolean) of Object;

  TMLPasswordMeter = class(TComponent)
    Private
      fPassword: String;
      fScore: Integer;
      fCharacters: Integer;
      fOnScoreCharacters: TScoreCharactersEvent;
      Score4Characters: Integer;
      OwnerScoreCharacters: Boolean;
      //...
    Protected
      Procedure SetPassword(Password: String);
      //...
    Public
      Property Score: Integer read fScore;
      //...
    Published
      Property Password: String read fPassword write SetPassword;
      Property Characters: Integer read fCharacters;
      Property OnScoreCharacters: TScoreCharactersEvent read fOnScoreCharacters write fOnScoreCharacters;
      //...
    end

procedure Register;

implementation
//...
constructor TMLPasswordMeter.Create(AOwner: TComponent);
begin
  inherited;
  //...
  SetPassword('');
end;

procedure TMLPasswordMeter.SetPassword(Password: String);
Begin
  fPassword := Password;
  fCharacters := Length(fPassword);
  //...
  If Assigned(fOnScoreCharacters) then fOnScoreCharacters(fCharacters, Score4Characters, OwnerScoreCharacters);
  If Not OwnerScoreCharacters then Score4Characters := fCharacters * 4;
end;
Nach dem ich die Komponente in die Palette eingefügt und diese in mein Project benutze, erscheint beim Doppelklick auf das Ereignis im Objektinspector auch der Quelltext:
Delphi-Quellcode:
procedure TUserFrm.MLPasswordMeter1ScoreCharacters(Passwordlength: Integer; var Score: Integer; var OwnerScore: Boolean);
begin
  OwnerScore := true;
  Score := Passwordlength * 4;
end;
...aber das Ereignis wird nie aufgerufen, auch nicht wenn ich im Programm in die Eigenschaft Password schreibe.

Weis jemand einer Rat? Geh jetzt aber erst mal in die "Kiste". :|

alzaimar 24. Okt 2009 08:18

Re: Ereignis einer neuen Klasse wird nicht ausgelöst?
 
1. Per Vereinbarung sollte der 1.Parameter eines Ereignisses 'Sender : TObject' sein. Das ist aber nur eine Empfehlung und beantwortet die Frage nicht.
2. Wird das Ereignis gelinkt? Dann müssten die Zeilen im Editor mit einem blauen Punkt versehen werden.
3. Verwende den Debugger.
3.1 Setze einen Breakpoint auf die Zuweisung von MyComponent.Password
3.2 Schaue (mit F7) nach, ob der Methodenzeiger fOnScoreCharacters auch wirklich gesetzt ist.

ml-kuen 24. Okt 2009 15:56

Re: Ereignis einer neuen Klasse wird nicht ausgelöst?
 
Danke für den Denkanstoß, wodurch ich die Lösung gefunden habe. Hatte meine Komponente fälschlicherweise in einem Modalen Fenster per Create erstellt, obwohl ich sie in der Zwischenzeit registriert und in der Komponentenpalette installiert hatte. Das noch vorhandene Create hat dann eine zusätzliche Instance erstellt.

Vielen Dank.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz