![]() |
Ereignisbehandlungroutine zuweisen?!
Hi Leute,
ich hab eine neue Komponente erstellt, die als Eigenschaft(Subkomponente) ein TIdTCPServer-Objekt hat. Wie kann ich jetzt dieser Subkomponente eine von mir definierte Ereignisbehandlungsroutine zuweisen? Das TIdTCPServer-Objekt hat ja das Ereignis OnExecute. Ich will jetzt, dass wenn das TIdTCPServer-Objekt meiner Komponente zugewiesen wird bei OnExecute eine Funktion meiner Komponente ausführt. Ich weiß, dass es gehen würde, wenn ich beides in ein Datenmodul packen würde und das händisch machen würde und dann das Ding ableiten würde. Aber ich will das alles gerne in einer Komponente haben. Außerdem will ich nix von TIdTCPServer ableiten, weil ja in Zukunft die 10er Version rauskommt und dann müsste ich evtl alles wieder umbauen. Habt ihr ne Idee? |
Re: Ereignisbehandlungroutine zuweisen?!
Hallo Stevie,
so sollte es funktionieren
Delphi-Quellcode:
Type
TMyKomop = class(TComponent) private FSub : TComponent; function GetOnExecute: TNotifyEvent; procedure SetOnExecute(const Value: TNotifyEvent); public property OnSubExecute : TNotifyEvent read GetOnExecute write SetOnExecute; end; implementation { TMyKomop } function TMyKomop.GetOnExecute: TNotifyEvent; begin Result:=FSub.OnExecute; end; procedure TMyKomop.SetOnExecute(const Value: TNotifyEvent); begin FSub.OnExecute:=Value;; end; end. |
Re: Ereignisbehandlungroutine zuweisen?!
Hmja, das war nicht ganz dasm was ich wollte.
Ich wollte ja, sobald die vorhandene Komponente zur Subkomponente wird, einem Ereignis eine Prozedur aus meiner Komponente zuweisen. Ich hab's aber inzwischen selber gelöst. Hier:
Delphi-Quellcode:
unit MyComponent;
interface uses Windows, Messages, SysUtils, Classes, IdTCPServer; type TMyComponent = class(TComponent) private FTCPServer: TIdTCPServer; FOnExecute: TIdServerThreadEvent; procedure DoServerExecute(AThread: TIdPeerThread); procedure SetTCPServer(const Value: TIdTCPServer); { Private-Deklarationen } protected { Protected-Deklarationen } public { Public-Deklarationen } published property TCPServer: TIdTCPServer read FTCPServer write SetTCPServer; { Published-Deklarationen } end; procedure Register; implementation procedure Register; begin RegisterComponents('Standard', [TMyComponent]); end; { TMyComponent } procedure TMyComponent.DoServerExecute(AThread: TIdPeerThread); begin if AThread.Connection.ReadLn(#10, 0) <> '' then AThread.Connection.WriteLn('Neue Prozedur'); end; procedure TMyComponent.SetTCPServer(const Value: TIdTCPServer); begin if Value <> FTCPServer then begin if Value <> nil then begin if (FTCPServer <> nil) and (FTCPServer.Owner = Self) then FTCPServer.Free; FTCPServer := Value; FTCPServer.FreeNotification(self); FOnExecute := FTCPServer.OnExecute; FTCPServer.OnExecute := DoServerExecute; end else begin if FTCPServer.Owner <> self then begin FTCPServer.OnExecute := FOnExecute; FTCPServer := nil; end; end; end; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:40 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