Objetos dentro de un xBrowse

Post Reply
User avatar
TecniSoftware
Posts: 213
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Objetos dentro de un xBrowse

Post by TecniSoftware »

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
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Post by karinha »

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
User avatar
TecniSoftware
Posts: 213
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Post by TecniSoftware »

Muchas gracias, creo que lo puedo adaptar a xBrowse.

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

Post by TecniSoftware »

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
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Post by karinha »

Hola, se te comprendo:

Code: Select all

****************************************************************************
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
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Post by Daniel Garcia-Gil »

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

#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
TecniSoftware
Posts: 213
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Post by TecniSoftware »

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
Post Reply