TJvThumbView
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
TJvThumbView
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
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
Arkadaşlar Sorunu Çözdüm
paylaşmak için buraya kodunu koyuyorum
yalnız dikkat edilmesi gereken nokta 100 resmin üstünde çok yavaşlıyor.
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;
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
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. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
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ı ?
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
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. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
- 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.
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..
- 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]
- Çı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..
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;
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.Kod: Tümünü seç
ThumbList[0]
- Çı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.