1

Konu: Grid te işaretleme yaparken numaratörü arttırma

Form da grid de checkbox ları işaretlerken kaç tane checkbox ı işaretlediğimizi nasıl bulabiliriz ?

Teşekkürler

2

Re: Grid te işaretleme yaparken numaratörü arttırma

* myform.mygrid.afterRowColChange
* grid.RecordSource="gridtable" olduğunu varsayıyoruz
* gridtable (alan1 C(10), alanchk L) gibi olsun
DECLARE kaçtane(1)
kaçtane[1]=0
SELECT COUNT(alan1) FROM gridtable WHERE alanchk INTO ARRAY kaçtane
Myform.Textalansay.Value=NVL(kaçtane[1],0)  && NVL gerekmiyebilir, ne olur ne olmaz diye

VFP9 SP2

3

Re: Grid te işaretleme yaparken numaratörü arttırma

2. Yöntem;

Formuna bir tana Property ekle GridCheckBoxCount gibi

Checkbox için bir sınıf oluştur; ve her tıklandığında sayacını bir artır yada azalt.

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: Grid te işaretleme yaparken numaratörü arttırma

Uğurlu,

Kodla örnek verebilirmisin ?

Teşekkürler

5 Son düzenleyen, ugurlu2001 (06.10.2010 08:51:18)

Re: Grid te işaretleme yaparken numaratörü arttırma

Visual Fox Pro
* Author : Sergey Berezniker

* I was have a small revised for CheckBoxCounterX . Ugur
PUBLIC oform1
 
oform1=NEWOBJECT("form1")
oform1.Show
RETURN
 
DEFINE CLASS form1 AS form
    Top = 0
    Left = 0
    Height = 276
    Width = 504
    DoCreate = .T.
    Caption = "Form1"
    ngridx = 0
    ngridy = 0
    Name = "Form1"
     CheckBoxCounterX = 0
 
    ADD OBJECT grid1 AS grid WITH ;
        ColumnCount = 3, ;
        HeaderHeight = 39, ;
        Height = 216, ;
        Left = 12, ;
        Panel = 1, ;
        Top = 24, ;
        Width = 456, ;
        AllowCellSelection = .F., ;
        Name = "Grid1", ;
        Column1.Width = 134, ;
        Column1.Name = "Column1", ;
        Column2.Width = 111, ;
        Column2.Name = "Column2", ;
        Column3.Width = 62, ;
        Column3.Sparse = .F., ;
        Column3.Name = "Column3"
 
    PROCEDURE grid1.Init
        WITH This.Column3
            .Header1.Caption = "Checkbox"
            .AddObject("Check1","CheckBox")
            .Sparse = .F.
            .CurrentControl = "Check1"
            WITH .Check1
                .Alignment = 2
                .Caption = ""
                .Name = "Check1"
                .Visible = .T.
            ENDWITH
            .RemoveObject("text1")
        ENDWITH
 
    ENDPROC
 
    PROCEDURE Load
        CREATE CURSOR Test ( t1 C(10), t2 C(10), l1 L)
        INSERT INTO Test VALUES ( "Test 1 ", "Str 1", .F.)
        INSERT INTO Test VALUES ( "Test 2 ", "Str 2", .F.)
        INSERT INTO Test VALUES ( "Test 3 ", "Str 3", .F.)
        INSERT INTO Test VALUES ( "Test 4 ", "Str 4", .F.)
        GO TOP
    ENDPROC
 
    PROCEDURE grid1.Click
        LOCAL lnRelCol, lnRelRow, lnWhere
        STORE 0 TO lnWhere, lnRelRow, lnRelCol
        This.GridHitTest(Thisform.nGridX, Thisform.nGridY, @lnWhere, @lnRelRow, @lnRelCol)
        IF lnWhere = 3            && Cell
            IF lnRelCol = 3        && column 3
                This.Columns(lnRelCol).check1.Value = NOT This.Columns(lnRelCol).check1.Value
                IF This.Columns(lnRelCol).check1.value = .T.
                    ThisForm.CheckBoxCounterX = ThisForm.CheckBoxCounterX + 1
                ELSE
                    ThisForm.CheckBoxCounterX = ThisForm.CheckBoxCounterX - 1               
                ENDIF
                WAIT Window STR(ThisForm.CheckBoxCounterX) NoWait
            ENDIF
        ENDIF
    ENDPROC
 
    PROCEDURE grid1.MouseDown
        LPARAMETERS nButton, nShift, nXCoord, nYCoord
        && Save mouse position to use in Grid.Click
        Thisform.nGridX = nXCoord
        Thisform.nGridY = nYCoord
    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ü

6

Re: Grid te işaretleme yaparken numaratörü arttırma

Define Class myGrid as Grid

******************************************************************
    PROCEDURE Click
******************************************************************
              sele 4 
              sakla2=RECNO()
              GO TOP
              COUNT TO .txt2topyazdir.Value FOR yazici=.T.
              GO sakla2

    ENDPROC

EndDefine



KODUNDA
PROCEDURE Click

çalışmadı ?

Neden olabilir ?

Teşekkürler.

7 Son düzenleyen, ugurlu2001 (05.10.2010 10:10:20)

Re: Grid te işaretleme yaparken numaratörü arttırma

Procedure Click ; bir form içinde GUI ile mi tanımlı yoksa kendin KOD ile mi oluşturdun? Eğer Form nesnesi ile menüler den oluşturduysan kodunun çalışması lazım. KOD yazarak oluşturduysan; öncelikle From nesnesinin içerisinde ADD OBJECT ile grid nesnesini forma eklemen gerekiyor; devamında da myGrid.Click() olarak kodlama yaparsan sonuç alırsın.

Kişisel birkaç öneri :

Select 4 yerine Select 'BenimTablom' şeklinde kullan. Hataya yer vermemiş olursun.

Değişken tanımlamalarında, yerel değişkenler için  LOCAL kullanımını alıskanlık haline getir.

"m." önekini değişkenlerinde mutlaka belirt.  Aynı isimli fieldlar kullandığında ( ki bir gün mutlaka çakışıyor ) hatalara karşı önlem almış olursun.

Değişkenleri "m.lcbenimdegiskenim" şeklinde kullan. Kullandığın değişkenin LOCAL olduğunu hatırlamak için "l"; değişkenin tipini hatırlamak için "c" türünde prefixler kullan.

Daha önce TARKAN 'ın bu konuda yazdığı 10-20 sayfalık bir döküman vardı. İşe onu okuyarak başlayabilirsin . Linkini forumdan bulabilirsin.

http://rapidshare.com/files/423206318/V … um_R10.pdf

http://rapidshare.com/files/423209401/I … amming.pdf

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ü

8

Re: Grid te işaretleme yaparken numaratörü arttırma

Grid.Click sadece kolon ve satirlarin bos oldugu alanda calisir. Diger yerlerde oradaki kontrol click'i calisir.

9

Re: Grid te işaretleme yaparken numaratörü arttırma

Kod ekte :

Procedure AfterRowColChange

sorunsuz çalışıyor.

Amacım, Column1 de bulunan check boxı tıkladığımda check işateti (.T.) yaptıysam

COUNT TO .txt2topyazdir.Value FOR yazici=.T.

da bulunan  .txt2topyazdir.Value  yi 1 attırmak, check işatetini kaldırdıysam (.F.) .txt2topyazdir.Value  yi 1 azaltmak.

**************
              sele 4 
              sakla2=RECNO()
              GO TOP
              COUNT TO .txt2topyazdir.Value FOR yazici=.T.
              GO sakla2
**************

kodunu Procedure AfterRowColChange içine koyduğumda bu işlemi yapıyor ama KOLON DEĞİŞTİRMEMİ BEKLİYOR.

Bense mouse ile tikleme esnasında yapmak istiyorum. Bunun için PROCEDURE Click  yaratıp içine koydum ama çalışmadı.

Teşekkürler





******************************************************************
Define Class myGrid as Grid
******************************************************************
*    Top = 62
    Top = 335
    Left = 2
    Height = 310
    Width = 1335
    ColumnCount = 20
    DeleteMark = .t.
    RecordMark = .t.
    ReadOnly = .T.
    RecordSource = "kon9"
    ScrollBars = 3
    GridLineColor = Rgb(192,192,192)
*    BackColor = 255
   
    Procedure Init
        With this
*       Scatter Name This.oRecord Memo

            .Column1.Header1.Caption = 'Yazdır'
            .Column1.Width = 50       
            .Column1.ControlSource = "kon9.yazici"
            .Column1.AddObject("chk1", ;
            "checkbox")
            .Column1.CurrentControl = ;
            "chk1"
            .Column1.chk1.Visible = .T.
            .Column1.chk1.Caption = ""
            .Column1.sparse=.f.
            .Column1.Chk1.Enabled=.t.

            .Column2.Header1.Caption = 'Sıra'
            .Column2.Width = 35       
            .Column2.ControlSource = "kon9.sno"
*            .Column2.BackColor = 255

                                               
        EndWith
    this.SetAll('Enabled',.F.,'textbox')
*    this.SetAll('Enabled',.F.,'CheckBox')
    this.SetAll('DisabledForeColor',0,'textbox')

    EndProc
                 
    Procedure AfterRowColChange
        Lparameters nColIndex
        DoDefault(nColIndex)
        With oForm
     SELE 4
     * gkod=.txtNo.Value
*        BROWSE
            .txt2Sno.Value         = Sno
                         
        EndWith
       Thisform.Refresh()
    EndProc

******************************************************************
    PROCEDURE Click
******************************************************************
              sele 4 
              sakla2=RECNO()
              GO TOP
              COUNT TO .txt2topyazdir.Value FOR yazici=.T.
              GO sakla2
    ENDPROC
   
EndDefine

10 Son düzenleyen, konuka (05.10.2010 22:23:02)

Re: Grid te işaretleme yaparken numaratörü arttırma

Kodu myform.mygrid.column1.check1.InteractiveChange içine yazarsan olur.

Myform.textCheckSay.Value = Myform.textCheckSay.Value + IIF(This.Value,1,-1)

VFP9 SP2

11

Re: Grid te işaretleme yaparken numaratörü arttırma

Konuka,

Koda nasıl ekleyeceğim konusunda yardımcı olabilirmisin ?

Bazı konuları adım adım gidiyorum.

Teşekkürler.

12 Son düzenleyen, konuka (09.10.2010 13:47:03)

Re: Grid te işaretleme yaparken numaratörü arttırma

PROCEDURE check1.InteractiveChange
    ThisForm.textCheckSay.Value = ThisForm.textCheckSay.Value + IIF(This.Value,1,-1)
ENDPROC
kod yazınca BINDEVENT gerekti, diğer soruna bak

VFP9 SP2

13

Re: Grid te işaretleme yaparken numaratörü arttırma

Diğer sorundaki kod a baktım. sadece ilk yüklemede checklenmiş adedi buluyor. sonra işaretlemelerde sayıyı arttırıp azaltmıyor.. ?

14

Re: Grid te işaretleme yaparken numaratörü arttırma

onders yazdı:

Diğer sorundaki kod a baktım. sadece ilk yüklemede checklenmiş adedi buluyor. sonra işaretlemelerde sayıyı arttırıp azaltmıyor.. ?


bizdeki vfp 9. SP 2 - ayrıca Visual-- kodla yazmaktansa direk işleyen bir formun olabiliyor.

yolladığım kodları modi comm komutu ile açılan pencereye yapıştırıp, tamamını seç, sağ tıkla, execute selection yapınca hem sayıcı çalışıyor, hem de diğer sorudaki 3 özellik!

acaba Bindevent mi çalışmıyor ?

VFP9 SP2

15

Re: Grid te işaretleme yaparken numaratörü arttırma

bende vfp 6.0 var.

yolladığım kodları modi comm komutu ile açılan pencereye yapıştırıp (formları kodla yazıyorum. )