1 Son düzenleyen, aydinufuk (20.09.2008 07:42:21)

Konu: formda class tanimlama

Merhaba arkadaslar,
Bi formda yeni class tanimlamasi (kullanici classları yapmak mümkünmüdür ? Mümkün değilse bir prg dosyasında tanımladığım class lari formda nasil kullanirim ?

bir basit cizim işlemi için bir noktanin x,y,z degerlerini içeren bir class nasil tanimlanir?
bu klasstan turetilmis  iki nokta classı içeren bir doğru class i nasıl tanımlanir ? basit bir örnek çok işimi yarar.

Şimdiden teşekkürler...

2 Son düzenleyen, cetinbasoz (20.09.2008 12:36:19)

Re: formda class tanimlama

Formda runtime esnasinda yeni class yaratilabilir, yeni kod yazilabilir vs. Ancak yazacagin kodu zaten biliyorsan onu runtime'a saklamanin, formda filan yazmanin anlami da yok. Senin dedigin sekilde class/prg filan yazmayi ben sadece ufak bir exe ile musterinin makinesinde 'VFP kullanmak' icin yaptim (acil durumlarda yerinde bazi seyleri gormek icin sadece).

Asagidaki gibi yazip kullanabilirsin:

* Form'da bir yer:

Visual Fox Pro
o = NewObject('Line3d', 'GeoClassLib.prg', '', 0, NewObject('Point3d', 'GeoClassLib.prg', '',3,4,0))

messagebox( o.P2.X )
messageBox( o.Length() )

* GeoClassLib.prg

Visual Fox Pro
Define Class Point3D As Custom

  X = 0
  Y = 0
  Z = 0
  Procedure Init(tnX, tnY,tnZ)
    This.X = Evl(m.tnX, 0)
    This.Y = Evl(m.tnY, 0)
    This.Z = Evl(m.tnZ, 0)
  Endproc
Enddefine
 
Define Class Line3d As Custom
  P1 = Null
  P2 = Null
  Procedure Init(toPoint1, toPoint2)
    This.P1 = IIF(TYPE('m.toPoint1') = 'O', m.toPoint1, Newobject("Point3D", This.ClassLibrary) )
    This.P2 = IIF(TYPE('m.toPoint2') = 'O', m.toPoint2, Newobject("Point3D", This.ClassLibrary) )
  Endproc
  Procedure Length
  return Sqrt( ;
    abs(this.P1.X - this.P2.X)^2 + ;
    abs(this.P1.Y - this.P2.Y)^2 + ;
    abs(this.P1.Z - this.P2.Z)^2 )
endproc
Enddefine

Not: Length prosedurune guvenme bu yasta yanlis hatirliyor olabilirim.

3 Son düzenleyen, aydinufuk (20.09.2008 13:58:27)

Re: formda class tanimlama

Cetin,
bu ornek kodlar kurguyu anlamam icin bana yeterli. procedurleri terkrar kontrol eder ya da yazarim.
Kurgu olarak senin yaptığın gibi class ları bir prg de toplamak. gerektiğinde formdan çağırmak en sağlıklı yöntem gibi gözüküyor doğrumudur ? Yoksa yanlış mı anladım. Ya da doğrusu ne? bir vcx de tanımlayıp forma o vcx claslarını eklemek mi? sonuçta hepsini bir exe haline getireceğim. özetle sen olsan nasık kurgulardın smile

şimdiden tesekkur ederim..

4

Re: formda class tanimlama

sevgili aydinufuk
152. mesajını yollamış biri olarak sorunu anlayamadığımı düşünmeye başladım.

Hepimizin kendimize özgü program stili var.
sık kullandıklarımızı klas haline getirip orada burada kullanıyoruz.

ben her projede datayı bir cursora çekerim, gride bağlarım.
örneğin bir "griddenexcelyap" klasım var, onu forma yapıştırdığım zaman, grid içeriğini excele döker - aynı klastaki çizgi komutları ile de formatı ayarlarım.

Bazen Çetin B. kod şeklinde yazdıklarını veya başkaca bulduğum kodları da gene "custom class" lar yaptım, onları da gene ihtiyacıma göre formlara yapıştırıyorum. (custom class yapmayı bilmediğim zaman, container bazlı bir klas yapıp ona özellikler yüklüyordum :]

Yani bütün klasları bir veya birkaç harici procedurda tutmuyoruz, (forum adına konuşmuş olmayayım) daha ötesi galiba bu yöntemi Çetin B. tavsiye de etmiyor.

VFP9 SP2

5

Re: formda class tanimlama

konuka,
kuşkusuz hepimizin kendine özgü bir yöntemi var. zaten foxpro da veya başka dillerde de çözüme ulaşmanın çoğu zaman birden çok yolu var. Benim çetine sorduğum eğer runtime da class oluşturmayı önermiyorsan önerin nedir sorusu. Bende çoğu zaman class kullandiğımda senin gibi çalışırım. Bir vcx yaratir ordanda gerekli olanları forma yapıştırırım. Yada bazıları prg dosyalarında (birden çok prg olabilir) classlarını tanımlar cetinin anlattigi gibi gerektiğinde newobject() ile kullanıma sokar. cetine sorum  sen olsaydın bu durumda neyi tercih ederdn sorusudur. Deneyim önemlidir. özetle sorum budur.
cetin derki
"Formda runtime esnasinda yeni class yaratilabilir, yeni kod yazilabilir vs. Ancak yazacagin kodu zaten biliyorsan onu runtime'a saklamanin, formda filan yazmanin anlami da yok. Senin dedigin sekilde class/prg filan yazmayi ben sadece ufak bir exe ile musterinin makinesinde 'VFP kullanmak' icin yaptim (acil durumlarda yerinde bazi seyleri gormek icin sadece).

Asagidaki gibi yazip kullanabilirsin:"
bu cümlesini tam anlamadım açmasını istedim özetle. verdiği örnek iyi bir yöntemidir yoksa önermediği ama benim işimi görecek bir yöntemin tarifimidir? anlamak istediğim budur.

6

Re: formda class tanimlama

Sorunu dogrudan form icinde class kodu yazmanin yolu var mi diye anladim. Yolu var ama gerek yok demek istedim.
Ister prg ister vcx kullan pek onemli degil, prg bana daha rahat geliyor sadece.

7

Re: formda class tanimlama

sagol cetin. verdigin bilgi epey isime yaradı.