Dinamik array sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Dinamik array sorunu

Mesaj gönderen ikra »

Chrometab bileseninde degisiklik yapmam gerekiyor.

Kod: Tümünü seç

tabpoly = array[0..9] of TPoint
yukarida tanimlanmis olan statik array bir fonksyon sayesinde doldurulup poligon noktalari belirlenmis oluyor. Ben bu bilesenden türetme yapip farkli poligon cizimleri yaptirmaliyim. Haliyle statik array tanimlamasindan dinamik arraya gecis yapmam gerekiyor. Dinamik yapip setlength ile genisligi belirtip ayni fonksyondan poligon noktalarini aldigimda, koordinatlar dogru oldugu halde sacma bir sekil meydana cikiyor. Tekrar statige cevirdigimde sorun ortadan kalkiyor.
Neyi gözden kaciriyor olabilirim?
kıdemsiz üye
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Dinamik array sorunu

Mesaj gönderen mkysoft »

TPoint bir pointer olduğu için new denemeden aynı değişkene değer atayıp array'ın elemanlarına set diyor olabilir misiniz?
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Dinamik array sorunu

Mesaj gönderen ikra »

Kullanimi su sekilde

Kod: Tümünü seç

var
  Tab: tabpoly;
begin
  Tab := gettabspoly(x1, y1, x2, y2);
  ...islemler
end;
elbette birden fazla prosedür gettabspoly fonksyonunu kullaniyor. Fakat prosedürlerin paralel zamanda calismadigini göz önünde bulundurursak, islem gören adrese herhangi bir degisikligin set edilmiyor olmasi gerek. Set edildigini düsünecek olursak, statik oldugunda ayni sorunun tekrar etmesi gerekir.
Yaniliyor muyum?
kıdemsiz üye
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Dinamik array sorunu

Mesaj gönderen mkysoft »

gettabspoly fonksiyonunun her seferinde yeni bir nesne dönmesi gerekir, yani içinde new ile yaratılan bir nesne return edilmeli.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Dinamik array sorunu

Mesaj gönderen freeman35 »

array[0..9] bu kısıma yoğunlaş, yani bir counter olması lazım yada arrayin boyutunu (index ini) belirleyen bir yer olmalı. Burayı çözersen, senin dynamic array in boyutunu ayarlayacağın yerde burası olacaktır. Mesala genelde 0 dan 9 a gidilir, ama gavur ya 9 dan 0 a kullandıysa? yada rastgele bir sırayla array in boyutlarına erişiyorsa? Şunu deneyebilirsin initlialize sırasında dynamic array in boyutunu direk 0-9 olarak setle, sen kendin için 10 dan sonrasını kullan, bu sayede diğer kodu karıştırmamış olursun gibi geliyor.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Dinamik array sorunu

Mesaj gönderen ikra »

islemleri sirasiyla listeliyorum.

Kod: Tümünü seç

const
  PolyTabCount = 10;
type  
  //TabPoly = array [0 .. 9] of TPoint; --> Statigi inaktif edip
  TabPoly = array of TPoint; // Dinamik hale getirdim
Array'i isleyen fonksyon

Kod: Tümünü seç

function GetTabsPoly(x1, y1, x2, y2: Integer): TabPoly; //inline;
begin
  SetLength(Result, PolyTabCount); // Dinamik oldugu icin genisligi set ediyorum

  Result[0].x := x1;
  Result[0].y := y2;
  Result[1].x := x1 + 3;
  Result[1].y := y2 - 4;
  Result[2].x := x1 + 11;
  Result[2].y := y1 + 3;
  Result[3].x := x1 + 13;
  Result[3].y := y1 + 1;
  Result[4].x := x1 + 15;
  Result[4].y := y1;
  Result[5].x := x2 - 15;
  Result[5].y := y1;
  Result[6].x := x2 - 13;
  Result[6].y := y1 + 1;
  Result[7].x := x2 - 11;
  Result[7].y := y1 + 3;
  Result[8].x := x2 - 3;
  Result[8].y := y2 - 4;
  Result[9].x := x2;
  Result[9].y := y2;
end;
simdi cizim gerceklesiyor

Kod: Tümünü seç

var
  Tab: TabPoly;
begin
  ... islemler
  Tab := GetTabsPoly(x1, y1, x2, y2);
  TabsCanvas.FillPolygon(Brushes[1], PGPPoint(@Tab), PolyTabCount);
end;
Fakat yukarida da bahsettigim gibi, array statik olursa sorunsuz calisiyor. Dinamik oldugunda ise sacma sapan cizgiler cikiyor.
kıdemsiz üye
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Dinamik array sorunu

Mesaj gönderen SimaWB »

Problem GetTabsPoly fonksiyonunda değil. FillPolygon'da. Dynamic Array zaten kendisi bir pointer'dır. Dolayısıyla siz FillPolygon fonksiyonunda Tab değişkeninin pointer'ını değil kendisini kullanmalısınız:

Kod: Tümünü seç

TabsCanvas.FillPolygon(Brushes[1], PGPPoint(Tab), PolyTabCount);
There's no place like 127.0.0.1
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Dinamik array sorunu

Mesaj gönderen ikra »

Herkese ayri ayri tesekkür ederim.

@SimaWB: sorun bahsettigin yerdeymis. Statigin array'in kendisi, dinamigin ise array'in pointeri oldugunu bu vesile ile ögrenmis oldum.
kıdemsiz üye
Cevapla