Sombrear linea cuando el mouse esta sobre ella
- FranciscoA
- Posts: 2164
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Sombrear linea cuando el mouse esta sobre ella
Amigos del foro,
Cual es la manera de sombrear una linea en XBrowse cuando el puntero del ratón está sobre ella?
Es decir, tenemos la linea actualmente seleccionada con sus colores respectivos, pero al mover el mouse queremos que la linea sobre la que pasa se pinte de un color diferente.
Alguien con un ejemplo?
Gracias.
Cual es la manera de sombrear una linea en XBrowse cuando el puntero del ratón está sobre ella?
Es decir, tenemos la linea actualmente seleccionada con sus colores respectivos, pero al mover el mouse queremos que la linea sobre la que pasa se pinte de un color diferente.
Alguien con un ejemplo?
Gracias.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
- cnavarro
- Posts: 6568
- Joined: Wed Feb 15, 2012 8:25 pm
- Location: España
- Has thanked: 4 times
- Been thanked: 5 times
Re: Sombrear linea cuando el mouse esta sobre ella
Francisco
Yo lo he intentado en varias ocasiones, sin exito
Debería ser tan sencillo como poner una funcion en la DATA OnMouseMove
Pero he podido comprobar que el MouseMove del Browse no ejecuta dicha DATA hasta que no pasas por el Header (cualquiera), lo que no deberia ser a mi modo de entender su comportamiento normal. Solo me actualiza cuando pasas por el Header. Por ese motivo no puedo saber la fila en la que se encuentra. SI actualiza el numero de columna al pasar por el header de las columnas.
Si actualizase la posicion correctamente al realizar el OVER del Browse no creo que costase mucho pintar la celda/linea por la que estuviera posicionado el mouse.
Lo he dejado pendiente, como otras cosas, hasta comprobar que cuando me actualice a la nueva version (uso actualmente FWH 12.03) sigue siendo el mismo comportamiento. De ser asi tendré que hacer una clase heredada de XBrowse y modificar el MouseMove para comprobarlo ya que yo tambien lo necesito.
Quizas otros compañeros o tu, tengan otras ideas que me hagan salir del error de esta apreciacion.
Saludos
Yo lo he intentado en varias ocasiones, sin exito
Debería ser tan sencillo como poner una funcion en la DATA OnMouseMove
Code: Select all | Expand
oBrw:OnMouseMove := { | oB , nR, nC, nK | PintaOverLine( oB, nR, nC, nK ) }
... / ...
oBrw:CreateFromCode()
Return oBrw
function PintaOverLine( oB, nR, nC, nK )
local nOldRowPos := oB:nRowSel
local nOldColPos := oB:nColSel
local nMouseRow := oB:MouseRowPos( nR )
local nMouseCol := oB:MouseColPos( nC )
//if !oB:lPressed .and. !oB:lCaptured
//if nOldRowPos <> nMouseRow .and. nOldColPos <> nMouseCol //No estoy en la misma posicion que la seleccionada
oB:Descripcion:cFooter := Str(nMouseRow ,4 )+" / "+Str( nMouseCol, 4 )+" / "+;
Str( nOldRowPos , 4 )+" / "+Str( nOldColPos, 4 )
oB:RefreshFooters()
//endif
//endif
return .t.
Pero he podido comprobar que el MouseMove del Browse no ejecuta dicha DATA hasta que no pasas por el Header (cualquiera), lo que no deberia ser a mi modo de entender su comportamiento normal. Solo me actualiza cuando pasas por el Header. Por ese motivo no puedo saber la fila en la que se encuentra. SI actualiza el numero de columna al pasar por el header de las columnas.
Si actualizase la posicion correctamente al realizar el OVER del Browse no creo que costase mucho pintar la celda/linea por la que estuviera posicionado el mouse.
Lo he dejado pendiente, como otras cosas, hasta comprobar que cuando me actualice a la nueva version (uso actualmente FWH 12.03) sigue siendo el mismo comportamiento. De ser asi tendré que hacer una clase heredada de XBrowse y modificar el MouseMove para comprobarlo ya que yo tambien lo necesito.
Quizas otros compañeros o tu, tengan otras ideas que me hagan salir del error de esta apreciacion.
Saludos
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
- FranciscoA
- Posts: 2164
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Sombrear linea cuando el mouse esta sobre ella
Cristobal,
Yo también lo he intentado en algunas ocasiones, sin resultados. Hoy que tengo tiempo, he retomado el asunto, a ver que consigo. Te digo que solo había tratado de hacerlo utilizando unicamente las variables y/o funciones que tiene el xbrowse. Esta vez voy a intentar con una extension del method. Si lo logro, lo posteo.
Saludos.
Yo también lo he intentado en algunas ocasiones, sin resultados. Hoy que tengo tiempo, he retomado el asunto, a ver que consigo. Te digo que solo había tratado de hacerlo utilizando unicamente las variables y/o funciones que tiene el xbrowse. Esta vez voy a intentar con una extension del method. Si lo logro, lo posteo.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
- FranciscoA
- Posts: 2164
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Sombrear linea cuando el mouse esta sobre ella
Cristobal y demas colegas en el foro.
Talvez algunos quieran probar, modificar y ayudar a terminar este codigo.
Saludos
Talvez algunos quieran probar, modificar y ayudar a terminar este codigo.
Code: Select all | Expand
//TXBROWSE VERSION 1204
DATA nOldRowMP AS NUMERIC // Old Row Mouse Pointer //FranciscoA
DATA bMMoved INIT { || nil } // Evaluate Block for Lines Colors //FranciscoA
METHOD MouseMove( nRow, nCol, nKeyFlags ) CLASS TXBrowse
local oCol
local nLen, nFor, nPos
local cTxt // tooltip CELL
local nVMove, nHMove, nOldRowPos, nOldColPos
local nMousePos := ::MouseRowPos( nRow )
if ::bMMoved != nil //FranciscoA
if nMousePos <> ::nOldRowMP //FranciscoA
Eval(::bMMoved, nRow, nCol) //FranciscoA
::nOldRowMP := nMousePos //FranciscoA
endif //FranciscoA
endif //FranciscoA
TrackMouseEvent( ::hWnd, TME_LEAVE )
METHOD New( oWnd ) CLASS TXBrowse
::nCaptured := 0
::nLastEditCol := 0
::nOldRowMP := 1 //FranciscoA
::bMMoved := NIL //FranciscoA
::nRowDividerStyle := LINESTYLE_NOLINES
//-------------------------
IN PRG
DEFINE DIALOG oDlg SIZE oVent:nWidth, oVent:nHeight TITLE "FapSoftScan" TRANSPARENT
@oDlg:nTop+10,200 SAY oSayPrueba VAR cSayPrueba OF oDlg PIXEL
@1,1 XBROWSE oBrw OF oDlg ;
ARRAY {} CELL LINES FOOTERS AUTOSORT
WITH OBJECT oBrw
...
...
END
oBrw:CreateFromCode()
oBrw:bMMoved := {|nRow,nCol| ClrRowMouseOver(oBrw,nRow,nCol,oSayPrueba) }
ACTIVATE DIALOG oDlg
//-------------------------
//---------------------------------------
Function ClrRowMouseOver(oBrw,nRow,nCol,oSayPrueba)
local n, n1
local nRowMPos := oBrw:MouseRowPos(nRow) //linea en que esta el mouse
local nDisplRows := oBrw:RowCount() //lineas visibles en el xBrowse
local bClrStd := oBrw:bClrStd
for n := 1 to nDisplRows
For n1 := 1 to len(oBrw:aCols)
if n = nRowMPos
oSayPrueba:SetText(Str(nRowMPos,4))
oBrw:aCols[n1]:bClrStd := {|| { nRGB(0,0,0),nRGB(120,50,150)} }
else
oBrw:aCols[n1]:bClrStd := bClrStd
endif
Next
next
Return nil
Saludos
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
- FranciscoA
- Posts: 2164
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Sombrear linea cuando el mouse esta sobre ella
Cristobal,
Has intentado de nuevo?
Yo lo acabo de hacer funcionar... pero... solo en la primer pantalla del browse, basado en la primera columna que contiene el numero de linea. Es decir, si sobre-paso las lineas maximas del browse, al hacer bChange, ya no funciona.
Saludos.
Has intentado de nuevo?
Yo lo acabo de hacer funcionar... pero... solo en la primer pantalla del browse, basado en la primera columna que contiene el numero de linea. Es decir, si sobre-paso las lineas maximas del browse, al hacer bChange, ya no funciona.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
- cnavarro
- Posts: 6568
- Joined: Wed Feb 15, 2012 8:25 pm
- Location: España
- Has thanked: 4 times
- Been thanked: 5 times
Re: Sombrear linea cuando el mouse esta sobre ella
Francisco
Lo estoy intentando implementar en el ejemplo que he puesto en el otro post
A traves del metodo HandleEvent siguiendo el mismo proceso que usa la clase TButtonBmp cuando pasas el cursor encima de un boton
Has usado el bMMoved?
Saludos y gracias por tu mensaje en el otro post
Lo estoy intentando implementar en el ejemplo que he puesto en el otro post
A traves del metodo HandleEvent siguiendo el mismo proceso que usa la clase TButtonBmp cuando pasas el cursor encima de un boton
Has usado el bMMoved?
Saludos y gracias por tu mensaje en el otro post
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
- FranciscoA
- Posts: 2164
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Sombrear linea cuando el mouse esta sobre ella
cnavarro wrote:Francisco
Has usado el bMMoved?
Sí, lo estoy usando en las pruebas, como lo puedes ver mas arriba. Es algo que he implementado en una copia del TXbrowse para probar.
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
- cnavarro
- Posts: 6568
- Joined: Wed Feb 15, 2012 8:25 pm
- Location: España
- Has thanked: 4 times
- Been thanked: 5 times
Re: Sombrear linea cuando el mouse esta sobre ella
FranciscoA wrote:cnavarro wrote:Francisco
Has usado el bMMoved?
Sí, lo estoy usando en las pruebas, como lo puedes ver mas arriba. Es algo que he implementado en una copia del TXbrowse para probar.
Saludos.
Estuve mirando y probando tu aporte pero no consegui que funcionase correctamente
Por eso mi pregunta, si habias seguido el mismo camino o habias probado otras vias.
Saludos
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
-
- Posts: 116
- Joined: Wed Mar 11, 2009 7:32 pm
- Location: Obregon, Sonora, Mexico
Re: Sombrear linea cuando el mouse esta sobre ella
hola wenas tardes
checando el código, le meti unas funciones
y ya se va cambiando de color dependiendo del renglón que se posiciona el mouse,, faltaría validar de que colores es el comienzo y que color va cambiando
ya para una matriz faltaría validar un poquito mas pero es un buen seguimiento del primer código que pusieron
saludos
checando el código, le meti unas funciones
y ya se va cambiando de color dependiendo del renglón que se posiciona el mouse,, faltaría validar de que colores es el comienzo y que color va cambiando
ya para una matriz faltaría validar un poquito mas pero es un buen seguimiento del primer código que pusieron
saludos
Code: Select all | Expand
static bXBrowse, pirrin, csayprueba, osayprueba, cwsayprueba, owsayprueba
function main()
local odlg
local obrw
//local osayprueba
//local csayprueba:=12
local aare:={"escuela","trabajo","salud","dinero","amor"}
csayprueba:="qqq"
cwsayprueba:="qddd"
pirrin:=0
DEFINE DIALOG oDlg SIZE 520,380 title "FapSoftScan"
@ 3,18 SAY oSayPrueba VAR cSayPrueba OF oDlg size 80,20
@ 4,18 SAY owSayPrueba VAR cwSayPrueba OF oDlg size 80,20
@ 0,0 xBrowse oBrw OF odlg ARRAY aare
oBrw:CreateFromCode()
oBrw:bMMoved := {|nRow,nCol| ClrRowMouseOver(oBrw,nRow,nCol) }
ACTIVATE DIALOG oDlg
//-------------------------
Return nil
Code: Select all | Expand
//---------------------------------------
Function ClrRowMouseOver(oBrw,nRow,nCol)
local n, n1
local nRowMPos := oBrw:MouseRowPos(nRow) //linea en que esta el mouse
local nDisplRows := oBrw:RowCount() //lineas visibles en el xBrowse
local bClrStd := oBrw:bClrStd, aa:=1
pirrin:=0
if nrowmpos>0
oBrw:aCols[1]:bClrStd :={|| { colorin1( nRowMPos),colorin2( nRowMPos)} }
endif
obrw:refresh()
Return nil
function colorin1(xren)
pirrin++
if pirrin>=6
pirrin:=1
endif
if pirrin=xren
// csayprueba:="cunplio"+str(xren)+"/"+str(pirrin)
// osayprueba:refresh()
return RGB(193,221,255)
endif
//csayprueba:="nolcump"+str(xren)+"/"+str(pirrin)
//osayprueba:refresh()
return RGB(193,150,170)
function colorin2(xren)
if pirrin=xren
// cwsayprueba:="cumplio"+str(xren)+"/"+str(pirrin)
// owsayprueba:refresh()
if pirrin>=5 // aqui va cuantos renglones son en total
pirrin:=0
endif
return RGB(120,50,150)
endif
//cwsayprueba:="nelpaste"+str(xren)+"/"+str(pirrin)
//owsayprueba:refresh()
return RGB(183,120,125)
Benjamin Casarrubias Moreno
Cd. Obregon, Sonora, Mexico
chino72vale@hotmail.com
Fivewin 16.05, Harbour 3.2, xharbour 1.2.1, Fivelinux, visual estudio 2013
Cd. Obregon, Sonora, Mexico
chino72vale@hotmail.com
Fivewin 16.05, Harbour 3.2, xharbour 1.2.1, Fivelinux, visual estudio 2013
- FranciscoA
- Posts: 2164
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Sombrear linea cuando el mouse esta sobre ella
benjiben,
Gracias por tu interés.
Aqui dejo un ejemplo funcional sobre el avance que he logrado hasta el momento.
Talvez el resto de colegas quiera colaborar en perfeccionarlo. Recuerden hacer las pequeñas modificaciones a Class TxBrowse expuestas mas arriba.
Saludos.
Gracias por tu interés.
Aqui dejo un ejemplo funcional sobre el avance que he logrado hasta el momento.
Talvez el resto de colegas quiera colaborar en perfeccionarlo. Recuerden hacer las pequeñas modificaciones a Class TxBrowse expuestas mas arriba.
Code: Select all | Expand
//PROBANDO
//-----------------------Pruebas Clr Row when mouse over
Function ClrRowMOver()
local oDlg, oBrw, oCbx, oBt2
local nWidthRes := GetSysMetrics(SM_CXSCREEN)
local nHeightRes := GetSysMetrics(SM_CYSCREEN)
local aInfo:={}, aTitCols:={}, aWMIscan, bMonitoring
local cVar, nPos:=1, n, oSayPrueba,cSayPrueba:=" "
local nFONDO1 := RGB(215, 215, 215)
local nFONDO2 := RGB(235, 235, 235)
local nAZUL := RGB( 0, 0, 128)
local oLoc, oWMI
TRY
oLoc:= CreateObject( "wbemScripting.SwbemLocator" )
CATCH
MsgStop("No se pudo crear objeto 'wbemScripting.SwbemLocator'","Alto")
Quit
END
TRY
oWMI := oLoc:ConnectServer()
CATCH
MsgStop("No se pudo conectar a WMI","Alto")
Quit
END
bMonitoring := {|| aWMIscan:=Monitoring(oWMI,18) ,;
aInfo:=aWMIscan[1], aTitCols:=aWMIscan[2],;
oBrw:SetArray(aInfo,.t.,1,.t.),;
oBrw:cHeaders := aTitCols, ;
oBrw:nHeadStrAligns := AL_CENTER, ;
AEval(oBrw:aCols,{|o,n,oCol| if(ValType(o:Value) =="N", o:nWidth := Max( 40, oBrw:aCols[n]:HeaderWidth() ), o:nWidth:=160) }),;
oBrw:nColSel := 1, oBrw:Refresh(.t.),;
oBrw:SetFocus() }
DEFINE DIALOG oDlg SIZE nWidthRes-100, nHeightRes-100 TITLE "FapSoftScan" TRANSPARENT
@oDlg:nTop+5,200 SAY oSayPrueba VAR cSayPrueba OF oDlg SIZE 100,20 PIXEL
@1,1 XBROWSE oBrw OF oDlg ;
ARRAY {} CELL LINES FOOTERS AUTOSORT
WITH OBJECT oBrw
:l2007 := .f.
:nRecSelColor := nFONDO1
:nStyle := nAnd( :nStyle, nNot( WS_BORDER ) )
:nMarqueeStyle := MARQSTYLE_HIGHLROW //ilumina toda la linea
:bClrHeader := {|| { nAZUL, nFONDO1, } }
:bClrFooter := :bClrHeader // Colores texto de footers
:bClrStd := {|| IF( oBrw:nArrayAt() % 2 == 0, {nAZUL, nFONDO1}, {nAZUL, nFONDO2} ) }
:bClrSel := {|| { nAZUL, CLR_WHITE } } // para barra de linea selecc cuando el control no tiene el foco
:bClrSelFocus := { || { CLR_WHITE, nAZUL } } // para barra de linea selecc cuando el control tiene el foco
:lKinetic := .f.
:lContrastClr := .f. //para que no cambie color de texto automaticamente segun intensidad del fondo
:nRowHeight := 20
:nHeaderHeight := 34
:nColDividerStyle := LINESTYLE_LIGHTGRAY
:nRowDividerStyle := LINESTYLE_LIGHTGRAY
END
oBrw:CreateFromCode()
Eval(bMonitoring)
oBrw:bMMoved := {|nRow,nCol| ClrRowMouseOver(oBrw,nRow,nCol,oSayPrueba) }
@ oDlg:nTop+245,380 BUTTONBMP oBt2 PROMPT "Salir/Cancelar" OF oDlg ;
SIZE 60, 12 PIXEL ;
BITMAP "SALIR16x16" TEXTRIGHT ;
ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTERED ;
ON INIT ( oBrw:nHeight:=oDlg:nHeight-118, oBrw:nWidth:=oDlg:nWidth-34, oBrw:nTop:=oDlg:nTop+50 ,;
oBrw:SetFocus() )
Return nil
//-------------------------------------------------------------
Function Monitoring(oWMI)
local oPC, oQry
local aInfo:={}, aTitCols, n,nLen
oQry := oWMI:ExecQuery( "Select * FROM Win32_LogicalProgramGroup" )
aTitCols:= {"Caption","Description","GroupName","Name","UserName","InstallDate","Status"}
for each oPC in oQry
aadd(aInfo, {oPC:Caption, oPC:Description, oPC:GroupName, oPC:Name, oPc:UserName, oPc:InstallDate, oPc:Status} )
next
//Agregar columna para numerar consecutivo
Aadd(aTitCols,nil)
AIns(aTitCols,1)
aTitCols[1]:="No. "
For n := 1 to len(aInfo)
Aadd(aInfo[n],nil)
AIns(aInfo[n],1)
aInfo[n,1] := n
Next
RETURN {aInfo,aTitCols}
//---------------------------------------
Function ClrRowMouseOver(oBrw,nRow,nCol,oSayPrueba)
local n
local nRowMPos := oBrw:MouseRowPos(nRow) //linea en que esta el mouse en display actual
local bClrStd := oBrw:bClrStd
local oCol
oSayPrueba:SetText("Lin: "+Str(nRowMPos,4))
if nRowMPos > 0
For n := 1 to len(oBrw:aCols)
oCol:= oBrw:aCols[n]
oCol:bClrStd := CellClrMOver( oCol, nRowMPos, bClrStd, oBrw )
Next
oBrw:Refresh()
endif
Return nil
//------------------------------------
STATIC function CellClrMOver( oCol, nRowMPos, bClrStd, oBrw )
local nRow
RETURN { || nRow := oBrw:aCols[1]:Value ,;
If( nRow == nRowMPos ,;
{ CLR_BLUE, CLR_YELLOW }, Eval(bClrStd) ) }
Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh-MySql-TMySql
Chinandega, Nicaragua.
Fwxh-MySql-TMySql