Entwickler-Ecke

Internet / Netzwerk - Bildübertragung mit Indy10


Fabian W. - So 07.05.06 08:09
Titel: Bildübertragung mit Indy10
Hallo,

in der DP habe ich dieses Topic dazu gefunden: http://www.delphipraxis.net/topic61806.html
Wenn ich den Code in meine Anwendung kopiere wird mir var IDS: TidStreamVCL; immer als UNdefinierter Bezeichner unterringelt. Auch das hinzufügen von uses IdStreamVCL; brachte keinen Erfolg. Woran kann das liegen?
Was vlt noch wichtig ist da mein Delphi2005 zZ Zicken macht steht mir nur die Delphi 2006 Architect Trial zu Verfügung - und auch das nicht mehr lange :x


mfg


Fighter#1 - So 07.05.06 09:11

Ich bin nicht ganz sicher, aber spontan fällt mir nur ein einen IDStream zu verwenden, ich denke von der FUnktionalität ist das das Selbe.
Das VCL heit ja eigentlich Visual Component Library drum macht das Meinermeinung nach nicht viel Sinn ...


Fighter#1 - So 07.05.06 09:13

Ach ja, welches Indy hast du?
Die schreiben ab Indy 10 ...


Fabian W. - So 07.05.06 09:26

Jop, ich habe Indy 10, notgedrungen sozusagen - deshlab habe ich auch speziell eine Lösung für 10 gesucht...
Ich schau mal ob er IdStream kennt...


EDIT: Jop also IDStream kenn er, nur scheint mir die Handhabe etwas anders, es gibt zB keinen Constructor dafür ?!


Fabian W. - Di 09.05.06 18:54

Hat keiner ne Idee?? Kannes sein dass dat ganze einfach nur mit D2006 zu tun hat??

mfg


Fighter#1 - Di 09.05.06 19:16

Poste bitte mal den gesamten Code,
ich probier ihn dann mal in Delphi 2005


Fabian W. - Mi 10.05.06 16:47

Ich habe nur c&p gemacht, da mir der Fehler da schon auffiel gibt es keinen geänderten Code, sondern nur den originalen:

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:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
// Sender

{Global}
var Groesse: Integer;


procedure TSendeForm.DateiSendeButtonClick(Sender : TObject);
var
  FStream: TFileStream;
  IDS: TidStreamVCL;

begin
  { Hier wird die Datei "ermittelt" }
  TCPSender.Host := HostEdit.text;
  if not (DateiOpenDialog.Execute) then
    exit;

  { Die Streams initialisieren - Beim IDS wird FStream gleich eingelesen }
  FStream := TFileStream.Create(DateiOpenDialog.FileName, fmOpenRead);
  try
    IDS := TidStreamVCL.Create(FStream);
    try
      { Senden }
      with TCPSender do
      begin
        Connect;
        try
          Socket.Write(IDS, 0, true);
        finally
          Disconnect;
        end;
      end;
    finally
      FreeAndNil(IDS);
    end;
  finally
    FreeAndNil(FStream);
  end;
end;

procedure TSendeForm.TCPSenderWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
begin
  { Aktualisierung der Fortschrittsanzeige, ProcessMessages nicht vergessen! }
  ProgressBar.Position := Round((AWorkCount / Groesse) * 100);
  Application.ProcessMessages;
end;

procedure TSendeForm.TCPSenderWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer);
begin
  { Damit klar ist, wie groß die Datei ist | Reset der ProgressBar }
  Groesse := AWorkCountMax;
  ProgressBar.Position := 0;
end;



// Empfänger

procedure TEmpfangsForm.TCPReceiverExecute(AContext: TIdContext);
var
  FSTream: TFileStream;
  SizeOfIncomingStream: Integer;
  IDS: TidStreamVCL;
begin
  { Wo soll die Datei gespeichert werden? }
  if not (DateiSaveDialog.execute) then
  begin
    ShowMessage('Es wurde keine Datei ausgewählt!');
    exit;
  end;

  { Wieder die Streams }
  FStream := TFileStream.Create(DateiSaveDialog.FileName, fmCreate);
  try
    IDS := TidStreamVCL.Create(FStream);
    try
      { Empfangen }
      with AContext.connection do
      begin
        try
          SizeOfIncomingStream := Socket.ReadInteger;
          Socket.ReadStream(IDS, SizeOfIncomingStream);
        finally
          Disconnect;
        end;
      end;

      { Damit der Inhalt von IDS in FStream übertragen wird }
      IDS.VCLStream.Position := 0;
    finally
      FreeAndNil(IDS);
    end;
  finally
    FreeAndNil(FStream);
  end;
end;
(Aus DP)

mfg


Fabian W. - Fr 12.05.06 14:18

Und haste schon Zeit gefunden zu schaun?


Fabian W. - Do 18.05.06 18:53

Kannste dich nu bitte ma melden??

Ich weiß ned was mit meinem D da schief läuft und die Trail 2006 is abgelaufen... :cry: