TimageList Kullanımı Sorunu [Çözüldü]

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Kullanıcı avatarı
codder71
Üye
Mesajlar: 117
Kayıt: 10 Tem 2010 07:41

TimageList Kullanımı Sorunu [Çözüldü]

Mesaj gönderen codder71 »

Selâmün aleyküm Arkadaşlar

Arkadaşlar yapmış olduğun uygulamalarda ingilizce ve türkçe dil kullanmak istiyorum bunun için bazı noktalarda TRectangle nesnesi kullandım ve bunlarda bitmap resimler kullanıyordum. Bu resimlerin bazıları ise kullanıcıya uygulamayı kullanmayı sağlayan yazılardan ibaret şuana kadar hepside Türkçe şeklinde bunları İngilizceye göre de oluşturmayı planlıyorum ama bu resimleri bir yerde depolamak ve istediğim duruma göre TRenctangle nesnesine aktarmam gerekiyor bunun için Timagelist kullanmak istedim ama başaramadım. Fesih hocam bana Timagelist kontrolünü kullanmak için buttonlarla ilgili bir örnek vermişti ama bu örneği denememe rağmen başaramadım. Siz değerli üstatlarımızdan yardım bekliyorum.

Şimdiden Teşekkürler iyi çalışamalar dilerim.
En son codder71 tarafından 04 May 2016 11:24 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: TimageList Kullanımı Sorunu

Mesaj gönderen fesiharslan »

Aleykûm selâm.
Doğru anladıysam aşağıdaki gibi bir yol izlemek istiyorsunuz:
Dil= Türkçe ise TRectangle nesnesinde Türkçe yazı içeren resmi göster.
Dil= İngilizce ise TRectangle nesnesinde İngilizce yazı içeren resmi göster.
Image nesneleri ile bu işlemi yapacaksanız, Bu durumda, 2 farklı önerim olacak.

1.YOL:
Bir TImageList nesnesine tüm Türkçe resimleri, diğer bir TImageList nesnesinde de İngilizce tüm resimleri yükleyin.
Dikkat etmeniz gereken en önemli nokta Türkçe ve İngilizce TImageList'lerde yer alan id'lerin aynı olmasıdır.
Dil değiştirdiğinizde, TRectangle nesnesinin içerisindeki resmi id ile alabilirsiniz.

2. YOL:
Bir image nesnesi birden fazla resim barındırır. Dolayısıyla Dil değiştirme kısmında, image içerisindeki diğer resmi görüntülemeyiz yeterli olacaktır.
Kullanıcı avatarı
codder71
Üye
Mesajlar: 117
Kayıt: 10 Tem 2010 07:41

Re: TimageList Kullanımı Sorunu

Mesaj gönderen codder71 »

Merhaba fesih hocam oncelikle cevabiniz icin tesekkur ederim. Hocam sorun tarif ettiginiz gibi ve Timagelist ile ilgili cozum oneriniz gercekten cok guzel ama Trectangle nesnesine nasil aktarma yapabilecegimi bulamadim. Sizinde belirttiginiz gibi İkitane Timagelist ekleyip giriste cihaz dilini belirleyip ona gore uygulamanin hangi dilde acilacagini bulup bir for dongusuyle Trectangle nesnelerine aktarmayi dusunuyorum. Bir de Hocam bu Timageliste istedigimiz boyutta image kaydedebiliyozmu ve bu imageleri rectangle nesnesine image kalitesi degismeden aktarabiliyozmu bununla ilgili bir kod ornegi paylasirsaniz sevinirim.
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: TimageList Kullanımı Sorunu

Mesaj gönderen fesiharslan »

codder71 yazdı:Merhaba fesih hocam oncelikle cevabiniz icin tesekkur ederim. Hocam sorun tarif ettiginiz gibi ve Timagelist ile ilgili cozum oneriniz gercekten cok guzel ama Trectangle nesnesine nasil aktarma yapabilecegimi bulamadim. Sizinde belirttiginiz gibi İkitane Timagelist ekleyip giriste cihaz dilini belirleyip ona gore uygulamanin hangi dilde acilacagini bulup bir for dongusuyle Trectangle nesnelerine aktarmayi dusunuyorum. Bir de Hocam bu Timageliste istedigimiz boyutta image kaydedebiliyozmu ve bu imageleri rectangle nesnesine image kalitesi degismeden aktarabiliyozmu bununla ilgili bir kod ornegi paylasirsaniz sevinirim.
TRectangle nesnesi içerisinde Align özelliği Client olan bir image nesnesi yerleştirin. Resimler TRectangle içindeki image içerisinde görünecek.
TRectangle, kullanmadan doğrudan image nesnesi de kullanabilirsiniz. Fakat TRectangle'ın avantajları; kenarlık oluşturulabilir. Fill özelliği ile arka plana gradient renkler verebilir. Image Opacity özelliğini ayarlayarak resmin bu renkten etkilenerek daha güzel görüntüler elde edilmesini sağlayabilirsiniz.
İster TImageList, ister image içerisindeki multiresbitmap özelliğini kullanın, resim kalitesi değişmez ve resmi bu nesnelere istediğiniz boyutlarda aktarabilirsiniz.
Kullanıcı avatarı
codder71
Üye
Mesajlar: 117
Kayıt: 10 Tem 2010 07:41

Re: TimageList Kullanımı Sorunu

Mesaj gönderen codder71 »

Merhabalar hocam
TRectangle nesnesi ile Timagelist hakkinda yazdikarinizla ilgili denemeler yaparim hocam cikabilecek olasi sorunlari bu basliktan yazarim yardimlariniz icin tekrar cok tesekkur ederim.
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: TimageList Kullanımı Sorunu

Mesaj gönderen fesiharslan »

1- TRectangle içerisine bir image nesnesi yerleştirin ve Align özelliğini Client yapın.
2- Image nesnesini seçin ve Object Inspector pencesinden MultiResBitmap özelliğinin yanındaki butonu tıklayıp MultiResBitmap editörünün açılmasını sağlayın.
3- Açılan resim editöründe Add butonu ile Türkçe ve İngilizce resimleri ayrı ayrı ekleyin. (İlk eklediğiniz image Is' si 0, sonraki ise 1 olacaktır.)
Her Image'e 2 şer resim ekleyin (Türkçe ve İngilizce resimler.) ve her Image nesnesinde resim id sıralaması aynı olsun. Yani Image1'de id'si 0 olan resim Türkçe, 1 olan İse İngilizce olsun. Image2 ve sonraki bütün Image nesnelerini de aynı şekilde düzenlerin.
4- Type bölümüne bir tip tanımların.

Kod: Tümünü seç

type
TDil = (Turkce, Ingilizce); 
5- Public kısmında TDil tipinde bir değişken takılmayın.

Kod: Tümünü seç

public
Dil:TDil;
6- Formun OnCreate olayında değişkene dil tipini ata.

Kod: Tümünü seç

Dil:=TDil.Turkce;
8- Son olarak işin özgü kodlamada ise, tek satırlık kod ile image içerisinde gösterilecek resmi belirleyebilirsiniz.

Kod: Tümünü seç

if Dil = TDil.Turkce then Image1.Bitmap.Assign(image1.MultiResBitmap.Items[Ord(Dil)].bitmap); 
OnCreate olayına dili Türkçe seçerseniz Dil enum tipi 0'a karşılık geleceğinden, 0 id'ye sahip resim yüklenecek. İngilizce olması durumuna enum tip karşılığı 1 olacağından 1 id'ye sahip resim yüklenecektir.

İyi çalışmalar
En son fesiharslan tarafından 03 May 2016 11:45 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
codder71
Üye
Mesajlar: 117
Kayıt: 10 Tem 2010 07:41

Re: TimageList Kullanımı Sorunu

Mesaj gönderen codder71 »

fesiharslan yazdı:1- TRectangle içerisine bir image nesnesi yerleştirin ve Align özelliğini Client yapın.
2- Image nesnesini seçin ve Object Inspector pencesinden MultiResBitmap özelliğinin yanındaki butonu tıklayıp MultiResBitmap editörünün açılmasını sağlayın.
3- Açılan resim editöründe Add butonu ile Türkçe ve İngilizce resimleri ayrı ayrı ekleyin. (İlk eklediğiniz image Is' si 0, sonraki ise 1 olacaktır.)
Her Image'e 2 şer resim ekleyin (Türkçe ve İngilizce resimler.) ve her Image nesnesinde resim id sıralaması aynı olsun. Yani Image1'de id'si 0 olan resim Türkçe, 1 olan İse İngilizce olsun. Image2 ve sonraki bütün Image nesnelerini de aynı şekilde düzenlerin.
4- Type bölümüne bir tip tanımların.

Kod: Tümünü seç

type
TDil = (Turkce, Ingilizce); 
5- Public kısmında TDil tipinde bir değişken takılmayın.

Kod: Tümünü seç

public
Dil:TDil;
6- Formun OnCreate olayında değişkene dil tipini ata.

Kod: Tümünü seç

Dil:=TDil.Turkce;
8- Son olarak işin özgü kodlamada ise, tek satırlık kod ile image içerisinde gösterilecek resmi belirleyebilirsiniz.

Kod: Tümünü seç

if Dil = TDil.Turkce then Image1.Bitmap.Assign(image1.MultiResBitmap.Items[Dil].bitmap); 
OnCreate olayına dili Türkçe seçerseniz Dil enum tipi 0'a karşılık geleceğinden, 0 id'ye sahip resim yüklenecek. İngilizce olması durumuna enum tip karşılığı 1 olacağından 1 id'ye sahip resim yüklenecektir.

İyi çalışmalar
Hocam biz denemeler yaparken siz makaleyi çıkarmışsınız :bravo:
Yalnız burada size danışmak istediğim bir konu var. İncelediğimde hocam iki adet dil ve Türkçe ve İngilizce birer adet resim kullanmışsınız ama birden fazla resim var durum itibari ile hatta text değerler mevcut bundan dolayı mesela şöyle modifiye yapsak sorun teşkil eder mi ;

yukardaki değerler oluşturulduktan sonra

Kod: Tümünü seç

if Dil = TDil.Turkce then 
begin
Image1.Bitmap.Assign(image1.MultiResBitmap.Items[Dil].bitmap);
Image2.Bitmap.Assign(image1.MultiResBitmap.Items[Dil+1].bitmap);
Image3.Bitmap.Assign(image1.MultiResBitmap.Items[Dil+2].bitmap);
label1.Text:='Başlat'; //Burda problem yok !!
end
else
if Dil = TDil.İngilizce then 
begin
Image1.Bitmap.Assign(image1.MultiResBitmap.Items[Dil].bitmap);
Image2.Bitmap.Assign(image1.MultiResBitmap.Items[Dil+1].bitmap);
Image3.Bitmap.Assign(image1.MultiResBitmap.Items[Dil+2].bitmap);
label1.Text:='Start'; //Burda problem yok !!
end;
Yukarıda belirlenen enum değerle benim belirlediğim integer değerde sıkıntı olur mu olursa nasıl bir yol izlemeliyim.

İyi çalışmalar Teşekkürler. :bravo:
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: TimageList Kullanımı Sorunu

Mesaj gönderen fesiharslan »

Türkçe veya ingilizce ayrımı yapmadan tek tiple yapılabilir.
OnCreate olayına aşağıdaki kodu yazın.

Kod: Tümünü seç

Dil:=TDil.Turkce;
Daha sonra formun OnShow veya OnCreate olayına aşağıdaki kodları yazmanız yeterli olacaktır.

Kod: Tümünü seç

Image1.Bitmap.Assign(image1.MultiResBitmap.Items[Ord(Dil)].bitmap);
Image2.Bitmap.Assign(image2.MultiResBitmap.Items[Ord(Dil)].bitmap);
Image3.Bitmap.Assign(image3.MultiResBitmap.Items[Ord(Dil)].bitmap);
Yukarıdaki kodları açıklayacak olursak;
Dil:=TDil.Turkce yazdığınızda, Items[Ord(Dil)] değeri Items[0] olarak algılanır ve Image içerisindeki 0 nolu id'ye sahip resim (Türkçe içerikli resim) gösterilir.
Dil:=TDil.Ingilizce yazdığınızda, Items[Ord(Dil)] değeri Items[1] olarak algılanır ve Image içerisindeki 1 nolu id'ye sahip resim (ingilizce içerikli resim) gösterilir.
Kullanıcı avatarı
codder71
Üye
Mesajlar: 117
Kayıt: 10 Tem 2010 07:41

Re: TimageList Kullanımı Sorunu

Mesaj gönderen codder71 »

fesiharslan yazdı:Türkçe veya ingilizce ayrımı yapmadan tek tiple yapılabilir.
OnCreate olayına aşağıdaki kodu yazın.

Kod: Tümünü seç

Dil:=TDil.Turkce;
Daha sonra formun OnShow veya OnCreate olayına aşağıdaki kodları yazmanız yeterli olacaktır.

Kod: Tümünü seç

Image1.Bitmap.Assign(image1.MultiResBitmap.Items[Dil].bitmap);
Image2.Bitmap.Assign(image1.MultiResBitmap.Items[Dil].bitmap);
Image3.Bitmap.Assign(image1.MultiResBitmap.Items[Dil].bitmap);
Yukarıdaki kodları açıklayacak olursak;
Dil:=TDil.Turkce yazdığınızda, Items[Dil] değeri Items[0] olarak algılanır ve Image içerisindeki 0 nolu id'ye sahip resim (Türkçe içerikli resim) gösterilir.
Dil:=TDil.Ingilizce yazdığınızda, Items[Dil] değeri Items[1] olarak algılanır ve Image içerisindeki 1 nolu id'ye sahip resim (ingilizce içerikli resim) gösterilir.
Merhabalar şuan hocam olayı anladım kusura bakmayın :oops: . Siz yukarıda anlattığınız TRectangle ve TImage nesnelerini her buton veya neye kullanacaksak yarı ayrı yapmamı söylemişiniz. Ben o kısmı atlamışım tekrar özür dilerim. :oops: Eğer şuan doğru anlamışsam Ozaman kodlar şöyle olması lazım ; :)

Her TRectangle nesnesine bir image ve ona göre 2 resim eklenecek

Kod: Tümünü seç

if Dil = TDil.Turkce then 
begin
Image1.Bitmap.Assign(image1.MultiResBitmap.Items[Dil].bitmap);
Image2.Bitmap.Assign(image2.MultiResBitmap.Items[Dil].bitmap);
Image3.Bitmap.Assign(image3.MultiResBitmap.Items[Dil].bitmap);
.
.
.
label1.Text:='Başlat'; //Burda problem yok !!
end
else
if Dil = TDil.İngilizce then 
begin
Image1.Bitmap.Assign(image1.MultiResBitmap.Items[Dil].bitmap);
Image2.Bitmap.Assign(image2.MultiResBitmap.Items[Dil].bitmap);
Image3.Bitmap.Assign(image3.MultiResBitmap.Items[Dil].bitmap);
.
.
.
.
label1.Text:='Start'; //Burda problem yok !!
end;
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: TimageList Kullanımı Sorunu

Mesaj gönderen fesiharslan »

codder71 yazdı: Her TRectangle nesnesine bir image ve ona göre 2 resim eklenecek

Kod: Tümünü seç

if Dil = TDil.Turkce then 
begin
Image1.Bitmap.Assign(image1.MultiResBitmap.Items[Dil].bitmap);
Image2.Bitmap.Assign(image2.MultiResBitmap.Items[Dil].bitmap);
Image3.Bitmap.Assign(image3.MultiResBitmap.Items[Dil].bitmap);
.
.
.
label1.Text:='Başlat'; //Burda problem yok !!
end
else
if Dil = TDil.İngilizce then 
begin
Image1.Bitmap.Assign(image1.MultiResBitmap.Items[Dil].bitmap);
Image2.Bitmap.Assign(image2.MultiResBitmap.Items[Dil].bitmap);
Image3.Bitmap.Assign(image3.MultiResBitmap.Items[Dil].bitmap);
.
.
.
.
label1.Text:='Start'; //Burda problem yok !!
end;
Doğru.
Bir TRectangle ve içersinde bir Image olacak.
Image Align Client olacak.
Her Image içerisine Türkçe ve İngilizce olmak üzere 2 adet resim olacak.

Kod kısmını ise aşağıdaki gibi yapmanız yeterli olacaktır.

Kod: Tümünü seç

Case Dil of
 TDil.Turkce:
 begin
   label1.Text:='Başlat';
 end;
 TDil.Ingilizce:
 begin
   label1.Text:='Start';
 end;
 end;
Image1.Bitmap.Assign(image1.MultiResBitmap.Items[Ord(Dil)].bitmap);
Image2.Bitmap.Assign(image2.MultiResBitmap.Items[Ord(Dil)].bitmap);
Image3.Bitmap.Assign(image3.MultiResBitmap.Items[Ord(Dil)].bitmap);
İyi çalışmalar
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: TimageList Kullanımı Sorunu

Mesaj gönderen fesiharslan »

Kod: Tümünü seç

Image1.Bitmap.Assign(image1.MultiResBitmap.Items[Ord(Dil)].bitmap);
//2. Image
//3. Image
//4. Image
//.. n. Image
Yukarıdaki kod kısmını if veya case bölümüne almanıza gerek yok.
Biz Image'de yer alan resimleri TDil tipimize göre zaten belirliyoruz.
Kullanıcı avatarı
codder71
Üye
Mesajlar: 117
Kayıt: 10 Tem 2010 07:41

Re: TimageList Kullanımı Sorunu

Mesaj gönderen codder71 »

fesiharslan yazdı:
codder71 yazdı: Her TRectangle nesnesine bir image ve ona göre 2 resim eklenecek

Kod: Tümünü seç

if Dil = TDil.Turkce then 
begin
Image1.Bitmap.Assign(image1.MultiResBitmap.Items[Dil].bitmap);
Image2.Bitmap.Assign(image2.MultiResBitmap.Items[Dil].bitmap);
Image3.Bitmap.Assign(image3.MultiResBitmap.Items[Dil].bitmap);
.
.
.
label1.Text:='Başlat'; //Burda problem yok !!
end
else
if Dil = TDil.İngilizce then 
begin
Image1.Bitmap.Assign(image1.MultiResBitmap.Items[Dil].bitmap);
Image2.Bitmap.Assign(image2.MultiResBitmap.Items[Dil].bitmap);
Image3.Bitmap.Assign(image3.MultiResBitmap.Items[Dil].bitmap);
.
.
.
.
label1.Text:='Start'; //Burda problem yok !!
end;
Doğru.
Bir TRectangle ve içersinde bir Image olacak.
Image Align Client olacak.
Her Image içerisine Türkçe ve İngilizce olmak üzere 2 adet resim olacak.

Kod kısmını ise aşağıdaki gibi yapmanız yeterli olacaktır.

Kod: Tümünü seç

Case Dil of
 TDil.Turkce:
 begin
   label1.Text:='Başlat';
 end;
 TDil.Ingilizce:
 begin
   label1.Text:='Start';
 end;
 end;
Image1.Bitmap.Assign(image1.MultiResBitmap.Items[Ord(Dil)].bitmap);
Image2.Bitmap.Assign(image2.MultiResBitmap.Items[Ord(Dil)].bitmap);
Image3.Bitmap.Assign(image3.MultiResBitmap.Items[Ord(Dil)].bitmap);
İyi çalışmalar

Merhabalar Fesih hocam image nesnelerini if satırına almaya gerek yok enum değer kullandığı için orada gözümden kaçmış ama mantığı doğru anlamışım. Gösterdiğiniz yöntem ve verdiğiniz bilgiler için çok teşekkür ederim ayrıca kitabınızı da sabırsızlıkla bekliyorum. :bravo:

İyi çalışmalar dilerim. :bravo:
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: TimageList Kullanımı Sorunu [Çözüldü]

Mesaj gönderen fesiharslan »

Yardımcı olabildiğime sevindim.
Kitapta gerçekten çok özel ve çok farklı yeni nesil teknoloji ve yeni kod yapıları, IDE özellikleri, kod editörünün bilinmeyen birçok yönünü, mobil uygulama teknolojileri ve platform hassasiyetlerini detaylı olarak ele aldım.
Dualarınızla en kısa sürede tamamlarım, inşallah.
Kullanıcı avatarı
codder71
Üye
Mesajlar: 117
Kayıt: 10 Tem 2010 07:41

Re: TimageList Kullanımı Sorunu [Çözüldü]

Mesaj gönderen codder71 »

Merhabalar
Hocam sizin anlattığınız yöntemi farklı bir kombinasyonda bir yerde uygulamak istedim ama başarılı olamadım. Image nesnesine bir resim ekledim ve lisview'e aktardım ama uygulama çalıştığı zaman resim gelmiyor ama ImageViewer nesnesine resmi direk yükleyip bitmaplara eşitlediğim zaman resim görünüyor. Sizce hata nerde olabilir kodları aşağıda paylaşıyorum;

Kod: Tümünü seç

form1.ListView1.Items.Add.Text:='xxxxxx';
form1.ListView1.Items.Item[Form1.ListView1.Items.Count - 1].Bitmap:=Form1.ImageViewer1.Bitmap; //Resim Görünüyor.

Kod: Tümünü seç

form1.ListView1.Items.Add.Text:='xxxxxx';
form1.ListView1.Items.Item[Form1.ListView1.Items.Count - 1].Bitmap.Assign(image1.MultiResBitmap.Items[0].bitmap); //Resim Görünmüyor.
Şimdiden Teşekkürler hocam iyi çalışmalar.
Kullanıcı avatarı
fesiharslan
Üye
Mesajlar: 591
Kayıt: 20 Eki 2006 11:37
Konum: Erzurum
İletişim:

Re: TimageList Kullanımı Sorunu [Çözüldü]

Mesaj gönderen fesiharslan »

Resimleri ListView'e aktarırken BitmapRef özelliğini kullanın. Ayrıca BeginUpdate ve EndUpdate metodlarını da kullanırsanız, işlemleriniz daha hızlı gerçekleştirilecektir.

Kod: Tümünü seç

form1.ListView1.BeginUpdate; 
form1.ListView1.Items.Add.Text:='xxxxxx';
form1.ListView1.Items.Item[Form1.ListView1.Items.Count - 1].BitmapRef:=image1.MultiResBitmap.Items[0].bitmap;
form1.ListView1.EndUpdate;
Cevapla