1 Son düzenleyen, tiviki (21.07.2007 21:09:39)

Konu: Nesneler Method ekle

Selamlar

runtime durumunda bir objeye method eklenebilir mi ? Bunun bir yolu varmıdır?

Örneğin :

Çalışan bir form üzerinde bir CommandButton var. Bu butona basıldığında
form üzerine yeni bir commandbutton ekleniyor...

thisform.addobject("buton","commandbutton")

istiyorum ki bu yeni nesnenin click event ına nesne yaratıldıktan sonra (runtime)
code atayabileyim ve yeni nesne tıklandığında bu code çalışsın...

Şimdi şunu söyleyebilirsiniz. Class yarat ve clasın event ına codu yaz. Ama sorun şu ki
click even ta konacak kod duruma göre değişebilir....

Umarım sorunumu izah edebildim...
YArdımcı olabilecek arkadaşlara şimdiden teşekkürler

2

Re: Nesneler Method ekle

Versiyon yazmamissin. VFP9 icin birden fazla yolu var.
1) Class yarat, classta event kodun olsun. O classtan obje ekle (runtime'da - VFP6SP3 ve sonrasında gecerli).
2) Normal command button kullan. Click kodunu runtime da yazılan bir class metoduna bindevent ile bagla.

Yapmak istedigini bir daha dusun. Genelde runtime'da ne yazacagini bilmen onceden bilmen demek.

3

Re: Nesneler Method ekle

Hocam yapmak istediğim şu.

Ticari amaçlı bir program yazdım. Zamanla kullanıcılardan farklı farklı istekler gelmeye başladı. Bir kullanıcının istediği başkasına yaramayabiliyor. Buda herkesi mutlu etmek adına programın gereksiz bir çok şey içermesine sebeb oluyordu. Bunu nasıl çözerim diye düşündüm. şöyle bir çözüm buldum.
Kullanıcı arayüzlerini runtime esnasında database deki bilgilere göre yaratmak.
Her objenin classlarını property ve eventlerini database de kaydettim. Form dizaynındaki gibi property formu yaptım. Form dizaynı runtime esnasında hazırlanıyor ve database kaydediliyor. Kullanıcı istediği modülü çalıştırdığında önce database ten objelerin bilgileri okunup form yaratılıyor...
Buraya kadar sorun yok çokta şık oldugunu düşünüyorum. Ama sorun runtime esnasında yazılan ve eventlere atılan procedurelerde onları eventlere atayamıyorum...
Baştan bunu execstript ile çözebileceğimi sanmıştım ama oda olmadı çünkü execstript ile thisform. gibi çalıştıramıyorum meret anlamıyor...
Ev bütün çalışmam tıkandı kaldı...
VFP Versiyon 9.0
Şimdiden Çok teşekkürler

4

Re: Nesneler Method ekle

"execstript ile thisform.gibi "  çalıştırmak için şunu yapmıştım..işe yaramıştı sanırım..

FUNC1(THISFORM)

* exec edilecek kod..
FUNCTION FUNC1
LPARAMETERS XFORM

xform.text1.value="aaa"
**

5

Re: Nesneler Method ekle

Sayın Aydın
Teşekkür ederim işe yaradı

6

Re: Nesneler Method ekle

Execscript() ise yarar ama genelde cozum degil. Nedeni onun calisma ortami memory dahil ozel. O kadar bagimsiz ortamda calisabilecek kodlar icin olabilir.

Onun yerine VFP6SP3'ten beri COMPILE komutu runtime'da gecerli. Bu runtime'da prg, scx, vcx, mnx ... gibi compile edilmesi gereken seyelri yazabilir ve derleyebilirsin demek. Mesela runtime'da bu gecerli:

Visual Fox Pro
text to myClass noshow  

define class myButton as CommandButton
procedure click
   MessageBox( "Runtime'da yaratildim" )
endproc
enddefine
endtext
 
StrToFile( m.myClass, 'myClassLib.prg')
compile myClassLib.prg
 
thisform.NewObject( 'myButton', 'myButton', 'myClassLib.prg')
thisform.myButton.Visible = .t.

Compile form, class vs de var. Yani aslinda VFP'de runtime'da bircok sey yazilabiliyor sadece IDE yok gibi.

Ancak sen anlatirken onlari bir database'de sakladigini soyluyorsun. O database'in icerigini kullanici doldurmuyorsa aslinda sen yazilacaklari design time'da biliyorsun demektir. Amacin ana exe'den ayri tutulacak birsey ise sadece classlarinin oldugu exe yapabilirsin ya da icinden kodlari kaldirilimis bir vcx olarak kullanabilirsin. Ana bu exeden veya vcx'ten class yaratir.
Ya da illa database olsun diyorsan, bir alaninda kodun kendisini degil, compile edilmis halini de tutabilirsin (scx dosyalarindaki objcode fieldi gibi).

ExecScript'in yan etkilerini anlamadan kullanmaya kalkma bence. Onu ilk kez harika bir fikir olarak gorup uyguladigimda burnum surtuldu. Ben de o zaman ogrendim zaten onun calisma ortaminin nasil kendisine ozgun oldugunu.

7

Re: Nesneler Method ekle

Hocam

Bilgilendirmen için teşekkür ederim. Çalışmamda yararlı olacağını düşünüyor.
Bu konu ile ilgili son bir sorun olacak.
Projemi paket haline getirip son kullanıcının makinasına kurduğumda compile etmemde sorun yaşarmıyım.  Sorundan kastım şu son kullanıcıda vfp 9 kurulu olmayacak sadece benim uygulamam olacak. Dolayısı ile compile derlemeyi yinede yaparmı
Teşekkürler

8

Re: Nesneler Method ekle

Senin uygulaman VFP6SP3 veya sonrasi, degil mi? ve calisiyor? O zaman compile da calisir.