Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - TMemoryStream Ausgabe!


allen928cn - Di 23.01.07 11:51
Titel: TMemoryStream Ausgabe!
hi,allenzusammen.
ich beschäftige mich jetzt miet Tmemorystream,hab das folgende Problem


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
for x := 0 to ((y div 2)-1do begin
     stream1 :=TMemoryStream.Create;
     SDTable1.open;
     SDTable1.Edit;
     TBlobField(SDTable1.FieldByName('InhaltDE_Text')).SaveToStream(stream1);
     stream1.Position := 0;
     stream2.Position := stream2.Size;
     stream2.CopyFrom(stream1,0);// die Größe von stream2 ändert sich 
     stream1.free;
end;

 Stream2.Position := 0;
 JvRichEdit1.StreamFormat := sfRichText;
 JvRichEdit1.Lines.loadfromstream(stream2);// die texteditor lädt nicht die komplette stream2 auf
end;


stream2 gibt nur die erste stream1 aus,d.h. stream2 gibt die stream1 aus,nur wenn x:= 0 aber die Größe von stream2 ändert sich jetztes mal.

Wer es weiss ,bitte mir einen Hinweis geben! vielen Dank!!!!

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt


nivosta - Di 23.01.07 12:01

Hi,

wo für ist den die for schleife gut?
Und wieso immer ein table edit?

Du liest ja immer das gleiche aus dem Tabellenfeld wieso eigentlich?

Gruß
Hubert


allen928cn - Di 23.01.07 13:05

oh, hab eine Zeile vergessen!


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
stream2 :=TMemoryStream.Create;

  for x := 0 to ((y div 2)-1do begin
     
     stream1 :=TMemoryStream.Create;
     SDTable1.open;    SDTable1.locate('TXTNr;SprID',VarArrayOf([string(b[2*x+1]),string(a[0])]),[loPartialKey]);
     TBlobField(SDTable1.FieldByName('InhaltDE_Text')).SaveToStream(stream1);
     stream1.Position := 0;
     stream2.Position := stream2.Size;   
     stream2.CopyFrom(stream1,0);
     stream1.free;
end;
  Stream2.Position := 0;
  JvRichEdit1.StreamFormat := sfRichText;
  JvRichEdit1.Lines.loadfromstream(stream2);
  stream2.Free;
end;


mit "SDTable1.locate" fokussiere ich eine Zeile, die jedes mal mit "string(b[2*x+1]" und "string(a[0]" bestimmt wird,dann wird der Text in dem Feld 'InhaltDE_Text' in stream1 gespeichert.

eigentlich wollte ich jeden einzelnen Text in stream2 hinzufügen, und am End alle Texte von stream2 ausgeben.aber das klappt irgendwie nicht!

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt


nivosta - Di 23.01.07 14:06

Ich habe im moment kein delphi hier aber ich glaube da copy überschreibt den alten inhalt, somit würde ich mal ein write versuchen.
Schreibe Stream1 in eine String variable und anschliessent die Variable auf den Stream:

stream1.read(meinevar[0],stream1.size); //weiß jetzt nicht geneu ob 0 oder 1 mal testen
sttream2.write(pointer(meinevar)^,length(meinevar));