Page 1 of 1

Dialogo exactamente debajo de un get

Posted: Fri Aug 09, 2019 5:54 pm
by leandro
Buenas tardes para todos...

Como dice el encabezado, requiero que un dialogo se pinte exactamente debajo de un get... intente de la siguiente manera pero no funciona.

Code: Select all | Expand

FUNCTION coordenadas(oDlg, oObjt)
local nTopR, nLeftR

nTopR     := oObjt:nTop      
nLeftR    := oObjt:nLeft
nAltura   := oObjt:nHeight

DEFINE DIALOG oDlgInf RESOURCE "ORFACT2" OF oDlg

ACTIVATE DIALOG oDlgInf ON INIT oDlgInf:Move(nTopR+nAltura,nLeftR)  
Return nil

Quiero que salga como muestra la linea roja

Image

Re: Dialogo exactamente debajo de un get

Posted: Fri Aug 09, 2019 6:10 pm
by karinha
Yo haria directamente por el editor de recursos WS e no usaria el CENTERED en el ACTIVATE DIALOG.

Re: Dialogo exactamente debajo de un get

Posted: Fri Aug 09, 2019 6:14 pm
by cnavarro
Creo que por ejemplo si miras en .\source\function\xbrgetdt.prg puedes tener un buen ejemplo de ubicacion de lo que necesitas en la function XbrGetDate

Re: Dialogo exactamente debajo de un get

Posted: Fri Aug 09, 2019 8:23 pm
by armando.lagunas
Yo lo uso con una Window para hacer una búsqueda y retorna el código del seleccionado


como se ve:

Image



como lo utilizo y las funciones involucradas:

Code: Select all | Expand


                   REDEFINE  GET oGet VAR cCodSag PICTURE "99999" ID 60 FONT oFont OF oDlg
                   ...
                   ...
                   REDEFINE SBUTTON  ID 47 FILENAME "Search.bmp" OF oDlg ACTION Seek_Productor(oGet,400,150 ) TOOLTIP {"Buscar productor...","Busqueda"}
                   ...
                   ...

//-------------------------------------------------------------------------

STATIC FUNCTION Seek_Productor( oGet, nWidth, nHeight )
 LOCAL oWnd, vLbx, aPoint, cBus, xVal , bRestore, lNormal

 SELECT PA18  ;  __dbZap()                   ; DBAPPEND()
 PA18->NOMB   := "Busqueda por Rut...."      ; DBGOTOP()

    bRestore  := {|| IF( !lNormal, ( oGet:VarPut( xVal ), oGet:SetFocus() ), ), oWnd:End() }
    xVal      := oGet:VarGet()
    cBus      := ""
    lNormal   := .F.
    aPoint    := AdjustWnd( oGet, nWidth, nHeight )

    DEFINE WINDOW oWnd FROM aPoint[1] + 1, aPoint[2] TO aPoint[1] + nHeight, aPoint[2] + nWidth pixel STYLE  nOR( DS_MODALFRAME, WS_POPUP, WS_BORDER )
       @ 0, 0 LISTBOX vLbx  FIELDS PA18->RUTT,PA18->CODI, PA18->NOMB ;
                            HEADER "Rut","Código","Nombre" ALIAS "PA18" FIELDSIZES 70,40,300  SIZE  nWidth,nHeight OF oWnd  ;
                            COLOR CLR_BUSCAR                                                                     ;
                            FONT oApp:aWFont[23] PIXEL ON CHANGE   ( oGet:VarPut( PA18->CODI ), oGet:refresh())  ;
                                                      ON DBLCLICK ( oGet:VarPut( PA18->CODI ), oGet:refresh(), oGet:SetFocus(), oWnd:End() )

       vLbx:bKeyChar   := { |nkey, nFlags| IF(nKey >= 32,(cBus += CHR(nKey)  , BuscarProductor( vLbx, cBus )),),IF(nKey = 8, (cBus := LEFT(cBus,LEN(cBus)-1), BuscarProductor( vLbx, cBus )),) }
       vLbx:bLostFocus := {|| ( oGet:VarPut( PA18->CODI ), oGet:refresh()    , oGet:SetFocus() ) }
       vLbx:bKeyDown   := {|nKey| IF( nKey = 13, (lNormal := .T., eval( bRestore ) ), IF( nKey = 27, (lNormal := .T., eval( bRestore) ), ) ) }

    ACTIVATE WINDOW oWnd ON INIT ( SetTransparent( oWnd, 231 ), oWnd:bLostFocus := {|| oWnd:bLostFocus := nil, eval( bRestore ) } , vLbx:Refresh() ) VALID ( lNormal := .T. )

 RETURN Nil

//-------------------------------------------------------------------------
*
* yo utilizo tOdbcDirect para extraer datos de la DB SQLServer y el Metodo oDbf:Query_All() es propio
* pero básicamente extrae el codigo,rut y el nombre del productor.
*
STATIC FUNCTION BuscarProductor( vLbx, cBus )
 LOCAL oDbf, n
 
 SELECT PA18         ;  __dbZap()

 oDbf:= oApp:oConnect:Query("SELECT TOP 100 PR_Codigo_PK, PR_Rut_PK, PR_Nombre FROM CGE_Productores WHERE PR_Rut_PK LIKE '"+cBus+"%' ORDER BY PR_Rut_PK")
 oDbf:Query_All()
 For n := 1 TO oDbf:nRecord
    SELECT PA18      ;  dbAppend()
    PA18->CODI  := oDbf:aDataAll[n][ 1]
    PA18->RUTT  := oDbf:aDataAll[n][ 2]
    PA18->NOMB  := oDbf:aDataAll[n][ 3]
 Next                ; oDbf:End()
 SELECT PA18         ; DBGOTOP()
 vLbx:UpStable()
 vLbx:Refresh()

 RETURN .T.

//-------------------------------------------------------------------------

 


Espero de que te sirva como ejemplo.

Saludos

Re: Dialogo exactamente debajo de un get

Posted: Fri Aug 09, 2019 8:29 pm
by leandro
Gracias por el dato Cristobal...

Armando, exactamente eso es lo que busco hacer, solo que voy a crear el diálogo desde recursos.

Muchas gracias a los dos por su ayuda, Asi quedo el código:

Code: Select all | Expand


FUNCTION coordenadas(oDlg, oGet)
local nTopR, nLeftR, nAltura
local aPoint

nTopR     := oGet:nTop      
nLeftR    := oGet:nLeft
nAltura   := oGet:nHeight

aPoint := { nTopR+nAltura, nLeftR }
aPoint = ClientToScreen( oDlg:hWnd, aPoint )

DEFINE DIALOG oDlgInf RESOURCE "ORFACT2" OF oDlg
   
    REDEFINE BUTTON oBtn ID 4001 OF oDlgInf ACTION oDlgInf:end()
ACTIVATE DIALOG oDlgInf ON INIT oDlgInf:SetPos( aPoint[ 1 ], aPoint[ 2 ] )
Return nil
 


Image

Re: Dialogo exactamente debajo de un get

Posted: Fri Aug 09, 2019 8:35 pm
by leandro
Armando me surge una pregunta mas....

Como hago para colocarle algo de transparencia al dialogo?, puse la clausula SetTransparent( oDlgInf, 500 ), pero no funciona.

Code: Select all | Expand

DEFINE DIALOG oDlgInf RESOURCE "ORFACT2" OF oDlg
   
    REDEFINE BUTTON vbot20 ID 4001 OF oDlgInf ACTION oDlgInf:end()
ACTIVATE DIALOG oDlgInf ON INIT (SetTransparent( oDlgInf, 500 ),oDlgInf:SetPos( aPoint[ 1 ], aPoint[ 2 ] ) )


Sabes que debo hacer?, debo cambiar alguna propiedad al dialogo?

Re: Dialogo exactamente debajo de un get

Posted: Fri Aug 09, 2019 8:57 pm
by cnavarro

Re: Dialogo exactamente debajo de un get

Posted: Fri Aug 09, 2019 9:10 pm
by Armando
Leandro:

Yo lo defino así

Code: Select all | Expand


    DEFINE DIALOG oDlg RESOURCE "QryTrf" OF oWindow ICON oIcono FONT oFont;
        BRUSH oBrush TRANSPARENT TITLE "Crear archivo intermedio para timbrar CFDIs v 1.0M54"

        oDlg:nOpacity    := 250 // Entre mas alto el valor es menos transparente (Más opaco)
….
….
 


Saludos

Re: Dialogo exactamente debajo de un get

Posted: Sat Aug 10, 2019 12:38 am
by leandro
muchas gracias Armando :D

Re: Dialogo exactamente debajo de un get

Posted: Sat Aug 10, 2019 12:40 am
by joseluisysturiz
Para Armando Laguna...Disculpen que me coleer en este tema, queria preguntarle Armando Laguna si por casualidad tendra un sample de como imprimir con TGRAPH en una misma hora un grafico y a su ves un browse con la data que se grafica, vi algunos de tus temas de grafica y debo felicitarte por tus juegos de colores y disenos...y veo que has manejado bastante lo de grafica con TGraph, bastante agradecido de antemano..si lo deseas mi correo es joseluisysturiz@yahoo.com, espero sugerencia e ideas, gracias.

Re: Dialogo exactamente debajo de un get

Posted: Mon Aug 12, 2019 3:54 pm
by armando.lagunas
Jose Luis:

no entiendo bien, pero al imprimir un gráfico y los datos que construyen la gráfica yo lleno una dbf de paso con los resultados y al mismo tiempo el array que se asigna a la grafica lo hago asi:

Code: Select all | Expand


//--- utilizo todbcdirect para obtener los datos de mi db sqlserver   "oDbf:Query_All()" es propia, pero basicamente solo obtengo los datos que necesito de una forma mas rápida

STATIC FUNCTION LlamarDatos( oBrw, oGraph  )
 LOCAL oDbf, n, nTot, aTemAct, aTemVis, aTempX

 aTemAct         :=  {}                            ;   aTempX       := {}
 aTemVis         :=  {}                            ;   nTot         := {0,0,0}
 oGraph:aSeries  :=  {}                            ;   oGraph:aData := {}
 SELECT PA12          ;   __dbZap()

  oDbf := oApp:oConnect:Query("SELECT Convert( VarChar, TE_Fecha, 103 ), TE_Temperatura_Camara, TE_Temperatura_Visor, TE_Camara, TE_Estado, TE_Camara_FK FROM CGE_Temperaturas_Camara WHERE TE_Camara='"+SUBSTR(cCamara, 1, 2)+"' AND TE_Temperatura_Camara <> '0' AND YEAR(TE_Fecha)='"+cAnoEs+"' ")
  oDbf:Query_All()
 IF oDbf:nRecord > 0
    For n := 1 TO oDbf:nRecord
        SELECT PA12   ;   dbAppend()
        PA12->FECH := CTOD(oDbf:aDataAll[n][ 1])        ;       PA12->TCAM := oDbf:aDataAll[n][ 2]
        PA12->TCON := oDbf:aDataAll[n][ 3]              ;       PA12->CCAM := oDbf:aDataAll[n][ 4]
        PA12->ESTA := oDbf:aDataAll[n][ 5]              ;       PA12->CAMA := oDbf:aDataAll[n][ 6]
        PA12->TOTA := IF(PA12->TCON = 0, PA12->TCAM, ( ( PA12->TCAM + PA12->TCON ) / 2 ) )
        AADD( aTemAct ,  PA12->TCAM )                   ;       AADD( aTempX, "·" )
        AADD( aTemVis ,  PA12->TOTA )
    Next              ;  oDbf:End()
 ENDIF

 SELECT PA12
 dbGotop()

 oGraph:aSeries := { { " T° Real", nRGB(200, 68, 10) , , } , { " ~x Prm", nRGB( 34,177, 76 ), , } }
 oGraph:aData   := { aTemAct , aTemVis }
 oGraph:SetYVals(  aTempX  )
 oGraph:Refresh()
 oBrw:Refresh()                 ;   oBrw:MakeTotals()   ;   oBrw:Gotop()      ;  oBrw:SetFocus()

 RETURN .T.


 


al imprimir uso un simple reporte

Code: Select all | Expand



STATIC FUNCTION ImprimeTemperatura( oGraph )
 LOCAL oRpt, oFont[3], oPrn, aPos, aSiz, nContador

 SET 3DLOOK OFF
 PRINTER oPrn PREVIEW

 IF EMPTY( oPrn:hDC )
     RETURN NIL
 ENDIF

 aPos:=oPrn:Cmtr2Pix(1.0,12.5)
 aSiz:=oPrn:Cmtr2Pix(9.0, 5.0)

 oPrn:SetPage( 1 )   // 1=Papel Letter 8 1/2 x 11 in / 9=A4 210 x 297 mm

 oPrn:cDocument := "Temperaturas registradas"
 nContador      := 0

 DEFINE FONT  oFont[1] NAME "Roboto"      SIZE 0,-10
 DEFINE FONT  oFont[2] NAME "Roboto"     SIZE 0,-12  BOLD
 DEFINE FONT  oFont[3] NAME "Roboto"    SIZE 0,-6

 SELECT PA12 ; DBGOTOP()

 REPORT oRpt TITLE  " "," "," "," "," ","TEMPERATURAS REGISTRADAS EN "+cCamara,"HISTORICO POR TEMPORADA"," "," "," " LEFT ;
    HEADER oGraph:Print(oPrn,aPos[1],aPos[2],aSiz[1],aSiz[2]), oApp:cEmpresa, oApp:cDireccion, oApp:cCiudad, oApp:cTelefono   ;
    FOOTER ALLTRIM(oApp:cSigEmp)+" "+oApp:cRut+" Página Nro : "+STR(oRpt:nPage,3,0)+" ( Fecha :"+DTOC(ServerDate())+" Hora : "+SUBSTR(ServerTime(),1,5)+" )",__MAIN+" "+__VERSION+oApp:cVersion+" Proc.: ["+MAINPRO+" ver."+VERSIONPRO+"]" CENTER ;
    FONT  oFont[1], oFont[2], oFont[3]                                   ;
    TO DEVICE oPrn

    GROUP ON PA12->ID     HEADER  "Grados Celcius (°C)" FOOTER "End of File"                     FONT 2

    COLUMN TITLE "Fecha"          ,"de Registro"      DATA  PA12->FECH                           FONT 1 SIZE  20
    COLUMN TITLE " "              ,"Estado"           DATA  PA12->ESTA                           FONT 1 SIZE  45
    COLUMN TITLE " "              ,"Registro"         DATA  PA12->TCON PICTURE "@E 9999.99"      FONT 1 SIZE  12 CENTER GRID
    COLUMN TITLE " "              ,"Visor"            DATA  PA12->TCAM PICTURE "@E 9999.99"      FONT 1 SIZE  12 CENTER GRID
    COLUMN TITLE " "              ,"Promedio"         DATA  PA12->TOTA PICTURE "@E 9999.99"      FONT 1 SIZE  12 CENTER GRID

 END REPORT

 IF oRpt:lCreated
       oApp:SetReportStandard ( oRpt )
       oRpt:bStartRecord       := {|| IIF( nContador = oApp:nConSep, ( oRpt:NewLine(), oRpt:Separator(), nContador := 1 ), ++nContador ) }
       oRpt:oTitle:aFont [6]   := {|| 2 }
       oRpt:oFooter:aFont[2]   := {|| 3 }
       oRpt:Stabilize()
 ENDIF

 ACTIVATE REPORT oRpt ON STARTGROUP oRpt:NewLine() ON ENDGROUP oRpt:NewLine()

 AEval( oFont, {|e| IIF(e!=Nil, e:End(), Nil )} )

 SELECT PA12 ; DBGOTOP()

 RETURN Nil


 


resultado:

Image

saludos!

Re: Dialogo exactamente debajo de un get

Posted: Mon Aug 12, 2019 7:00 pm
by joseluisysturiz
A.Laguna, ya creo vi lo que me hacia falta, lo que no tenia idea era como agregar la grafica en el reporte, pero creo que esto es lo que necesitaba

HEADER oGraph:Print(oPrn,aPos[1],aPos[2],aSiz[1],aSiz[2])

la parte de los datos para generar la grafica no tengo problemas ya que creo un xbrowse con un array al igual que tu, voy a guiarme por tu ejemplo y cualquier duda comento, saludos, gracias... :shock:

Re: Dialogo exactamente debajo de un get

Posted: Tue Aug 13, 2019 1:41 am
by joseluisysturiz
En relacion al tema de la grafica que le pregunte a Armando Laguna, he logrado esto, gracias... :shock:

viewtopic.php?f=6&t=37627#p224921