Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Nesneleri döngü içerisinde kullanma
#1
Arkadaşlar nesneleri döngü içerisinde kullanma imkanımız var mı?
Örneğin; çok sayıda Image nesnesi kullanmaktayım. Bunları bir for döngüsü içerisinde saydırabilirmiyim? Yani Image1 yerine Image[sayac] gibi.
Cevapla
#2
Oluşturduğunuz nesneleri TObjectList içerisinde tutabilirsiniz.

Yada kendiniz bir tip tanımlarsınız:

type
  Resimler: array of TImage
yada sayısı belli ise
type
 Resimler: array[0..10] of TImage
gibi...
There's no place like 127.0.0.1
WWW
Cevapla
#3
Photo 
(14-04-2017, Saat: 19:48)SimaWB Adlı Kullanıcıdan Alıntı: Oluşturduğunuz nesneleri TObjectList içerisinde tutabilirsiniz.

Yada kendiniz bir tip tanımlarsınız:

type
  Resimler: array of TImage
yada sayısı belli ise
type
 Resimler: array[0..10] of TImage
gibi...

Yazdığınız gibi dizi tanımlayarak kullanmaya çalışıyorum ama başaramadım, hata mesajı alıyorum.


type       //tip tanımlama işlemini nerede yapacağım???          
 Resimler: array[0..10] of TImage

Örneğin bunu yapmasını istedim:
 Resimler[sayac].Visible:=false;
Cevapla
#4
var
 I: Integer;
begin
for I := 0 to Self.ComponentCount -1 do
begin
  if Self.Components[I].ClassType = TImage then
  Begin
     TImage(Self.Components[I]).Visible := False;
  End;
end;
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla
#5
generic collection kullanabilirsin.
WWW
Cevapla
#6
(15-04-2017, Saat: 10:38)dnzmobile Adlı Kullanıcıdan Alıntı: Yazdığınız gibi dizi tanımlayarak kullanmaya çalışıyorum ama başaramadım, hata mesajı alıyorum.
type       //tip tanımlama işlemini nerede yapacağım???          
 Resimler: array[0..10] of TImage

Kod yazdığınız Unit'in üst kısmında type bloğu başlangıcı vardır. Yeni tip tanımlamalarını orada yazabilirsiniz.

Fakat siz sadece formunuz üzerinde bulunan Image'lar üzerinde gezinecek bir yöntem arıyorsanız barutali'nin paylaştığı yöntem daha kolay olabilir sizin için. 

Image'larınızın hepsi aynı TPanel vs. üzerinde ise tüm form elemanlarının olduğu döngü yerine örneğin Panel1 üzerindeki bileşenler arasında arama yapabilirsiniz ;
 
for I := 0 to Panel1.ComponentCount -1 do
begin
 if Panel1.Components[I].ClassType = TImage then
    TImage(Panel1.Components[I]).Visible := False;
end;

Ayrıca Image'ları form üzerine koyduktan sonra Tag değişkenlerini kullanarak her Image'a istediğiniz numarayı atayarak daha sonra ayrıştırma yapabilirsiniz. İstediğiniz Tag'a ait Image'ı bulabilmek için şöyle bir fonksiyon kullanılabilir(Aradığınız Image'ların hepsinin Panel1 üzerinde olduğunu farzediyorum):
function GetImageByTag(TagNo: Integer): TImage;
var I: Integer;
begin
  Result := Nil;
  for I := 0 to Panel1.ComponentCount -1 do
  begin
    if Panel1.Components[I] is TImage then
      if TImage(Panel1.Components[I]).Tag = TagNo then
      begin
        Result := TImage(Panel1.Components[I])
        Break;
      end;
  end;
end;
There's no place like 127.0.0.1
WWW
Cevapla
#7
(14-04-2017, Saat: 18:58)dnzmobile Adlı Kullanıcıdan Alıntı: Arkadaşlar nesneleri döngü içerisinde kullanma imkanımız var mı?
Örneğin; çok sayıda Image nesnesi kullanmaktayım. Bunları bir for döngüsü içerisinde saydırabilirmiyim? Yani Image1 yerine Image[sayac] gibi.

Selam,
Sizin düşündüğünüz şekilde kodlamayı php de yapabilirsiniz hocam, fakat delphi de arkadaşların anlattığı şekilde yapmak mecburiyetindesiniz. Bu arada delphi de şu olsa bu olsa diye yakınan arkadaşlara ilave olayım bende, aşağıda bahsettiğim şekilde kodlama kolaylığı istiyorum bende Smile

diyelim formumuzda Resim1, Resim2 ...... Resim10 isminde imajlarımız var.
var
x:Integer;
begin
for x:=1 to 10 
     do begin
Resim(x).Visible := False;
          end;
end;
WWW
Cevapla
#8
(15-04-2017, Saat: 11:14)barutali Adlı Kullanıcıdan Alıntı:
var
 I: Integer;
begin
for I := 0 to Self.ComponentCount -1 do
begin
  if Self.Components[I].ClassType = TImage then
  Begin
     TImage(Self.Components[I]).Visible := False;
  End;
end;

Anlaşılır ve kolay bir çözüm olmuş. Teşekkürler..
Cevapla
#9
Benim verdiğim son örnekte ClassType yerine is kullandığıma dikkat edin lütfen.

Çünkü; ClassType'ın açıklamasında ( http://docwiki.embarcadero.com/Libraries....ClassType ) şöyle yazıyor:

Avoid using ClassType in application code.
Note: In Delphi code, use the is or as operators instead of ClassType.
There's no place like 127.0.0.1
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  DLL içerisinde FireDac Problemi tecnomaster 1 124 16-03-2024, Saat: 18:05
Son Yorum: delphi.developer
  Memo içerisinde 4 kolonlu tablo tipi string göstermek (String Format) Syntax 4 1.521 05-05-2023, Saat: 11:02
Son Yorum: Bay_Y
  DBGrid'i Çok Fonksiyonlu Kullanma bünyamin68 10 2.692 17-12-2022, Saat: 22:37
Son Yorum: zuluman
  Class Tanımlama ve Kullanma-Not Found Hatası nehirnnn 2 739 08-12-2021, Saat: 12:31
Son Yorum: mrmarman
  Array of Stings içerisinde arama yapma esistem 14 3.356 06-06-2021, Saat: 07:43
Son Yorum: mrmarman



Konuyu Okuyanlar: 1 Ziyaretçi