Entwickler-Ecke

Internet / Netzwerk - Indy IdTCPClient OnWork geht nicht


Timbo - Mo 03.07.06 19:27
Titel: Indy IdTCPClient OnWork geht nicht
Hallo,

ich kannmit dem Client wunderbar Dateien übertragen, wollte nun noch einen Progressbar bauen.
OnWorkBegin wird ausgelöst, aber OnWork wird nicht ausgelöst, woran kann das liegen?

Vielen Dank.
Tim.


alleinherrscher - Mo 03.07.06 20:00

Welches OnWork benutzt du denn?

Wenn du das IdTCPClient.OnWork benutzt, nimm das IdTCPClient.Socket.OnWork, das müsste funktionieren


Timbo - Mi 05.07.06 02:12

Danke für die Antwort...
Diese Funktion gibt es, aber wo finde ich die denn im OI?
Nützt ja nichts, wenn ich die Funktion aufrufe... muss ja vom Programm aufgerufen werden. Oder hab ich da was falsch verstanden?


alleinherrscher - Mi 05.07.06 10:43

user profile iconTimbo hat folgendes geschrieben:
Danke für die Antwort...
Diese Funktion gibt es, aber wo finde ich die denn im OI?
Nützt ja nichts, wenn ich die Funktion aufrufe... muss ja vom Programm aufgerufen werden. Oder hab ich da was falsch verstanden?


Das ist keine Funktion, sondern ein Event ;) Du musst es vorher definieren, also z.B. bei Form.Create

IdTCPClient1.socket.onwork:=MyOnWorkProcedure(ASender:TObject;AWorkMode:TWorkMode;AWorkCount:Integer);

MyOnWorkProcedure muss natürlich ganz normal per private oder public deklariert werden.

Hoffe, dass es klappt! *DAUMEN HOCH*


Timbo - Mi 05.07.06 11:01

hier mal zum verständnis ein bißchen Quellcode.
Benutze die IdTcpClient Komponente.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
  with IdTCPClient1 do begin
    Connect;
    ftmpStream := TFileStream.Create('C:\StreamTest.Datei',fmOpenRead + fmShareDenyNone);
    OpenWriteBuffer;
    WriteStream(ftmpStream);
    CloseWriteBuffer;
    FreeAndNil(fTmpStream);
    Disconnect;
  end;


procedure TFArtikel.IdTCPClient1WorkBegin(Sender: TObject;
  AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
  Label1.Caption:= IntToStr(AWorkCountMax);
end;

procedure TFArtikel.IdTCPClient1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  Label2.Caption:= IntToStr(AWorkCount);
end;

end.


WorkBegin wird ausgeführt, aber Work nicht...

Gibt es noch eine andere Möglichkeit den Übertragungsfortschritt heraus zu bekommen?


Timbo - Mi 05.07.06 11:33

@alleinherrscher:

das event heißt wohl doWork, onWork gibt es nicht...

Delphi-Quelltext
1:
IdTCPClient1.socket.dowork:=MyOnWorkProcedure;                    


dann sagt der Compiler, bei DoWork:
Not enough actual Parameter


alleinherrscher - So 09.07.06 21:03

user profile iconTimbo hat folgendes geschrieben:
@alleinherrscher:

das event heißt wohl doWork, onWork gibt es nicht...

Delphi-Quelltext
1:
IdTCPClient1.socket.dowork:=MyOnWorkProcedure;                    


dann sagt der Compiler, bei DoWork:
Not enough actual Parameter


Was hast du denn für ne Version? Also in Indy10 geht das ;)

DoWork ist (auch in älteren Indy Versionen) kein Event!!!! Das ist also absolut das falsche... von DoWork solltest du (glaube ich) besser die Finger lassen ;)

Grüße