image nesnesine ile resim kaydetme
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- huseyinert
- Üye
- Mesajlar: 233
- Kayıt: 19 Nis 2005 06:49
- Konum: Bartın
image nesnesine ile resim kaydetme
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
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
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!!
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.
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;
Şimdide verileri kaydedelim.
Şimdide Form1 den Form2 ye var olan kayıtı düzenlemek için gidelim.
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.....
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;
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;
Kod: Tümünü seç
//table ile yaparsak insert,post
IBTable.FieldByName('ADSOYAD').AsString:=Edit2.Text;
IBTable.FieldByName('RES').AsString:=Edit14.Text;
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;
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.....
- huseyinert
- Üye
- Mesajlar: 233
- Kayıt: 19 Nis 2005 06:49
- Konum: Bartın
Huseyinert demişki:
Ben böyle yapıyorum ve hiç sorun yaşamadım.kolay gelsin.
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.rsimsek hocam dediğiniz kodu yazdım ama program açılırken access violation at adress ....... project1.exe read of adress ....... hatası veriyor.
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;
- huseyinert
- Üye
- Mesajlar: 233
- Kayıt: 19 Nis 2005 06:49
- Konum: Bartın
- huseyinert
- Üye
- Mesajlar: 233
- Kayıt: 19 Nis 2005 06:49
- Konum: Bartın
@a_o nun dediği gibi kayıtta yolu olan resim dosyasının olup olmadığını kontrol edebilirsin.
Yine de resimi yükleyemeyip hata averiyorsa try / excep içinde hatayı yakalamayı dene 
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);

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
- huseyinert
- Üye
- Mesajlar: 233
- Kayıt: 19 Nis 2005 06:49
- Konum: Bartın
try except ile nasıl yakalaycağım şöle yaptım ama olmadı aynı
bu şekilde yapıyorum ama aynı hatayı veriyor image boşken oluyor herhalde...[/quote]
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;
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
- huseyinert
- Üye
- Mesajlar: 233
- Kayıt: 19 Nis 2005 06:49
- Konum: Bartın