1 Son düzenleyen, sasmazali (12.03.2010 13:36:39)

Konu: form içerisindeki bileşenleri bulma

s.a.

form içerisinde koyduğum text list vs. bileşenleri form actif olduktan sonra listelemek mümkiün mü?

şunun için gerekli.
kios çalışmamız var. form açıldığında içerisine eklediğim bileşenleri yakalayıp mousepointer=hide yapmak istiyorum.

her bileşeni adını bir dbf de saklar ve ilk açılışta bunu yapmasını sağlayabilirim ama her eklentide dbf dosyasını güncellemem gerekir. bunun yerine yukardaki yönetemi kullanmak istiyorum.

(formda aradım karşılaşmadım yada yanlış bir isim altında arıyor olabilirim)

2

Re: form içerisindeki bileşenleri bulma

For each xcnt in this.Objects
Wait WINDOW xcnt.name
Next

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

3 Son düzenleyen, ugurlu2001 (12.03.2010 14:08:46)

Re: form içerisindeki bileşenleri bulma

Metin Pişti olduk.

Ali; FOR EACH ile istediğini yapabilirsin.

Visual Fox Pro
RELEASE Loform 

LOCAL loForm As Object
loForm = CreateObject("MyForm")
loForm.Show(1)
READ EVENTS
 
 
DEFINE CLASS MyForm As Form
    Visible = .t.
    Enabled = .t.
 
    ADD Object "MyTextBox1" As textbox WITH ;
        Top = 1, Left = 1, Width = 100, Height = 25, Enabled = .t., Visible = .T.
 
    ADD Object "MyTextBox2" As textbox WITH ;
        Top = 27, Left = 1, Width = 100, Height = 25, Enabled = .t., Visible = .T.
 
    ADD Object "Labe1" As label WITH ;
        Top = 54, Left = 1, Width = 100, Height = 25, caption = "Etiket 1", Enabled = .t., Visible = .T.
 
 
    PROCEDURE INIT && Eğer Nesne txtbox ise enabled = .f. -> Sen istediğin kontrolde istediğini yap
        FOR EACH loControl IN ThisForm.Objects
            IF Lower(loControl.baseclass) == "textbox"
                loControl.Enabled = .F.
            ENDIF
        ENDFOR
    ENDPROC
 
ENDDEFINE
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

4

Re: form içerisindeki bileşenleri bulma

Arkadaslar,
Affiniza siginarak, bu is hem cok daha basit hem de hic o kadar basit degil:)

Eger dogru anladiysam tum objelerde eger varsa MousePointer = 13 olacak. O zaman cok basit:

Visual Fox Pro
thisform.SetAll( "MousePointer", 13 )

Eger boyle degil de form uzerindeki objelerin dolasilmasi gerekiyorsa o zaman ne yazik ki foreach ... endfor ile yapilacak kadar basit degil. Neden degil derseniz, formun icerisinde bir cesit container olan objeler olabilir (container, grid, pageframe, commandgroup ...). O zaman onlarin da iceriginin dolasilmasi gerekecek ( diskteki dizinleri ve alt dizinleri dolasmak gibi ). Bunu yapmak icin temel iki yol var:
1) For ... endfor ile dolasip container tipi birsey buldukca onun da icini dolasmak ( FoxyClasses olanlar global.vcx'te udfObjCollector bu isi yapiyor ve bazi metodlari var ).
2) Onlari dolasmak yerine, eger kendi base classlarimizda bu tip isleri onceden dusunup bir 'dinleyici' yarattiysak formdan sadece bir emir yayinlamak. Bunu yontem ilginc ve bircok yerde isinize yarayabilir:

Visual Fox Pro
* Ornegin kendi textbox classimiz

define class myTextbox as textbox
   TeleKulak = .F.
 
   Procedure Telekulak_Assign( vNewVal )
       if type( m.vNewVal ) <> 'C'
          return
       endif
       local ix,lnMesaj
       lnMesaj = alines(arrMesaj, m.vNewVal, 1+4, ',')
       if m.lnMesaj % 2 <> 0 && mesaji ciftler halinde bekliyorduk, ugrasma don
           return
       endif
       local lcProperty, lcValue
       for ix=1 to m.lnMesaj / 2
             lcProperty = arrMesaj[ (m.ix-1)*2 + 1 ]
             lcValue = arrMesaj[ (m.ix-1)*2 + 2 ]
             if PemStatus( this, m.lcProperty, 5 ) && readonly, hidden kontrolu yok
                   this.AddPropery( m.lcProperty, evaluate( m.lcValue) )
             endif
       endfor
   endproc
enddefine

Diger class tiplerinin de bu procedure'e sahip oldugunu ve form'da bu classlarin kullanildigi dusunursek:

Visual Fox Pro
thisform.SetAll( 'TeleKulak', 'MousePointer,13')


seklinde bir 'yayina' cevap olarak tum o objeler kendi mousepointerlarini kendileri kurar:)

Not: Foxyclasses'ta ayni zamanda udfObjCollector icinde ExecAll() var, o metod tum objeleri dolasip beli ozelliktekilerde bir metod kodu calistirmak icin ( SetAll'un ExecuteAll karsiligi gibi - simdi FFC'de benzeri bir class var galiba).

5

Re: form içerisindeki bileşenleri bulma

herkese çok teşekkür hepsini test edeceğim büyük bir ihtimalle  çetin hocamın verdiği  thisform.SetAll( "MousePointer", 13 ) işimi çözecek
diğer kodlarıda test edip kullanımını saklayacağım sürekli ihtiyacım olan bir şey herkese kolay gelsin