Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
FireMonkey Android'in Resim Galerisi Nasıl Açılır?
#1
Selamün Aleyküm;

FireMonkey ile Android'in resim galerisi açılıp içinden nasıl resim çekilebilir? Ben internette şu örneği buldum:


var
Intent: JIntent;

begin
  Intent := TJIntent.Create;
  Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
  Intent.setType(StringToJString('image/*'));
  Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
  SharedActivity.startActivity(Intent);
end;

Bu Delphi kodunda hata SharedActivity'de. Yani SharedActivity dediğimde çıkmıyor, halbuki uses Androidapi.Helpers; eklemiştim.

C++ Kodu da Şöyle:

JIntent* intent;
intent->setAction(TJIntent::JavaClass->ACTION_VIEW);
intent->setType(StringToJString("image/*"));
intent->setFlags(TJIntent::JavaClass->FLAG_ACTIVITY_NEW_TASK);
SharedActivity()->startActivity(intent);

Bu koddaki sıkıntı ise bu kod tetiklendiğinde uygulama şu şekilde bir hata veriyor:
Screenshot_2016_09_21_18_21_20.png
İşin ilginci bunun Java kodu düzgün bir biçimde resim galerisini açıyor:
Intent intent = new Intent();  
intent.setAction(android.content.Intent.ACTION_VIEW);  
intent.setType("image/*");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Bu hatayı nasıl düzeltebilirim? Daha doğrusu bu hata neyden kaynaklanıyor? FireMonkey'de resim galerinden resim açmayı nasıl yapabilirim?
Teşekkürler.
Cevapla
#2
Merhaba,
Çok basit Tek satır kod ile yapabilirsiniz.

  1. Galeriden seçim yapmanızı sağlayacak bir buton ve bir Image nesnesini form üzerine yerleştirin.
  2. Form'a ayrıca bir adet ActionList yerleştirin.
  3. ActionList'i çift tıklayıp, editörün açılmasını sağlayın.
  4. New Action butonu ile New Standart Action menüsünü seçin.
  5. Media Library kısımdan TakePhotoFromLibraryAction'u seçin ve Ok butonuna tıklayın. Son olarak editörü kapatın.
  6. Button'u seçin ve Object Inspector'dan butonun Action özelliğinde TakePhotoFromLibraryAction1'i seçin.
  7. Yine butonun Object Inspector'dan Event sekmesine geçin ve Action event'i içerisindeki OnDidFinishTaking olayını çift tıklayın.
  8. Kod editörüne aşağıdaki tek satırlık kodu yazarak test edin.

Image1.MultiResBitmap.Items[0].Bitmap.Assign(Image);

Ekran görüntüsü

P91i5Tl.gif

İyi çalışmalar...
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#3
Teşekkürler. Bu Delphi'de istediğim gibi çalışıyor lakin aynısını C++ Builder'da denedim orada çalışmıyor:
2016_09_21_19_42_15.gif

Sebebi ne olabilir?
Cevapla
#4
(21-09-2016, Saat: 18:26)İbrahim Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSelamün Aleyküm;

FireMonkey ile Android'in resim galerisi açılıp içinden nasıl resim çekilebilir? Ben internette şu örneği buldum:


var
Intent: JIntent;

begin
  Intent := TJIntent.Create;
  Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
  Intent.setType(StringToJString('image/*'));
  Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
  SharedActivity.startActivity(Intent);
end;

Bu Delphi kodunda hata SharedActivity'de. Yani SharedActivity dediğimde çıkmıyor, halbuki uses Androidapi.Helpers; eklemiştim.

C++ Kodu da Şöyle:

JIntent* intent;
intent->setAction(TJIntent::JavaClass->ACTION_VIEW);
intent->setType(StringToJString("image/*"));
intent->setFlags(TJIntent::JavaClass->FLAG_ACTIVITY_NEW_TASK);
SharedActivity()->startActivity(intent);

Bu koddaki sıkıntı ise bu kod tetiklendiğinde uygulama şu şekilde bir hata veriyor:
Screenshot_2016_09_21_18_21_20.png
İşin ilginci bunun Java kodu düzgün bir biçimde resim galerisini açıyor:
Intent intent = new Intent();  
intent.setAction(android.content.Intent.ACTION_VIEW);  
intent.setType("image/*");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Bu hatayı nasıl düzeltebilirim? Daha doğrusu bu hata neyden kaynaklanıyor? FireMonkey'de resim galerinden resim açmayı nasıl yapabilirim?
Teşekkürler.

Kodunuzda dikkatimi aşağıdaki tanımınız çekti.
Kod:
JIntent* intent;


Bir JIntent pointer'ı tanımlamışsınız ama onu create etmemişsiniz !
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#5
(21-09-2016, Saat: 19:45)İbrahim Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlTeşekkürler. Bu Delphi'de istediğim gibi çalışıyor lakin aynısını C++ Builder'da denedim orada çalışmıyor:
2016_09_21_19_42_15.gif

Sebebi ne olabilir?

Merhaba,
 Structure penceresinde Image nesnesi görünmüyor. Set etmeye çalıştığınız nesne TImage nesnesi değil galiba. MultiResBitmap methodu Image nesnesin bir özelliğidir.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#6
Merhaba;
Kullandığım bileşen TImage. Şu şekilde yapıyorum (RESİM):
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Cevapla
#7
Merhaba,
C++ Builder Image nesnesi ile Delphi Image nesnesinin method'ları farklı. 
IMage Nesnesinin Bitmap'ine Assign edebilirsiniz.

Image1->Bitmap->Assign(Image);
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#8
(22-09-2016, Saat: 09:52)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,
C++ Builder Image nesnesi ile Delphi Image nesnesinin method'ları farklı. 
IMage Nesnesinin Bitmap'ine Assign edebilirsiniz.

Image1->Bitmap->Assign(Image);

Merhaba;
Bu kodu denediğimde "Invalid class typecast" hatasını alıyorum.
Cevapla
#9
(22-09-2016, Saat: 12:29)İbrahim Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(22-09-2016, Saat: 09:52)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba,
C++ Builder Image nesnesi ile Delphi Image nesnesinin method'ları farklı. 
IMage Nesnesinin Bitmap'ine Assign edebilirsiniz.

Image1->Bitmap->Assign(Image);

Merhaba;
Bu kodu denediğimde "Invalid class typecast" hatasını alıyorum.

Merhaba,
C++ Builder kurulu olmadığı için test edemiyorum. Aşağıdaki gibi deneyin. 

Image1->Picture->Bitmap->Assign(Image);
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#10
IDE TImage bileşeninin Picture adlı bir üyesinin bulunmadığını söylüyor.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Information Java İle Android Program Tetikleme hyperxman 6 133 Dün, Saat: 17:35
Son Yorum: hyperxman
  Delphi Android Java Tetikleyici hyperxman 0 64 15-02-2018, Saat: 01:06
Son Yorum: hyperxman
Exclamation Android Servis Hk. hyperxman 4 130 05-02-2018, Saat: 09:56
Son Yorum: hyperxman
  Resim Silme Paranoyaq 10 275 24-01-2018, Saat: 12:37
Son Yorum: Fesih ARSLAN
  WebBrowser - Choose Buton - Resim Upload nehirnnn 0 69 21-01-2018, Saat: 15:23
Son Yorum: nehirnnn



Konuyu Okuyanlar: 1 Ziyaretçi