Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wer ruft die event-Procedure auf? (https://www.delphipraxis.net/76817-wer-ruft-die-event-procedure-auf.html)

mr47 10. Sep 2006 14:48


Wer ruft die event-Procedure auf?
 
Hi!

Ich machs gleich ganz praktisch: Ich hab ein Array mit mehreren Irc-Clients (TIdIrc). Beim erzeugen jedes TIdIRCs setze ich OnRaw auf meine selbst geschriebene IRCOnRaw:

Delphi-Quellcode:
procedure Twindow_main.IRCRaw(Sender: TObject; AUser: TIdIRCUser;
  ACommand, AContent: String; var Suppress: Boolean);
begin
  memo1.Lines.Add(AContent);
end;


{.......}

ircConnections[i].onRaw := IrcRaw;
Das funktioniert auch wunderbar. Nur jetzt hab ich zwei fragen:

1. Wie kann ich feststellen (in IRCRaw) wer die Procedure gerade aufgerufen hat. (Also welches Element aus dem Array, welches TIdIrc).
2. Was wenn zwei TidIRCs gleichzeitig dieses OnRaw auslösen. Gibt's dann ne AV?

danke und gruß

mr47

mkinzler 10. Sep 2006 15:00

Re: Wer ruft die event-Procedure auf?
 
Zitat:

1. Wie kann ich feststellen (in IRCRaw) wer die Procedure gerade aufgerufen hat. (Also welches Element aus dem Array, welches TIdIrc).
Das aufrufende Objekt erhälst du im Parameter Sender.
Zitat:

2. Was wenn zwei TidIRCs gleichzeitig dieses OnRaw auslösen. Gibt's dann ne AV?
Nein,, die Methode wird 2 Mal aufgerufen.

danke und gruß

mr47 10. Sep 2006 15:07

Re: Wer ruft die event-Procedure auf?
 
Zitat:

Zitat von mkinzler
Das aufrufende Objekt erhälst du im Parameter Sender.

Ja theoretisch wusste ich das auch :wink: . Aber ich kann jetzt nicht ohne weiteres die Position im Array feststellen, oder?


Zitat:

Zitat von mkinzler
Nein,, die Methode wird 2 Mal aufgerufen.

Okay, gut.

gruß und danke

mr47

mkinzler 10. Sep 2006 15:09

Re: Wer ruft die event-Procedure auf?
 
Zitat:

Ja theoretisch wusste ich das auch Wink . Aber ich kann jetzt nicht ohne weiteres die Position im Array feststellen, oder?
Du könntest den array durchlaufen und die Objekte vergleichen oder du verwendest zum Beispiel die Eigenschaft .Tag der Kompos um die Position im array darin abzulegen.

mr47 10. Sep 2006 16:00

Re: Wer ruft die event-Procedure auf?
 
Zitat:

Zitat von mkinzler
Zitat:

Ja theoretisch wusste ich das auch Wink . Aber ich kann jetzt nicht ohne weiteres die Position im Array feststellen, oder?
Du könntest den array durchlaufen und die Objekte vergleichen oder du verwendest zum Beispiel die Eigenschaft .Tag der Kompos um die Position im array darin abzulegen.

Gut danke, aber wie komme ich nachher wieder an .tag ran? Denn Sender.tag gibt es nicht.....

3_of_8 10. Sep 2006 16:01

Re: Wer ruft die event-Procedure auf?
 
Delphi-Quellcode:
(Sender as TComponent).Tag

mr47 10. Sep 2006 16:42

Re: Wer ruft die event-Procedure auf?
 
Und ich dachte immer ich beherrsche Delphi. :roll:

Super vielen Dank! :-)

gruß mr47

3_of_8 10. Sep 2006 16:42

Re: Wer ruft die event-Procedure auf?
 
Niemand beherrscht Delphi. ;)

Muetze1 10. Sep 2006 16:59

Re: Wer ruft die event-Procedure auf?
 
Zitat:

Zitat von mkinzler
Zitat:

Ja theoretisch wusste ich das auch Wink . Aber ich kann jetzt nicht ohne weiteres die Position im Array feststellen, oder?
Du könntest den array durchlaufen und die Objekte vergleichen oder du verwendest zum Beispiel die Eigenschaft .Tag der Kompos um die Position im array darin abzulegen.

Das hat aber den Nachteil, dass er alle Tags aktualisieren muss, wenn man ein Element aus dem Array entfernt oder hinzufügt.

mkinzler 10. Sep 2006 17:02

Re: Wer ruft die event-Procedure auf?
 
Zitat:

Das hat aber den Nachteil, dass er alle Tags aktualisieren muss, wenn man ein Element aus dem Array entfernt oder hinzufügt.
Ich weiß ja nicht warum die Position im array so wichtig erscheint. In diesem Fall könnte er ja nicht die Tags ändern, sondern den Array nach dem .Tag des Senders durchsuchen.

mr47 10. Sep 2006 19:37

Re: Wer ruft die event-Procedure auf?
 
Zitat:

Zitat von mkinzler
Zitat:

Das hat aber den Nachteil, dass er alle Tags aktualisieren muss, wenn man ein Element aus dem Array entfernt oder hinzufügt.
Ich weiß ja nicht warum die Position im array so wichtig erscheint. In diesem Fall könnte er ja nicht die Tags ändern, sondern den Array nach dem .Tag des Senders durchsuchen.

Das ganze muss halt möglichst schnell gehen, da die Procedure sehr oft hintereinander aufgerufen werden kann. Und wenn ich da jedes mal ein Array mit x Elementen durchsuch lahmt das Programm schnell.

mr47

mkinzler 10. Sep 2006 19:48

Re: Wer ruft die event-Procedure auf?
 
Warum ist den Position des Objektes im Array so wichtig, du kannst doch über Sender direkt zugreifen?

mr47 10. Sep 2006 20:12

Re: Wer ruft die event-Procedure auf?
 
Zitat:

Zitat von mkinzler
Warum ist den Position des Objektes im Array so wichtig, du kannst doch über Sender direkt zugreifen?

Der String den IRCRaw in AContent liefert, wird in einem Thread weiterverarbeitet und ausgewertet. Es hat sich angeboten eine TStringList zu verwenden. Ich hänge "neu eingetroffene" Jobs einfach unten an die Liste an und der Thread löscht oben immer die abgearbeiteten Strings raus. Ich hätte die Position im Array dann in dem explizit formatierten String mit übergeben.
Bietet sich was anderes, mehr sauberes an? Dann her damit. Es wäre ja z.B. auch möglich einen Datentyp folgendermaßen zu definieren:

Delphi-Quellcode:
type
  TIrcJob = record
    job_string: string;
    response: TObject;
  end;
Dann könnte ich in response die IRC-Komponente übergeben (also den Sender) und hätte so das richtige Element im Array ohne die Position. Aber dann fällt dieses extrem komfortable arbeiten mit der StringList weg. Oder kann ich aus Array auch den Eintrag 0 löschen und neue dann wieder unten anhängen? Alternative?

danke

gruß mr47


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