![]() |
Event zur DesignTime benutzen
Hallo,
ich möchte eine Komponente schreiben. Diese Komponente hat eine Collection. Jedes Item dieser Collection soll nun ein Event haben. Soweit klappt auch alles, wenn ich jedoch im OI dieses Event benutzen will erhalte ich folgende Meldung: "Für eine unbekannt Komponente kann keine Methode erstellt werden.". Was muss ich machen um Events nutzen zu können ? mfg, Björn |
Re: Event zur DesignTime benutzen
Auf welchen Typ willst du den Event denn binden?
|
Re: Event zur DesignTime benutzen
Ich habe für das Event einen Eigenen Typ definiert:
Delphi-Quellcode:
Das Event selbst ist eine einfache property:
TExecuteFunction = procedure(Sender: TObject; const AParams: array of Variant;
var ReturnValue: Variant) of object;
Delphi-Quellcode:
published
... property OnExecute: TExecuteFunction read FOnExecute write FOnExecute; end; |
Re: Event zur DesignTime benutzen
Und für welche Komponente?
|
Re: Event zur DesignTime benutzen
Die Deklaration des Events scheint mir völlig OK, aber die Fehlermeldung ist sehr merkwürdig. Wieso ist die Komponente "unbekannt"? :gruebel:
|
Re: Event zur DesignTime benutzen
Also ich habe eine normale Komponente die halt eine Collection hat...
Delphi-Quellcode:
Warum die Komponente unbekannt sein soll kann ich mir nicht erklären, ich ziehe die Komponente über die Palette auf die Form. Vielleicht könnte es daran liegen das die Klassen TScriptFunctions und TScriptFunction nirgentwo Registriert werden, wenn das überhaupt möglich ist diese zu registrieren.
type
TScriptFunctions = class; TScriptFunction = class(TCollectionItem) private FOwner: TScriptFunctions; FFunctionName: string; FOnExecute: TExecuteFunction; FOnAfterCall: TNotifyEvent; procedure SetOnAfterCall(const Value: TNotifyEvent); protected function GetDisplayName: string; override; public constructor Create(ACollection: TCollection); override; destructor Destroy; override; procedure Assign(Source: TPersistent); override; published property FunctionName: string read FFunctionName write FFunctionName; property OnExecute: TExecuteFunction read FOnExecute write FOnExecute; end; { TScriptFunctions } TScriptFunctions = class(TCollection) private function GetItem(Index: Integer): TScriptFunction; procedure SetItem(Index: Integer; Value: TScriptFunction); public constructor Create; destructor Destroy; override; function Add: TScriptFunction; function CountFunctionName(const AFunctionName: string): integer; function FindFunctionName(const AFunctionName: string): TScriptFunction; procedure ListFunctionName(const AList: TStrings); property Items[Index: Integer]: TScriptFunction read GetItem write SetItem; default; end; TScriptEngine = class(TComponent) private FFunctions: TScriptFunctions; public constructor Create(AOwner: TComponent); override; published property Functions: TScriptFunctions read FFunctions; end; |
Re: Event zur DesignTime benutzen
Schieb :duck:
|
Re: Event zur DesignTime benutzen
Also ich würde sagen, Du musst Deiner TScriptEngine einen published event OnExecute verpassen, und die OnExecute der TScriptFunction->Objekte entsprechend durchreichen.
Das Du im OI überhaupt so weit kommst eine Fehlermeldung zu erhalten.. :gruebel: Wird da etwa im OI das OnExecute der TScriptFunction angezeigt??? Das wär ja krass! :stupid: |
Re: Event zur DesignTime benutzen
Ich hab es jetzt geschafft, der Fehler lag darin das die Collection von TCollection abgeleitet war. Damit man Events benutzen kann muss man die Collection von TOwnedCollection ableiten.
mfg, Björn |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz