Page 1 of 1

record selezionati

PostPosted: Tue Apr 10, 2007 11:34 pm
by Silvio
usando xbrowse posso selezionare i record

Code: Select all  Expand view
STATIC FUNCTION MultiSelect( oWnd )

   local oChild, oBrw

   DEFINE WINDOW oChild TITLE "MultiSelect browse" MDICHILD OF oWnd

   oBrw := TXBrowse():New( oChild )
   oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROWMS

   oBrw:SetRDD()

   oBrw:CreateFromCode()

   oChild:oClient := oBrw

   ACTIVATE WINDOW oChild ON INIT oBrw:SetFocus()

RETURN NIL




se volessi stampare solo irecord selezionati come potrei fare ?


il problema sussiste solo se uso xbrowse con wbrowse non ho nessun problema perchè ho associato al tasto f5 la selezione del record che aggiungo aadd in un array

Per motivi solo di estetica preferisco usare xbrowse però non volevo rinunciare alla selezione del record per le stampe

Re: record selezionati

PostPosted: Wed Apr 11, 2007 7:05 am
by Enrico Maria Giordano
oBrw:aSelected che ti ho già segnalato non funziona?

EMG

PostPosted: Wed Apr 11, 2007 11:18 pm
by Silvio
è solo che io con wbrowse premendo f5 selezionavo un record ed inserivo nel browse un bmp e qui niente di nuovo



questa funziona inseriva il bmp nel browse ( cosa che in xbrowse non funziona)
cBmp,cCan sono variabili per caricare i resource

cBmp:=LoadBitMap(GetResources(),"C_Pal")
cCan:=LoadBitMap(GetResources(),"C_Roj")

Code: Select all  Expand view
STAT FUNC Ds_Mar(cBmp,cCan)        // Marca
   LOCAL cRet:=""
   cRet:=IF((oDCli)->Status="B",cCan,cRet)
   cRet:=IF(AScan(oT:aSel,(oDCli)->NumCli)<>0,cBmp,cRet)
RETURN (cRet)




quando premevo f5 chiamavo questa funzione :

Code: Select all  Expand view
STAT FUNC Seleziona()     // Seleziona registro
   LOCAL x:=AScan(oT:aSel,(oDCli)->NumCli)
   IF x<>0
      ADel(oT:aSel,x)
      ASize(oT:aSel,Len(oT:aSel)-1)
    ELSE
      AAdd(oT:aSel,(oDCli)->NumCli)
   ENDIF
   oApp():oGrid:SetFocus()
RETURN (NIL)



e poi nella stampa usavo la variabili ot:asel per esempio

Code: Select all  Expand view

CursorWait()
            (oDCli)->(DbGoTop())
            DO WHILE !(oDCli)->(EoF())
               IF (nOpt=1 .AND. AScan(oT:aSel,(oDCli)->NumCli)<>0) .OR. ;
                  (nOpt=2 .AND. (oDCli)->TipCli=cTip)
                  oPrn:CmSay(nRow, 2.0,(oDCli)->RazSoc,oFn1, 8.7)
                  oPrn:CmSay(nRow,11.0,(oDCli)->NumCli,oFn1,,,,2)
                  oPrn:CmSay(nRow,12.0,(oDCli)->EncCom,oFn1)
                  oPrn:CmSay(nRow,17.5,(oDCli)->TelFi1,oFn1)
                  nCli++
                  nRow+=0.4
....




non so se hai capito ...
se uso ogrid:aselected dovrebbe funzionare ma in realtà no

PostPosted: Thu Apr 12, 2007 7:09 am
by Enrico Maria Giordano
Con TXBrowse la gestione della selezione è automatica.

EMG

PostPosted: Thu Apr 12, 2007 10:02 pm
by Silvio
quindi secondo come faccio per non riscrivere tutto ?
cio' che chiamo asel ( array di record selezionati) xbrowse in automatico lo chiama aselected potrebbe funzionare ?

be ho provato ma non mi ha stampato niente ( selezionando solo due record)

ecco il codice :

Code: Select all  Expand view

STAT FUNC Relacion(n)
   LOCAL oPrn, oFn1, oFn2, oFn3,  cSTit
   LOCAL aDes, aHas, nHor,nRow,cForm
   LOCAL nRec ,lPrv:=.t.

     cSTit:="ELENCO GENERALE SOCI  AL "+cf(Date())+"  "+ n
      cSTit:=Alltrim(cSTit)
      nRec:=(oDCli)->(Recno())
      oPrn:=PrintBegin("Elenco Soci...",.F.,lPrv,,.T.)
         DEFINE FONT oFn1 NAME cFont SIZE 0,- 8      OF oPrn
         DEFINE FONT oFn2 NAME cFont SIZE 0,- 8 BOLD OF oPrn
         DEFINE FONT oFn3 NAME cFont SIZE 0,-11 BOLD OF oPrn
         cForm:=Get_Form("101")
        * oPrn:SetPortrait() //verticale
          oPrn:SetLandscape() //verticale
         nHor:=oPrn:nHorzSize()
         nVer:=oPrn:nVertSize()
         nRow:=4.9
         PageBegin()
              CursorWait()
              Title_WIN(oPrn,nHor,nVer,oFn1,oFn2,oFn3,cSTit,1,.T.,cForm)
            oPrn:CmSay(4.2, 1.5,"NUM",oFn1,,,,2)
            oPrn:CmSay(4.2, 2.4,"A",oFn1,,,,2)
            oPrn:CmSay(4.2, 2.7,"T",oFn1,,,,2)
            oPrn:CmSay(4.2, 3.0,"NOMINATIVO",oFn1)
            oPrn:CmSay(4.2, 7.0,"TESSERA",oFn1)
            oPrn:CmSay(4.2, 8.5,"NASCITA",oFn1)
            oPrn:CmSay(4.2,10.6,"TELEFONI",oFn1)
            oPrn:CmSay(4.2,15.5,"INDIRIZZO",oFn1)
            oPrn:CmSay(4.2,20.5,"LOCALITA'",oFn1)
            oPrn:CmSay(4.2,22.5,"CAP",oFn1)
            oPrn:CmSay(4.2,23.5,"PROV.",oFn1)
            oPrn:CmSay(4.2, 24.5,"CARICA",oFn1)
            oPrn:CmSay(4.2, 26.0,"TAGLIA",oFn1)
            oPrn:CmSay(4.2, 28.0,"_",oFn1)
            nCli:=0
            nOpt=1
            CursorWait()
            (oDCli)->(DbGoTop())
            DO WHILE !(oDCli)->(EoF())

               IF (nOpt=1 .AND. AScan(oApp:oGrid:aSelected,(oDCli)->NumCli)<>0)




               oPrn:CmSay(nRow, 1.5,(oDCli)->NumCli,oFn1,,,,2)
               oPrn:CmSay(nRow, 2.4,DaiAtt((oDCli)->Attivita),oFn1,,,,2)
               oPrn:CmSay(nRow, 2.8,DaiTipo((oDCli)->Tipo),oFn1,,,,2)
               oPrn:CmSay(nRow, 3.0,(oDCli)->Nomeintero,oFn1, 8.7)
               oPrn:CmSay(nRow,7.0,(oDCli)->Tessera,oFn1)
               oPrn:CmSay(nRow,8.5,cf((oDCli)->Nascita),oFn1)
               oPrn:CmSay(nRow,10.6,(oDCli)->Tel1,oFn1)
               oPrn:CmSay(nRow,12.6,(oDCli)->Tel2,oFn1)
               oPrn:CmSay(nRow,15.5,(oDCli)->Indirizzo,oFn1)
               oPrn:CmSay(nRow,20.5,(oDCli)->Localita,oFn1)
                 oPrn:CmSay(nRow,22.5,(oDCli)->Cap,oFn1)
                 oPrn:CmSay(nRow,23.5,(oDCli)->Provincia,oFn1)
               oPrn:CmSay(nRow,24.5,(oDCli)->Carica,oFn1)
               oPrn:CmSay(nRow,26.0,(oDCli)->Taglia,oFn1)
               oPrn:CmSay(nRow,28.0,(oDCli)->Sesso,oFn1)
                  nCli++
                  nRow+=0.4
                  IF nRow>=25.5
                     PageEnd()
                     PageBegin()
        Title_WIN(oPrn,nHor,nVer,oFn1,oFn2,oFn3,cSTit,1,.F.,cForm)
            oPrn:CmSay(4.2, 2.0,"NUM",oFn1,,,,2)
            oPrn:CmSay(4.2, 2.7,"T",oFn1,,,,2)
            oPrn:CmSay(4.2, 3.0,"NOMINATIVO",oFn1)
            oPrn:CmSay(4.2, 7.0,"TESSERA",oFn1)
            oPrn:CmSay(4.2, 8.5,"NASCITA",oFn1)
            oPrn:CmSay(4.2,10.6,"TELEFONI",oFn1)
            oPrn:CmSay(4.2,15.5,"INDIRIZZO",oFn1)
            oPrn:CmSay(4.2,20.5,"LOCALITA'",oFn1)
            oPrn:CmSay(4.2,22.5,"CAP",oFn1)
            oPrn:CmSay(4.2,23.5,"PROV.",oFn1)
            oPrn:CmSay(4.2, 24.5,"CARICA",oFn1)
            oPrn:CmSay(4.2, 26.0,"TAGLIA",oFn1)
            oPrn:CmSay(4.2, 28.0,"_",oFn1)
                     nRow:=4.9
                  ENDIF
                 ENDIF
               (oDCli)->(DbSkip())
            ENDDO
            aDes:=oPrn:Cmtr2Pix(nRow+0.3, 1.0)
            aHas:=oPrn:Cmtr2Pix(nRow+0.3,29.0)
            oPrn:Line(aDes[1],aDes[2],aHas[1],aHas[2])
            nRow+=.5
            oPrn:CmSay(nRow,10.5, TRAN(nCli,"9999")+"  Socio(i) in archivio",oFn1,,,,2)
            aDes:=oPrn:Cmtr2Pix(nRow+0.4, 1.0)
            aHas:=oPrn:Cmtr2Pix(nRow+0.4,29.0)
            oPrn:Line(aDes[1],aDes[2],aHas[1],aHas[2])
             nRow+=.5
            oPrn:CmSay(nRow,15.5, " Legenda       - Tipo (3# colonna)  F = Fondatore  O = Ordinario  S = Sostenitore  A = altro       - Attivita' ( 2# colonna)   D = Docente  A = ATA   S = Alunno G = Genitore  E = Esterno ",oFn1,,,,2)

         PageEnd()
         oFn1:End(); oFn2:End(); oFn3:End()
      PrintEnd()
      (oDCli)->(DbGoTo(nRec))
     * oBCli:Refresh()
     RETURN (NIL)




la variabile n di Relacion(n)

mi serve per dare alla funzione l'indice corrente

PostPosted: Fri Apr 13, 2007 7:08 am
by Enrico Maria Giordano
Code: Select all  Expand view
#include "Fivewin.ch"
#include "XBrowse.ch"


FUNCTION MAIN()

    LOCAL oDlg, oBrw

    USE TEST

    DEFINE DIALOG oDlg;
           SIZE 800, 600

    oBrw = TXBrowse():New( oDlg )

    oBrw:SetRDD()

    oBrw:nMarqueeStyle = MARQSTYLE_HIGHLROWMS

    oBrw:bRClicked = { || WQOut( oBrw:aSelected ) }

    oBrw:CreateFromCode()

    ACTIVATE DIALOG oDlg;
             ON INIT oDlg:SetControl( oBrw );
             CENTER

    RETURN NIL


EMG

PostPosted: Sat Apr 14, 2007 12:06 am
by Silvio
grazie forse ho risolto il problema .