Record'dan diziye

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
zambak
Üye
Mesajlar: 8
Kayıt: 21 Eki 2006 02:05

Record'dan diziye

Mesaj gönderen zambak »

İyi gunler.
İki Record'im var.

a=record
x:integer;
end;

b=record
y:integer;
end;

var
R1:a;
R2:b;
dizi:array[1..2]of ?????


dizi[1]:=R1;dizi[2]:=R2;
Bu Recordlar'ı bu bicimde diziye aktarabilir miyiz?
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Evet aktarabiliriz. Ancak dizi degil TList'e aktarmaniz gerekiyor (yanilmiyorsam)

Kod: Tümünü seç

type
 a=record
 x : integer;
end;

type
 b=record
 y : integer;
end;

Kod: Tümünü seç

var
R1 : a;
R2 : b;
Liste : TList;
begin        
       R1.x = 500;
       R2.y = 300;
       Liste := TList.Create;
       Liste.Add(a);
       Liste.Add(b);
end;

Kullanimi

Asagidaki kodu denemeden yazdim, is operatoru TForm classi icin duzgun calisiyor ancak recordlar icin nasil calisir bilemiyorum.

Kod: Tümünü seç

For i := 0 to Liste.Count -1 do
Begin
      if Liste[i] is A then           A(Liste[i]).x := 10;
      if Liste[i] is B then           B(Liste[i]).y := 15;
End;
Kolay gelsin.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Record'dan diziye

Mesaj gönderen sabanakman »

zambak yazdı:İyi gunler.
İki Record'im var.

a=record
x:integer;
end;

b=record
y:integer;
end;

var
R1:a;
R2:b;
dizi:array[1..2]of ?????


dizi[1]:=R1;dizi[2]:=R2;
Bu Recordlar'ı bu bicimde diziye aktarabilir miyiz?
????? olan yere a ya da b tiplerinden birini direk yazabilirsin ama hangi tipi verdiysen diğer tipten atama yapamayacaksın. Küçük bir hile dışında tabiki :twisted:

Kod: Tümünü seç

var
R1:a;
R2:b;
dizi:array[1..2]of a;
begin
 r1.x:=2; r2.y:=9;
 dizi[1]:=r1;
 dizi[2]:=a(r2);//<-r2 a tipiymiş gibi gösterilir.
 showmessage(Format('%d %d',[dizi[1].x,dizi[2].x]));
end;
burada tip dönüşümünün tasarımımızdan dolayı sorun çıkarmayacağını bildiğimizden bu şekilde tip çevirdik. yoksa her tipi bu şekilde birbirine çeviremeyiz. Çevirsek bile bazı sorunlar çıkabilü daş düşebilüü. :)
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla