image nesnesine ile resim kaydetme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

image nesnesine ile resim kaydetme

Mesaj gönderen huseyinert »

s.a arkadaşlar
veri tanına resmin yolunu kaydedip kaydettiğim yoldan image nesnesine resmi çağırıp gösterebiliyorum buraya kadar sorun yok ama programın ilk açılışnda ve cari bul işleminde gridden seçilen carilerin hepsinde onlara ait resimleri göstermesi gerekiyor yani hangi cari seçilirse onun resimyolunu vt. den okuyup image nesnesine yüklemesini istiyorum bunu dbgrdin click olayıyla yaptım ama tam istediğim şekilde değil böyle olmamalı diye düşündüm bi şekilde datasete bağlanmalı... bu konuda yardımlarınızı bekliyorum kolay gelsin
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

DBGrid in DataSource unun OnDataChange olayına kodu yaz. Hangi kayıtta isen onun resmi görünecektir.

Kod: Tümünü seç

Image1.Picture.LoadFromFile(Table1.FieldByName('RESIM_YOLU').AsString);
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
menderes

Mesaj gönderen menderes »

Kolay gelsin...
Bu konuda size daha önce bir dershaneye yaptığım bir programımdan örnek vereyim acizane olarak, belki işinize yarar... Çünkü datachange olaylarında eğer resim yolunu bulamazsa hiç te hoş olmayan hata mesajı çıkacaktır...
Daha önceki yazılarımda da belirttiğim gibi ben genelde DBEdit leri kullanmıyorum.Bu yüzden örnekleri Edit.Text lerle vereceğim....
Şimdi öğrenci bilgilerinin listelendiği bir formumuz ve içinde de yeni-düzelt diyen iki adet butonumuz ve bir de öğrenci listesini gösteren dbgrid1 olsun. Formumuzun adı Form1...
Bir adet te öğrenci kayıtlarının girildiği ve düzeltildiği formumuz adıda Form2 olsun.
Şimdi Form1 den yeni butonuna tıklayalım.

Kod: Tümünü seç

procedure TForm1.YeniClick(Sender: TObject); //yeni
begin
Application.CreateForm(TForm2, Form2);
 Form2.Edit1.Text:='Otomatik Sayı'; //öğrenci ID si
Form2.Edit2.Text:='';//Öğrenci Adı Soyadı
 Form2.Kaydetbuton.Enabled:=True;
Form2.Duzeltbuton.Enabled:=False;
Form2.Image1.Picture.LoadFromFile('C:\HAYSOFTYAZILIM\foto\r.jpg');
//r.jpg eğer resim kaydetmek istemezse logo olarak hazırladığım r.jpg veritabanına kaydedilecek...
Form2.Edit14.Text:='C:\HAYSOFTYAZILIM\foto\r.jpg'; //veritabanına kaydedilecek resim yolu.
Form2.ShowModal;
end;
Form2 ye önümüze yeni bir kayıt için açıldığını varsayalım,
Burada, kaydet,Düzenle adında iki butonumuz, image1,üç adet Edit.Text,
Edit1.Text - otomatik artan id kayıt için kullanıcıya gösterilmese de olur.
Edit2.Text - Öğrenci nin Ad Soyad kayıtı için,
Edit14.Text - İmage ye getirelecek resimin yolunu gösterme ve veritabanına kayıt için kullanılacak.
Edit2.Text e kayıtı girdiğimizi varsayalım, ve imageye resimi getirelim,
Image1Click olayına;

Kod: Tümünü seç

//unutmadan delphide dialogs bölümünden OpenPictureDialog ekleyelim.
procedure TForm2.Image1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
begin
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
Edit14.Text:=OpenPictureDialog1.FileName;
end;
end;
Şimdide verileri kaydedelim.

Kod: Tümünü seç

//table ile yaparsak insert,post
IBTable.FieldByName('ADSOYAD').AsString:=Edit2.Text;
IBTable.FieldByName('RES').AsString:=Edit14.Text;
Şimdide Form1 den Form2 ye var olan kayıtı düzenlemek için gidelim.

Kod: Tümünü seç

procedure TForm1.DuzeltButonClick(Sender: TObject);//düzenle
var
r:string;
begin
Application.CreateForm(TForm2, Form2);
Form2.Edit1.Text:=datamodule1.IBTable1.FieldByValues['ID'];
Form2.Edit2.Text:=datamodule1.IBTable1.FieldByName('ADSOYAD').AsString;
Form2.Edit14.Text:=datamodule1.IBTable1.FieldByName('RES').AsString;// Burada bir uyarı yapalım eğer AsString olarak değilde FieldValues['RES'] olarak tanımlama yaparsanız alan boş ise hata mesajı alacaksınız. Diğer string alanlar için de geçerlidir. 
Form2.KaydetButon.Enabled:=False;
Form2.DuzeltButon.Enabled:=True;
r:=IBTable1.FieldByName('RES').AsString;
if r<>'' then
if FileExists(r) then // dosya varmı yokmu
Form2.Image1.Picture.LoadFromFile(r)
else // eğer dosya yoksa daha önceden hazırladığımız dosya gelsin.
Form2.Image1.Picture.LoadFromFile('C:\HAYSOFTYAZILIM\foto\r.jpg');
Form2.ShowModal;
end;
Kullanıcı burada düzenleme yapacaksa edit lere gerekli bilgiler girilir. Edit1.text gösterilecekse readonly yapalım ki buraya bilgi giremesin. Çünkü index alanımız düzeltmede kullanacağız.
Aynı şekilde image1 içinde yukarıda verdiğimiz örnek geçerlidir(onclick olayı).
Yine Düzelt butonuna tıklandığında IBTable için yukarıda verdiğimiz örneği edit,post olarak uygularız. SQL kullanacaksak update.
Umarım faydalı olabilmişimdir. Hüseyin Kardeş sonucu bildirirsen seviniriz. Kolay gelsin.....
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

Mesaj gönderen huseyinert »

rsimsek hocam dediğiniz kodu yazdım ama program açılırken access violation at adress ....... project1.exe read of adress ....... hatası veriyor.
nasıl yapabiliriz ....kolay gelsin
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Mesaj gönderen NewMember »

Huseyinert demişki:
rsimsek hocam dediğiniz kodu yazdım ama program açılırken access violation at adress ....... project1.exe read of adress ....... hatası veriyor.
Sanırım şöyle yaparsan sorun çıkmaz.Mutlaka benzersiz bir numara tutan ID alanın vardır.O alanı tutan DBeditin cahange yordamına o kodu try except bloğunda yazarsan sorun olmaz.Menderes hocanında söyleiği üzere bir tane logo resmin olsun.Eğer program resi bulamazsa o logoyu göstersin.

Kod: Tümünü seç

try
Image1.Picture.LoadFromFile(Table1.FieldByName('RESIM_YOLU').AsString);
except
//Buraya da o kodu yaz.Yada istediğin başka  bişey
end;
Ben böyle yapıyorum ve hiç sorun yaşamadım.kolay gelsin.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Ben gridin üzerinde değil de hangi kayıtın üzerinde isen ona ait resimi formun üzerindeki bir image nesnesinde göstermeye örnek vermiştim. tasarım aşamasında resimlerden birini image.picture den bulup yükletir misin :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

Mesaj gönderen huseyinert »

tşk. ederim hocam tasarım anında image nesnesine bir resim koyacağım sanırım fakat şöle bişey var ben gridden resmi kayıtlı olmayan bi cari seçtğimde ne olcak ozamanda aynı hatayı veriyor...
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Kullandığın yapıyı biraz detaylandırırsan daha çok yardımcı olabiliriz :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
a_o
Üye
Mesajlar: 84
Kayıt: 18 Eki 2005 04:41
Konum: Tekirdağ

Mesaj gönderen a_o »

merhaba
anladığım kadarıyla bir kısım caride resim var bi kısmında yok
o halde resim olup olmadığını kontrol ettirip ona göre resmi göstertirsin. yani

if Table1.FieldByName('RESIM_YOLU').AsString<>'' then resimyukle

şeklinde kullanabilirsin

kolay gelsin
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

Mesaj gönderen huseyinert »

hocam ibdataset kullanıyorum db bileşenlerini kullanıyorum (dbedit...) bul butonuna basılınca dbgridde cari_kayit datasetinin bağlı olduğu datasourceye girdi bağlıyorum yapım bu şekilde. dediğim hatayı veriyor

tşk. ederim
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

@a_o nun dediği gibi kayıtta yolu olan resim dosyasının olup olmadığını kontrol edebilirsin.

Kod: Tümünü seç

if Table1.FieldByName('RESIM_YOLU').AsString<>'' then 
  if FileExists(Table1.FieldByName('RESIM_YOLU').AsString) then
    Image1.Picture.LoadFromFile(Table1.FieldByName('RESIM_YOLU').AsString);
Yine de resimi yükleyemeyip hata averiyorsa try / excep içinde hatayı yakalamayı dene :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
mrtyes

Mesaj gönderen mrtyes »

eğer doğru anlasaydım forumda bu konunun cevabı var. formun offline v3.0 indir orda jpeg risim diye ara galiba sorunu çözersin
iyi çalışmalar
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

Mesaj gönderen huseyinert »

try except ile nasıl yakalaycağım şöle yaptım ama olmadı aynı

Kod: Tümünü seç

procedure Tdata.ds_cari_kayitDataChange(Sender: TObject; Field: TField);
begin
try
if data.cari_kayitRESIM_YOL.AsString<>'' then begin
if FileExists(data.cari_kayitRESIM_YOL.AsString) then begin
cari_kayit_form.image1.Picture.LoadFromFile(data.cari_kayitRESIM_YOL.AsString);
  end;
  end;
//  cari_kayit_form.image1.Free;
  // end;
   except
   on exception do raise
    end;
    end;
bu şekilde yapıyorum ama aynı hatayı veriyor image boşken oluyor herhalde...[/quote]
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

RESIM_YOL dediğin alanda dosyaının hem yolunu hem de adını mı tutuyorsun :?:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

Mesaj gönderen huseyinert »

tabi hocam yolu ve ismiyle birlikte kaydediyorum
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Cevapla