Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Event-Handler ohne visuelle Komponente (https://www.delphipraxis.net/120679-event-handler-ohne-visuelle-komponente.html)

realchanti 15. Sep 2008 09:57


Event-Handler ohne visuelle Komponente
 
Hallo DP,

ich versuche dynamisch mehrere Komponenten zu erzeugen und zu zerstoeren. Die Komponenten haben Events die ich gerne benutzen möchte um Folgeprozesse und Routinen anzustossen.

Um das Programm zu modularisieren habe ich eine Unit ( ohne Formular) benutzt. Da die Komponenten dynamisch erstellt werden und nicht einem formular zugeordnet sind habe ich keine Visuelle Komponente. Zur Verwaltung nutze ich eine TObjectList. Das erstellen und zerstoren klappt ohne Probleme. Jedoch bekomme ich nicht eine Eventhandler Procedure an die dynamisch erstellten Komponente uebergeben. Damit bei einem z.b. disconnect oder connect event eine Handler routine angestossen werden kann.

Benötige ich unbedingt ein Formular auch wenn kein Fenster benoetigt wird?

Gruss

RC

sirius 15. Sep 2008 10:06

Re: Event-Handler ohne visuelle Komponente
 
BRauchst du jetzte eine Windows-Messageverarbeitung oder nut Event-MEthoden?

realchanti 15. Sep 2008 10:19

Re: Event-Handler ohne visuelle Komponente
 
Ich weiss einfach nicht wie ich die procedure fuer die Events an die dynamisch erstellten komponenten uebergebe.
Beispiel:
Ich erstelle ine FTP client
Delphi-Quellcode:
function Build_Single_FTP_Client:Integer;
  edcftp := TIdFTP.Create(nil); // weil durch die TObjectliste verwaltet werden soll.
  if assigned(edcftp) then begin
      edcftp.Name          := 'SimpleFtpClient_'+inttostr(ExistingClients+1);   // es wird ab 1 hoch gezaehlt fuer die FTP client Namen
      SCFTP_Idx            := SCftp.cftpClientList.Add(edcftp); // rueckgabewert
      edcftp.TransferType  := ftBinary;   /// binaere uebertragung
      edcftp.OnConnect     := WithConnectClient;                     // diese ueberage funktioniert nicht wenn es nicht in einem Formular geschieht
    end;
  Result := SCFTP_Idx;
end;
Und ich erstelle eine Event Routine:
Delphi-Quellcode:
procedure WithConnectClient(Sender: TObject);
begin
    // ..... irgend ein Code
end;
Ich denke das es nur an der Korrekten Zuweisung der Eventmethode liegt.

Also was verstehe ich falsch?

Gruss und Danke

sirius 15. Sep 2008 10:28

Re: Event-Handler ohne visuelle Komponente
 
Es wird eine Mthode erwartet, keine Procedure. Die Methode muss nicht die eines Formulars sein, aber sie muss zu einem Objekt gehören.

Edit: Wahrscheinlich hast du in deiner Unit kein Objekt erstellt. Das könnte sich noch an anderen Stellen als ungünstig erweisen. Nicht nur hier. Versuch mal in deiner Unit alles als ein Objekt zu kapseln.

realchanti 15. Sep 2008 10:39

Re: Event-Handler ohne visuelle Komponente
 
Hmm,

nun gelesen habe ich ja Deine antwort, nur weiss ich jetzt leider noch nicht wie ich es loesen kann. Da der dynamisch erstelte Ftp Client ja eingentlich eine Komponente ist und begreife ich nun nicht wie ich jetzt an eine Methode komme?

Wie gesagt das Verfahren ist bei dem Weg zur Designtime ja einfach und klar nur beim dynamischen hängt es.
Hast Du noch einen Tipp, sirius?

Du meinst eine eigene Kompoenente zu erstellen?

Gruss und schaem
RC

sirius 15. Sep 2008 10:43

Re: Event-Handler ohne visuelle Komponente
 
Zitat:

Zitat von realchanti
Du meinst eine eigene Kompoenente zu erstellen?

Ja, Zumindest ein eigenes Objekt. Ist soweiso besser in einer (größtenteils) objektorientierten Sprache.


Man könnte es jetzt auch noch anders zusammenwurschteln. Aber dann würde ich gleich ein Objekt nehmen.


Wie sieht es denn bisher in deiner Unit aus? Also alles was nicht zu einer Procedure oder Function gehört?

realchanti 15. Sep 2008 11:09

Re: Event-Handler ohne visuelle Komponente
 
Hmm, auch wenn ich diesen AUfwand gescheut habe, nun habe ich es in eine TComponent hineingebaut und klappt ohne Problem.

Danke fuer die Ratschlaege.

RC


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:46 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