Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi UdpSocket OnRead Event hinzufügen (https://www.delphipraxis.net/134412-udpsocket-onread-event-hinzufuegen.html)

jokerfacehro 21. Mai 2009 17:59


UdpSocket OnRead Event hinzufügen
 
Hallo.

Da der UdpSocket kein OnRead event hat, das ausgelöst wird, wenn daten eintreffen,
möchte ich dem UdpSocket dafür ein event hinzufügen.

ich hab mir einiges zu WSAAsyncSelect angeschaut.
Zudem weiß ich dass der status FD_READ mir anzeigt wenn Daten ankommen.

Allerdings habe ich bisher nix gefunden, was mir einigermaßen beschreibt, wie ich das verknüpft kriege, dass
bei einer MSG mit dem inhalt FD_READ eine methode ausgelöst die, die daten empfängt.

Gruß zum Herrentag und schon ma danke im Voraus!

Jokerface

Apollonius 21. Mai 2009 18:08

Re: UdpSocket OnRead Event hinzufügen
 
Du willst einer vorhandenen Komponente ein neues Ereignis hinzufügen? Dann musst du irgendwie in die Fensterprozedur kommen, denn diese empfängt ja die Benachrichtigung. Wie sieht diese Komponente denn aus?

jokerfacehro 21. Mai 2009 18:10

Re: UdpSocket OnRead Event hinzufügen
 
ich nehm nen ganz normalen TUDPSocket und hab grad was gefunden.
Natürlich muss ich den UdpSocket in ne neue klasse einbetten.

hab den codeschnipsel grad im delphi-forum gefunden:

Delphi-Quellcode:
procedure TUdpSockUtil.WinSockEvent(var Msg: TMessage);
begin
  if (Msg.Msg = USU_WM_ASYNCSELECT) then
    if (Msg.LParamHi = 0) then begin
      if (Msg.LParamLo = FD_READ) then begin // Daten eingetroffen
        if Assigned(FOnReceive) then
          FOnReceive(Self);
      end
      else if (Msg.LParamLo = FD_WRITE) then begin
        if Assigned(FOnWriteReady) then
          FOnWriteReady(Self); // Bereit zum Senden
      end;
    end
    else
      if Assigned(FOnError) then
        FOnError(Self,Msg.LParamHi)
      else
        raise EUSUError.CreateResFmt(@sWindowsSocketError,
          [SysErrorMessage(Msg.LParamHi), Msg.LParamHi, 'MessageHandler']);
end;
das wars schon ^^


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