Page 1 of 1

record selezionati

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

Code: Select all | Expand

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

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

EMG

Posted: 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

 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

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


 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

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

EMG

Posted: 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


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,"SEX",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,"SEX",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

Posted: Fri Apr 13, 2007 7:08 am
by Enrico Maria Giordano

Code: Select all | Expand

#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

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