Stream birleştirme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
cetoonak
Üye
Mesajlar: 50
Kayıt: 12 Haz 2003 09:53
Konum: www.mussimsek.com

Stream birleştirme

Mesaj gönderen cetoonak »

Merhaba

Richeditdeki yazıların altına, daha önceden veritabanındaki bir tabloya stream olarak kaydedilmiş bir yazıyı kopyalayan bir kod arıyorum.
Yani streamları toplama gibi bir şey.
Yalnız bu işi clipboard kullanmadan yapmak istiyorum.
Öyle yaptım zaten.

Biraz uğraştım ama aşağıdaki kod boş bir sayfa döndürdü.

Kod: Tümünü seç

var M1, M2, MToplam: TMemoryStream;
begin
  M1:=TMemoryStream.Create;
  M2:=TMemoryStream.Create;
  MToplam:=TMemoryStream.Create;

  try
    M1:=Editor.Lines.SaveToStream(M1);
    TBlobField(QEditor.FieldByName('Yazi')).SaveToStream(M2);

    M1.Position:=0;
    M2.Position:=0;

    MToplam.CopyFrom(M1, M1.Size);
    MToplam.CopyFrom(M2, M2.Size);

    Editor.Clear;
    Editor.Lines.LoadFromStream(MToplam);
  finally
    M1.Free;
    M2.Free;
    MToplam.Free;
  end;
end;
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

Ne clipboard'ı? İlk defa duydum. Bir stream'den diğerine kopyalama işlemi clipboard ile olmaz. CopyFrom'un kodlarını inceleyebilirsin. Senin yaptığında aynı şey. Kodlarının boş döndürmesine gelince:
Editöre LoadFromStream'den yükletmeden önce

Kod: Tümünü seç

MToplam.Position := 0;
yazmayı bir dener misin.
vesselam
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Stream'lerin read ve write (veya benzeri) fonksiyonlarını normal file copy işlemine benzer mantıkla yapmalısınız.

repeat
read(fromStream...
write(toStream...
until Numread = 0

gibi...

İyi çalışmalar.
cetoonak
Üye
Mesajlar: 50
Kayıt: 12 Haz 2003 09:53
Konum: www.mussimsek.com

Mesaj gönderen cetoonak »

ClipBoard kullanmadan kastım o değildi.
Visible false olan bir Richediti geçici olarak kullanarak yapmaktan bahsediyorum.
Aşağıdaki kodla yaptım.
Ama ClipBoard kullanmadan yapmak istiyorum.

Kod: Tümünü seç

var S: TMemoryStream;
begin
  S:=TMemoryStream.Create;
  TBlobField(QEditor.FieldByName('Editor')).SaveToStream(S);
  S.Position:=0;

  RichEditCache.Clear;
  RichEditCache.Lines.LoadFromStream(S);
  RichEditCache.SelectAll;
  RichEditCache.CopyToClipboard;
  RichEditAsil.PasteFromClipboard;

  S.Free;
MToplam.Position:=0; deyince sonuç aynı.
Hakan Canın dediğini deneyip sonucu bildiririm.
Teşekkürler...
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

stream birleştirme zor bir işlem değil.
Misal olsun diye string birleştirdim.

Kod: Tümünü seç

var
  ms1,ms2:Tmemorystream;
  ss:Tstringstream;
  str1,str2:string;
begin
  ms1 := Tmemorystream.Create;
  ms2 := Tmemorystream.Create;
  ss := Tstringstream.Create('');

  str1 := 'str1im';
  str2 := 'str2yim';

  ms1.write(str1[1], length(str1));
  ms2.write(str2[1] length(str2));

  ms1.Write(ms2.memory^,ms2.Size); // ms2 yi ms1e yazıyor...

  ss.write(ms1.memory^, ms1.size); // ms1 i stringstreame yazıyor

  showmessage(ss.DataString); // sonuç = 'str1imstr2yim'

Diğer ayrıntılara takılma. Burda bakacağın kod birleştirme kodu.

Kolay gelsin.
Cevapla