TJvThumbView

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
cihan
Üye
Mesajlar: 65
Kayıt: 02 Ağu 2005 03:34

TJvThumbView

Mesaj gönderen cihan »

Her kese iyi günler

Arkadaşlar firebird de oluşturduğum veritabanına jpeg dosyaları kaydetmiştim.Bunları TJvThumbView kullanarak göstermek istedim; blobfield i tmemorystream e aktardım ve TJvThumbView stream yolu ile bilgi aktarmak için AddFromStream(stream,grjpg) özelliğini kullandım ama program çalıştığında ya JvThumbnailler oluşuyor jpegler görüntülünemiyor(bir hata da vermiyor) yada jpeg error 42 hatasını veriyor. Stream e alırken hata yaptımı diye düşünüp stream i jpeg e çevirip image bileşeninin picture özelliğine assign ediyorum resim düzgün geliyor bir hata vermiyor.

Blob fielddeki resimleri bir kalsöre çıkıp ordan file olarak TJvThumbView aktarırsam sorun yok ama veriler dabase in için de bu şekliyle kullanmak istiyorum. Bu konuda yardımcı olabilirseniz sevinirim teşekkürler ve hepinize iyi günler
Ottoman

Mesaj gönderen Ottoman »

Selam. TJvThumbView 'in VT desteği yok,resimleri ancak dışardan yoluyla kadedip, hem VT'de gösterip hemde TJvThumbView'de gösterebilirsin?. iyi çalışmalar.
Kullanıcı avatarı
cihan
Üye
Mesajlar: 65
Kayıt: 02 Ağu 2005 03:34

Mesaj gönderen cihan »

Arkadaşlar Sorunu Çözdüm

paylaşmak için buraya kodunu koyuyorum

Kod: Tümünü seç


var ts:tmemorystream;
jp:TJvThumbimage;
begin
while not IBQuery1.Eof do
begin
ts:=tmemorystream.Create;
jp:=TJvThumbimage.Create(nil);
try
tblobfield(IBQuery1RESIM).SaveToStream(ts);
ts.Seek(0,soFromBeginning);
jp.LoadFromStream(ts,grJPG);
JvThumbView1.AddThumb(IBQuery1dosyaadi.AsString,false);
JvThumbView1.ThumbList[0].Photo.Picture.Assign(jp.Picture);
finally
ts.Free;
jp.Free;
end;
IBQuery1.Next;
end;
JvThumbView1.Refresh;
IBQuery1.Close;

yalnız dikkat edilmesi gereken nokta 100 resmin üstünde çok yavaşlıyor.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Döngü içinde create ve free etmek yerine 1 kere döngüden önce create ettikten sonra birde döngü bitiminden sonra 1 kere free etmek ve döngü başlamadan önce bu nesnelerin sıfırlama metotlarını (ts.pos:=0; {->}jp.picture:=nil;{<- örneğe göre gerekli değil}) kullanmak daha uygun olabilir galiba.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@sabanakman +1
Resim
Resim ....Resim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Olleeeeeyyy! Bu bonusLARı sağda solda çar çur etmeyeceğim.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
cihan
Üye
Mesajlar: 65
Kayıt: 02 Ağu 2005 03:34

Mesaj gönderen cihan »

sabanakman yazdı:Döngü içinde create ve free etmek yerine 1 kere döngüden önce create ettikten sonra birde döngü bitiminden sonra 1 kere free etmek ve döngü başlamadan önce bu nesnelerin sıfırlama metotlarını (ts.pos:=0; {->}jp.picture:=nil;{<- örneğe göre gerekli değil}) kullanmak daha uygun olabilir galiba.

dediğiniz şekilde ilk başta yaratıp ve dönü bittikten sonra yok ettiğimiz zaman çok ilginçtir JvThumbView1 hep aynı resmi basıyor. Dediğiniz şekilde yapılabiliyorsa paylaşırsanız sevinirim. Ayrıca ilk sorumda belirtiğim JvThumbView1.AddFromStream(ts,grjpg); komutunun neden çalışmadığını halen çözemedim bu componenti yazanlar bu komutu bu amaçla yazmamışlar mı ?
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Bu bileşenlerle hiç çalışmadım, zaten elimde de yoklar. Halbuki buradan bakınca ne kadar kolay gibi giörünüyor-du. Madem sorunu ancak böyle halledebildin bundan sonraki çalışmalarında başarılar. Ama son olarak şunu önerebilirim, verdiğin örneğe göre ts.size:=0;jp.picturte:=nil; kodlarını döngü başında kullanmayı dene. Halâ çalışmamak için inat ederse sen inat etmeyi bırak önceki yaptığın gibi kalsın.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Verdiğin kodu bilinçli yazdığını değerlendirerek yorumladım.

- Fonksiyon veya procedure ismi belirtmediğin için TJvThumbimage'i de kullanmadığımdan ve ek olarak ayrıca kendi yaptığın şekilde çalıştığını bildirdiğin için aşağıdaki benzeri bir çalışmanın daha hızlı olacağına yönelik öneriyi destekledim.

Kod: Tümünü seç

var ts : tmemorystream;
    jp : TJvThumbimage;
begin
  IBQuery1.First; // emin değilim sorun olursa kaldır.
  JvThumbView1.Clear; // emin değilim sorun olursa kaldır.
  ts := tmemorystream.Create;
  jp := TJvThumbimage.Create(nil);
  while not IBQuery1.Eof do
  begin
    ts.Clear;
    tblobfield(IBQuery1RESIM).SaveToStream(ts);
    ts.Seek(0,soFromBeginning);
    jp.LoadFromStream(ts, grJPG);
    JvThumbView1.AddThumb(IBQuery1dosyaadi.AsString,false);
    JvThumbView1.ThumbList[0].Photo.Picture.Assign(jp.Picture);
    IBQuery1.Next;
    Application.Processmessages;
  end;
  ts.Free;
  jp.Free;
  JvThumbView1.Refresh;
  IBQuery1.Close;
end;

Kod: Tümünü seç

ThumbList[0]
satırı bana fikir veriyor ama verdiği fikir, aslında senin metodun çalışmadığına işaret ediyor. Buradaki [0] item numarası hep aynı olduğu sürece aynı resmi göstermesi doğaldır diye düşünüyorum. Peki senin yaptığında nasıl çalıştı bunu da merak ediyorum.

- Çıkarımım şu şekilde, aslında eklediğin her Thumb için; ThumbList[ThumbList.Items.Count-1] elemanına atama yapmak lazım gerekirdi diye değerlendiriyorum.

- Bileşenin adından yola çıkarak, yapmak istediğinin, veritabanında kayıtlı bir resmin minik örneğini DBGrid tarzı bir listede görüntülemek ise önerim, o DBGrid veya DB listeleme nesnenin onDraw özelliğinde yaptırmandır. Soruyu daha da açabilirsen yardımcı oluruz..

- Başarılar..
Resim
Resim ....Resim
Kullanıcı avatarı
cihan
Üye
Mesajlar: 65
Kayıt: 02 Ağu 2005 03:34

Mesaj gönderen cihan »

mrmarman yazdı:- Verdiğin kodu bilinçli yazdığını değerlendirerek yorumladım.

- Fonksiyon veya procedure ismi belirtmediğin için TJvThumbimage'i de kullanmadığımdan ve ek olarak ayrıca kendi yaptığın şekilde çalıştığını bildirdiğin için aşağıdaki benzeri bir çalışmanın daha hızlı olacağına yönelik öneriyi destekledim.

Kod: Tümünü seç

var ts : tmemorystream;
    jp : TJvThumbimage;
begin
  IBQuery1.First; // emin değilim sorun olursa kaldır.
  JvThumbView1.Clear; // emin değilim sorun olursa kaldır.
  ts := tmemorystream.Create;
  jp := TJvThumbimage.Create(nil);
  while not IBQuery1.Eof do
  begin
    ts.Clear;
    tblobfield(IBQuery1RESIM).SaveToStream(ts);
    ts.Seek(0,soFromBeginning);
    jp.LoadFromStream(ts, grJPG);
    JvThumbView1.AddThumb(IBQuery1dosyaadi.AsString,false);
    JvThumbView1.ThumbList[0].Photo.Picture.Assign(jp.Picture);
    IBQuery1.Next;
    Application.Processmessages;
  end;
  ts.Free;
  jp.Free;
  JvThumbView1.Refresh;
  IBQuery1.Close;
end;

Kod: Tümünü seç

ThumbList[0]
satırı bana fikir veriyor ama verdiği fikir, aslında senin metodun çalışmadığına işaret ediyor. Buradaki [0] item numarası hep aynı olduğu sürece aynı resmi göstermesi doğaldır diye düşünüyorum. Peki senin yaptığında nasıl çalıştı bunu da merak ediyorum.

- Çıkarımım şu şekilde, aslında eklediğin her Thumb için; ThumbList[ThumbList.Items.Count-1] elemanına atama yapmak lazım gerekirdi diye değerlendiriyorum.

- Bileşenin adından yola çıkarak, yapmak istediğinin, veritabanında kayıtlı bir resmin minik örneğini DBGrid tarzı bir listede görüntülemek ise önerim, o DBGrid veya DB listeleme nesnenin onDraw özelliğinde yaptırmandır. Soruyu daha da açabilirsen yardımcı oluruz..

- Başarılar..

verdiğiniz kod benim yazdığıma göre daha temiz bir kod ve çalıştı ancak benim anlamadığım ben daha önce bu kodu denemiştim düzgün çalışmıyordu ben sadece stream.clear kullanmamıştım bunu kaldırdığım zaman benim denediğim gibi yine sorunlu çalışıyor o yüzden döngü içinde create ve free işlemi kullanıyordum. Sanırım stream bir kere yaratıp içine blobları doldurduğum zaman ve her seferinde baştaki stream i okuttuğum için hep aynı resmi basıyor yada jpegeror düşüyordu.

ayrıca ThumbList.Items.Count-1] count özelliği hatalı çalışıyor her kayıt için formları oluşturuyor ve en son kaydın resmini enson formda gösteriyor. O yüzden 0 kullanıyorum onuda dene yanılma ile bulduldum.

Bu componenti resimlerimi bir arada gridden daha güzel gösterdiği ve resmin üzerinde değişiklikleri daha kolay yapabileceğimi düşündüğümden seçmiştim.

Gösterdiğiniz Yardımlardan ötürü teşekkür ederim.
Cevapla