Objetos dentro de un xBrowse

Objetos dentro de un xBrowse

Postby TecniSoftware » Tue Oct 07, 2008 2:52 pm

Amigos:

Mi necesidad es hacer que una celda de un xBrowse tenga un efecto Blink o parpadee un texto depende de una variable lógica o campo lógico de un dbf. Es posible esto?

Otra:
Se podra meter un objeto de la clase TDSay en una celda de xbrowse ???


Bienvenida cualquier sugerencia!

Muchos saludos y gracias de antemano.-
Last edited by TecniSoftware on Wed Oct 08, 2008 7:30 pm, edited 1 time in total.
Alejandro Cebolido
Buenos Aires, Argentina
User avatar
TecniSoftware
 
Posts: 235
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Postby karinha » Tue Oct 07, 2008 3:08 pm

Hola,

Mira se sirve:

http://www.fivewin.com.br/exibedicas.asp?id=887

Otra:
Se podra meter un objeto de la clase TDSay en una celda de xbrowse ???

Creo que no. Pués DSAY.PRG és solo para SAYS en dialogos.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7860
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Postby TecniSoftware » Tue Oct 07, 2008 3:34 pm

Muchas gracias, creo que lo puedo adaptar a xBrowse.

Muchos saludos!
Alejandro Cebolido
Buenos Aires, Argentina
User avatar
TecniSoftware
 
Posts: 235
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Postby TecniSoftware » Tue Oct 07, 2008 3:54 pm

Como se podria mejorar el tiempo en que parpadea el texto?

Originalmente la funcion hace

If Val(Right(Time(),2)) % 2 == 0

lo que hace 1 parpadeo por segundo y yo quisiera que lo haga mas rápido.

Se me ocurrió que haga

If HB_RANDOMINT( 1, 999999 ) % 2 == 0

pero el parpadeo no es constante. Alguna idea ???


Saludos!
Alejandro Cebolido
Buenos Aires, Argentina
User avatar
TecniSoftware
 
Posts: 235
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Postby karinha » Tue Oct 07, 2008 4:04 pm

Hola, se te comprendo:
Code: Select all  Expand view  RUN
****************************************************************************
static procedure OnInit()
****************************************************************************
*
* Executar tarefa ao iniciar o dialog
* Parametros: nenhum
* Retorno: Nenhum
*
* Autor: Anderson
* 05/04/2008 - 09:38:53
*
****************************************************************************

   Define   Timer     oTmr    ;
            Interval  300     ;
            Of        oDlg    ;
            Action    (oBrw:Paint(),oBrw:Refresh(),oBrw:UpStable())
           
   Activate Timer oTmr

Return Nil
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7860
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Postby Daniel Garcia-Gil » Tue Oct 07, 2008 5:21 pm

existe una forma de hacerlo, lo que pasa es que funciona si la celda esta activa, me imagino que no es eso lo que buscas, pero igual lo menciono
esto lo obtube de un post anterio...
modificando algunas lineas y eliminando otras, etc...
http://forums.fivetechsoft.com/viewtopic.php?t=10981
Code: Select all  Expand view  RUN
#include "FIVEWIN.CH"
#INCLUDE "XBROWSE.CH"
#INCLUDE "DSAY.CH"
#include "Common.ch"


PROCEDURE TEST( cDep )
**************
LOCAL Arr[0]
LOCAL oDlg , oBrw , oBut
LOCAL lNieuw := .F.
local aWnd[ 2 ]

   AADD( Arr, {"ESTO ES UNA PRUEBA DSAY" } )
   AADD( Arr, {"segunda prueba" } )
      
   
   define window aWnd[ 1 ] title "Prueba DSAY en xBrowse" of dato:oWnd   mdichild no sysmenu NOZOOM
      
   define    dialog aWnd[ 2 ] of aWnd[ 1 ] resource "PRUEBA"
      

  oBrw := TXBrowse():New( aWnd[ 2 ] )

  oBrw:CreateFromResource( 400 )
  oBrw:SetArray( Arr )
   
   oBrw:aCols[ 1 ]:cHeader      =      "ARRAY PRUEBA DSAY"

   IF ! __ObjHasData(oBrw:aCols[1],"OBRWOBJ")
      __OBJADDDATA(oBrw:aCols[1],"oBrwObj")
   END

    REDEFINE DYNAMIC SAY oBrw:aCols[1]:oBrwObj VAR oBrw:aArrayData[ oBrw:nRowSel ]  ID 402 OF aWnd[ 2 ];
    horizontal SCROLL SPEED  50 WRAP

     oBrw:bLDblClick := {||ActivateoBrwDlg(oBrw , aWnd[ 2 ])}   
      
   REDEFINE BUTTONBMP oBut ID 300 OF aWnd[ 2 ] bitmap "salir";
    ACTION ( aWnd[ 1 ]:End() ) ;
   tooltip "Salir del Módulo" prompt "Salir" TOP
   
   ACTIVATE DIALOG aWnd[ 2 ] nowait;
    ON INIT ( aWnd[ 2 ]:move( 0,0 ),;
                      oBrw:SetFocus(), ;
                      AEVAL(oBrw:aCols,{|oCol|IIF(IsObJect(oCol:oBrwObj),oCol:oBrwObj:Hide(),) }) );
    VALID  IIF(GETKEYSTATE(VK_ESCAPE) ,( ActivateDlg(aWnd[ 2 ],oBrw) , .F.), .T. )
   
   activate window aWnd[ 1 ] on init aWnd[ 1 ]:SetSize(aWnd[ 2 ]:nWidth, aWnd[ 2 ]:nHeight )

RETURN

********************************************************************************************************************************
STATIC PROCEDURE ActivateoBrwDlg(oBrw,oDlg)
*******************************
LOCAL   nRow
LOCAL   nCol
lOCAL nWidth
LOCAL nHeight
LOCAL nKol //:= oBrw:nColSel
LOCAL x
LOCAL oCol , i , Obj , Gehi
LOCAL aDisPlay
LOCAL Self := HB_QSelf()
Nr   := oBrw:nArrayAt
nKol := oBrw:nColSel
FOR EACH Obj IN oDlg:aControls
   Obj:Disable()
NEXT
nRow    := ( ( oBrw:nRowSel - 1 ) * oBrw:nRowHeight ) + oBrw:HeaderHeight() + 2 + oBrw:nTop
nHeight := oBrw:nRowHeight - 4
aDisPlay := oBrw:GetDisplayCols()
FOR EACH oCol IN oBrw:aCols
   IF IsObject(oCol:oBrwObj)
      i := Hb_EnumIndex()
      WITH OBJECT oCol
         nCol    := :nDisPlayCol + 2 + oBrw:nLeft
         nWidth  := :nWidth - 4
         x := oBrw:aArrayData[Nr,oCol:nCreationOrder]
         IF __ObjHasMethod(:oBrwObj,"VARPUT") 
            :oBrwObj:Varput(x)
            :oBrwObj:Refresh()
         END
         IF (i IN aDisplay)
            IF (i IN aDisplay) .AND. i == aDisplay[1]     
               Obj := :oBrwObj
               Gehi := i
            END
            :oBrwObj:Enable()
            :oBrwObj:Move(nRow, nCol, nWidth, nHeight, .t. )
            :oBrwObj:Show()
            IF i == nKol                                 
               Obj := :oBrwObj
               Gehi := i
            END
         END
      END
   END
NEXT
IF ! IsNil(Obj)
   Obj:Setfocus()
END
RETURN

********************************************************************************************************************************
STATIC PROCEDURE ActivateDlg(oDlg,oBrw)
***************************************
LOCAL oCol , i , Obj
LOCAL Nr

IF oDlg:aControls[1]:lActive     
   oBut:Setfocus()
   return
END
FOR EACH Obj IN oDlg:aControls
   Obj:Enable()
NEXT

FOR EACH oCol IN oBrw:aCols
   IF IsObject(oCol:oBrwObj)
      oCol:oBrwObj:Hide()
   END
NEXT
oBrw:setFocus()
RETURN
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Postby TecniSoftware » Wed Oct 08, 2008 5:48 pm

Con las lineas de código que posteó karinha ( muchisimas gracias! ) y algunas modificaciones y simplificaciones, elaboré otro ejemplo en el que metí al xbrowse 2 objetos y que pasan a formar parte del mismo: Un objeto de la clase TDSay() y un TSlider() y los conviné con una dbf normal.

Cosillas:
- El dbf es CUSTOMER.DBF y esta en el dir samples de FW
- Los objetos solo se visualizan el la linea seleccionada
- El ejemplo solo me funciona con un xBrowse dentro de un dialog, sería excelente hacerlo funcionar en una una ventana mdichild.
- Al aparecer el dialog, si no se toca nada, no se ven los objetos, pero
al mover el puntero se podrán ver. No he logrado que los muestre al inicio.
- El slider, si bien se actualiza en funcion del campo AGE de la dbf, no he
logrado moverlo
, ya que mi intencion era modificar datos como se puede ver en ON CHANGE. Alguien sabe por que no se puede mover?

En teoría, se podría llegar a colocarle casi cualquier objeto en una linea al xbrowse.
En fin, me parecio interesante y estaría bueno que se lo pudiera
perfeccionar.

Link: http://www.mediafire.com/download.php?2mjmgdmnkzd

Muchos saludos!
Espero sus comentarios.
Alejandro Cebolido
Buenos Aires, Argentina
User avatar
TecniSoftware
 
Posts: 235
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 59 guests