Form Üzerinden Resim Ekleme Hakkında Her Şey
#1
access-sql-4 
Merhaba arkadaşlar..

Resim ekleme işi biraz kafa karıştırır.. Access kaynakları der ki "kayda resim ekleyeceksen ole nesnesi olarak ekle." Tamam ekleyelim ama eklediğimiz resimler dosya içine gömüldüğü için 10 resim sonra dosya boyutu balon gibi şişecek.. Bir de her sürümde istediğimiz uzantıda ekleyemeyiz.. 2003 bmp ister, 2007 de png ler sıkıntılı.. İşin özü, formlara görsel olarak eklediklerimizden harici resimleri ole nesnesi olarak eklemek çok efektif değildir..

En stabil yöntem resimleri dosyaya gömmeden, bilgisayarımızdaki konumunu kullanarak bir resim çerçevesinde göstermek..

Senaryo..:

Diyelim ki bir personel uygulamamız var. Her personele ait resimleri form üzerinden gözat penceresini kullanarak eklemek ve kayıtlar arasında gezinirken de hangi kayıt üzerindeysek o kayda ait resmi görmek istiyoruz.. Ve istiyoruz ki eklediğimiz resimleri değiştirebilelim ve hata silebilelim..

Nasıl Yapılır..:

Resim ekleyeceğimiz kayıtların bulunduğu tablomuza gidip tasarım görünümünde açıyoruz.. En sona yeni bir alan ekleyelim, ismi resim olsun. Veri tipi de Not olsun.. Bu alanda resim dosyamızın bilgisayarımızdaki yolunu saklayacağız..

[Resim: resimekle1.jpg]

Tabloyu kaydedip kapalım ve formumuza geçelim.. Formumuza önce bir metin kutusu ekleyelim, ismi yine resim olsun. Özellikler / Biçim / Görünür seçeneğini Hayır yapalım..

Formumuz kayıt kaynağı olarak direkt tabloya bağlı ise bu metin kutusunun Özellikler / Veri / Denetim Kaynağı kısmına tablomuzdaki resim alanını yazalım..

Eğer formumuzun kayıt kaynağı bir sorguya dayalı ise bu sorguyu açıp tablomuzdan bu alanını da sorgu ızgarasına ekleyelim.. Bunu yapmazsak denetim kaynağında resim alanı görünmez..

Menüye alışıksanız Varolan Alanları Ekle kısmından da metin kutusu eklemeden resim alanını forma dahil edebilirsiniz..

Şimdi araç kutusundan Resim denetimi seçip formumuzun üzerine yerleştirelim.. Özellikler / Diğer / Ad kısmından da adını cerceve yapalım..

[Resim: resimekle2.jpg]

Access bir resim seçmemizi isteyecek.. Aşağıdaki gibi bir resmi uygulamanız ile aynı klasöre eklerseniz resim eklenmemiş kayıtlarda bu resim görünür.. Resmi sağ tık yapıp Resmi Farklı Kaydet seçeneğinden bilgisayarınıza kaydedebilirsiniz.. (Resim 300x300 boyutlarındadır.. Küçük göründüğüne bakmayın.)

[Resim: resimyok.jpg]


Şimdi de forma iki düğme ekleyelim.. Birinin etiketi Ekle, diğerinin Sil olsun..

Son durum böyle olacak..:

[Resim: resimekle3.jpg]


Kodlarımızı yazma aşamasına geldik.. Ekle düğmesinin Özellikler / Olay / Tıklandığında satırına çift tıklayalım.. Satırda [Olay Yordamı] ifadesi ve sağ kenarda üç noktalı bir düğme belirir.. Düğmeye tıklayalım ve açılan kod sayfasında imlecin oturduğu kısma bu kodu yazalım..:

Visual Basic
  1. Dim gzt As FileDialog
  2. Dim DosyaAdi As String
  3. Dim SeciliNesne As Variant
  4. Set trz = Application.FileDialog(msoFileDialogFilePicker)
  5. With trz
  6. .AllowMultiSelect = False
  7. .ButtonName = "Resim Seç"
  8. .Filters.Add "Resimler", _
  9. "*.gif; *.jpg; *.jpeg; *.bmp; *.png"
  10. .FilterIndex = 0
  11. .InitialFileName = Environ("UserProfile") & "\My Documents\"
  12. .InitialView = msoFileDialogViewThumbnail
  13. .Title = "Resim Seç..."
  14. If .Show = True Then
  15. For Each SeciliNesne In .SelectedItems
  16. DosyaAdi = SeciliNesne
  17. Next SeciliNesne
  18. Me.resim = DosyaAdi
  19. Me.cerceve.Picture = DosyaAdi
  20. End If
  21. End With



Şimdi de Sil düğmesinin tıklandığında kod sayfasını açalım ve bu prosedürü yapıştıralım..:

Visual Basic
  1. If MsgBox("Kayda ait resim silinecek. Onaylıyor musunuz?" _
  2. , vbYesNo, "Resim Sil") = vbYes Then
  3. Me.resim = ""
  4.  
  5. 'Çerçevede, aynı klasörde bulunan resimyok adndaki resim görünür..
  6. 'Bu resim yoksa çerçeve boş görünür..
  7. On Error Resume Next
  8. Me.cerceve.Picture = CurrentProject.Path & "\resimyok.jpg"
  9. End If



Şimdi sıra kayıt gezintisi sırasında o kayda ait resmi çerçevede göstermeye geldi..

Formumuzun Özellikler / Olay / Geçerli Olduğunda kod sayfasına bunu yapıştıralım..:

Visual Basic
  1. On Error GoTo hata
  2. If Nz(resim, "") = "" Then
  3. Me.cerceve.Picture = CurrentProject.Path & "\resimyok.jpg"
  4. Else
  5. Me.cerceve.Picture = resim
  6. End If
  7. Exit_hata:
  8. Exit Sub
  9.  
  10. hata:
  11. MsgBox "Resim bulunamadı.." _
  12. & Chr(10) & "Resim dosyanız silinmiş," _
  13. & " yeri veya ismi değişmiş olabilir..", vbInformation, "Hata"
  14. Me.cerceve.Picture = ""
  15. Resume Exit_hata



Operasyon bitti sayılır.. Şimdi diyalog penceresi için gerekli olan bir referansı eklemek gerekiyor..

Kod sayfasını (VBA editörünü) açalım. Üstteki Tools Menüsünüden Refrences seçeneğine tıklayalım.. Ekrana gelen listeden Microsoft Office xx.x Object Library seçeneğini bulup onaylayalım.. (xx.x kısmı sürümünüze göre değişir..)

[Resim: resimekle4.jpg]

Artık formumuz üzerinde kayıtlara resim ekleyebileceğiz..

[Resim: resimekle5.jpg]

Konu anlatımı esnasında üzerinde çalıştığım dosya ektedir..

Detaylar diğer mesajlarda.. Vv


Eklenti Dosyaları
.rar   trz-resim-ekle.rar (Boyut: 61,42 KB / İndirilme: 1.850)



  Alıntı
Bu mesajı beğenenler:
#2
Soru şu..:

"Eklediğim resimleri tek bir yerde toplayabilir miyim? Mesela tüm resimler, eklediğimde uygulamamla aynı dizindeki resimler adlı klasörde olsa.."


Ekle düğmesinde kullandığımız prosedürün hemen altına (End Sub üstüne) bunu ilave edelim..:

Visual Basic
  1. On Error Resume Next
  2.  
  3. asil = Me.resim
  4.  
  5. kopya = CurrentProject.Path & _
  6. "\resim\" & Dir(asil) 'Buradaki 'resim' klasör adıdır..
  7.  
  8. Dim aa
  9. Set aa = CreateObject("Scripting.FileSystemObject")
  10.  
  11. aa.CopyFile asil, kopya
  12. Me.resim = kopya
  13. Me.cerceve.Picture = kopya
  14. If MsgBox("Resim klasöre kopyalandı.. " _
  15. & "İlk dosyayı silmek ister misiniz?", vbYesNo, "Uyarı") = vbYes Then
  16. Kill asil
  17. End If





  Alıntı
Bu mesajı beğenenler:
#3
Üsttekinin devamı niteliğinde bir soru daha..:

"Resimleri klasörde topladık ama hangi resim hangi kaydın belli değil.. Resimleri, örneğin otomatik sayı alanı değeri ve personel adının birleşimi bir isimle kaydedebilir miyiz?"

Bu durumda yukarıdaki, resmi klasöre taşıma prosedürünün yerine bunu kullanınız..:

Visual Basic
  1. On Error Resume Next
  2.  
  3. asil = Me.resim
  4.  
  5. kopya = CurrentProject.Path & _
  6. "\resim\" _
  7. & Me.PersonelNo & Me.Ad & Right(Dir(asil), 4) 'Buradaki alan isimlerini kendinize göre güncelleyiniz..
  8.  
  9. Dim aa
  10. Set aa = CreateObject("Scripting.FileSystemObject")
  11.  
  12. aa.CopyFile asil, kopya
  13. Me.resim = kopya
  14. Me.cerceve.Picture = kopya
  15. If MsgBox("Resim klasöre kopyalandı.. " _
  16. & "İlk dosyayı silmek ister misiniz?", vbYesNo, "Uyarı") = vbYes Then
  17. Kill asil
  18. End If





  Alıntı
Bu mesajı beğenenler:
#4
Soru..:

"Formda iyi güzel resmi gösteriyoruz ama raporlarda nasıl olacak bu iş?"

Raporumuza ilk mesajda anlattığım gibi bir resim denetimi ekliyoruz ve Özellikler / Veri / Denetim Kaynağı kısmına gidip resim alanını seçiyoruz..:

[Resim: resimekle6.jpg]

Raporu açtığımızda sonuç..:

[Resim: resimekle7.jpg]



  Alıntı
Bu mesajı beğenenler:
#5
Merak edebileceğimiz bir soru daha..:

"Ben her kayda iki ya da daha fazla resim eklemek istiyorum? Nasıl yapabilirim?"

Cevap..: En baştan yapılan her şeyi tekrardan yaparak.. Wink

İşi kolaylaştırmak için her düğmeye uzun uzun kod yazmak yerine resim ekleme prosedürünü ayrı bir fonksiyona aldım..:

Visual Basic
  1. Function ResimEkle(alanadi As String, cerceveadi As String)
  2. Dim gzt As FileDialog
  3. Dim DosyaAdi As String
  4. Dim SeciliNesne As Variant
  5. Set trz = Application.FileDialog(msoFileDialogFilePicker)
  6. With trz
  7. .AllowMultiSelect = False
  8. .ButtonName = "Resim Seç"
  9. .Filters.Add "Resimler", _
  10. "*.gif; *.jpg; *.jpeg; *.bmp; *.png"
  11. .FilterIndex = 0
  12. .InitialFileName = Environ("UserProfile") & "\My Documents\"
  13. .InitialView = msoFileDialogViewThumbnail
  14. .Title = "Resim Seç..."
  15. If .Show = True Then
  16. For Each SeciliNesne In .SelectedItems
  17. DosyaAdi = SeciliNesne
  18. Next SeciliNesne
  19. Controls(alanadi) = DosyaAdi
  20. Controls(cerceveadi).Picture = DosyaAdi
  21. End If
  22. End With
  23.  
  24.  
  25. On Error Resume Next
  26.  
  27. asil = Controls(alanadi)
  28.  
  29. kopya = CurrentProject.Path & _
  30. "\resim\" _
  31. & Me.PersonelNo & Me.Ad & Right(cerceveadi, 1) _
  32. & Right(Dir(asil), 4) 'Buradaki alan isimlerini kendinize göre güncelleyiniz..
  33.  
  34. Dim aa
  35. Set aa = CreateObject("Scripting.FileSystemObject")
  36.  
  37. aa.CopyFile asil, kopya
  38. Controls(alanadi) = kopya
  39. Controls(cerceveadi).Picture = kopya
  40. If MsgBox("Resim klasöre kopyalandı.. " _
  41. & "İlk dosyayı silmek ister misiniz?", vbYesNo, "Uyarı") = vbYes Then
  42. Kill asil
  43. End If
  44.  
  45. End Function



Her bir Ekle düğmesinde bu şekilde kullanılabilir..:

Visual Basic
  1. Call ResimEkle("resim", "cerceve") 'resim alanı ve eklenecek çerçeve isimlerini yazacağız..



Formun Güncelleştirme Sonrasında kullandığımız kodda resim adedine göre geliştirilmesi gerekir tabi..:

Visual Basic
  1. On Error GoTo hata
  2. If Nz(resim, "") = "" Then _
  3. Me.cerceve.Picture = CurrentProject.Path & "\resimyok.jpg" Else: Me.cerceve.Picture = resim
  4. If Nz(resim2, "") = "" Then _
  5. Me.cerceve2.Picture = CurrentProject.Path & "\resimyok.jpg" Else: Me.cerceve2.Picture = resim2
  6. If Nz(resim3, "") = "" Then _
  7. Me.cerceve3.Picture = CurrentProject.Path & "\resimyok.jpg" Else: Me.cerceve3.Picture = resim3
  8.  
  9. Exit_hata:
  10. Exit Sub
  11.  
  12. hata:
  13. MsgBox "Resim bulunamadı.." _
  14. & Chr(10) & "Resim dosyanız silinmiş," _
  15. & " yeri veya ismi değişmiş olabilir..", vbInformation, "Hata"
  16. Me.cerceve.Picture = ""
  17. Me.cerceve2.Picture = ""
  18. Me.cerceve3.Picture = ""
  19. Resume Exit_hata



Birden fazla ekleme ile ilgili örnek ektedir..:

[Resim: resimekle8.jpg]


Eklenti Dosyaları
.rar   trz-resim-ekle-birden-fazla.rar (Boyut: 66,91 KB / İndirilme: 711)



  Alıntı
Bu mesajı beğenenler:
#6
Bir soru daha..:

"Eklediğim resimler çerçeveye oturmuyor.. Belli bir kısmı görünüyor.. Nasıl düzeltebiliriz?

Tasarım görünümünde çerçevenin Özellikler / Biçim / Boyutlandırma Modu kısmındaki seçeneklerden resminizin boyutuna göre istediğiniz ayarı seçebilirsiniz..



Konuyla ilgili, aklıma gelen hakkında detaylar ve açıklamaları bu şekilde.. Soru veya sorunlarınız olursa destek verebilirim..

Access dolu günler diliyorum.. Vv

Taruz..



  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  Resim Dosya EkleME Saklama ve Gösterme (Sıfır kodla birkaç tıkla Form ve Rapor) Mehmet Eser 12 15.673 24-07-2014, 20:56
Son Mesaj: mengene
  Access açılırken resim belirlemek onur_can 4 2.392 15-07-2014, 22:25
Son Mesaj: mengene
  Sade Şık bir AVT için Alt Form yerine form üst bilgisi kullanımı Yeni Tasarım Mehmet Eser 2 2.500 02-06-2012, 08:01
Son Mesaj: furkan_68200

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 4 Ziyaretçi