Bitmap en Folder

Bitmap en Folder

Postby Pedro » Wed Dec 31, 2008 5:21 pm

Hola a todos

Pregunta. ¿Hay alguna manera de usar solo dos bitmaps en las pestañas de un folder dinamicamente?

Me explico, poner un bitmaps cuando el folder está activo y otro si no lo está
en fwh\bitmaps estan Folder3.bmp y folder.bmp, representa una carpeta abierta y otra cerrada, cuando construimos el folder la primera pestaña (primer folder) tomaría el folder3.bmp y cuando pierda el foco por otro folder ponerle el folder.bmp

¿Es posible esto?

Feliz salida y entrada de año a todos

Pedro
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Bitmap en Folder

Postby Antonio Linares » Sat Jan 03, 2009 7:56 am

Pedro,

Si revisas FWH\samples\TestFold.prg verás que la función SetImages() se usa para crear un objeto ImageList y asociarlo al folder.

La idea es que tengas creados dos objetos ImageList y que cambies de uno a otro, cuando cambies el estado de las pestañas del folder (accesibles ó no). Es sencillo.

Inténtalo y si no te sale, te hacemos un ejemplo.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Bitmap en Folder

Postby Pedro » Sat Jan 03, 2009 11:08 am

Hola Antonio

Pues no me sale. He definido dos objetos oImageList (oImageList1,oImageList2) y no he tenido mas remedio que asignarle cuatro imagenes iguales, pues hay cuatro pestañas en el folder, (lo suyo sería definir una imagen sola por cada objeto oImageList para mi caso)

si pongo
REDEFINE FOLDER........
ON CHANGE oFld:SetImageList(oImageLis2)
Me cambia las imagenes, pero todas, no unicamente la del folder que se pincha, y mi pregunta era que cambiaran el folder que pierde el foco y el que adquiere el foco.
Un ejemplo de lo que digo
Un bitmap llamado abierto, para la pestaña que está seleccionada y un bitmap cerrado para el resto de las pestañas
Al iniciarse el Folder y segun hallamos colocado nOption, ese folder llevará el bmp abierto, el resto lo llevará cerrado
cuando cambiamos, ponermos el bmp cerrado al folder que pierde el foco y abierto al que lo toma.

Gracias por tu respuesta

Pedro
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Bitmap en Folder

Postby Daniel Garcia-Gil » Sat Jan 03, 2009 4:08 pm

prueba esto a ver como te va....

Code: Select all  Expand view
#include "FiveWin.ch"
#include "Folder.ch"

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

function Main()

   local oDlg, oFld, oCbx, oSay
   local nValue := 2, oChk, lChk := .t.
   local cItem, oImageList


   SET _3DLOOK ON

   DEFINE DIALOG oDlg RESOURCE "Test"

   
   REDEFINE FOLDER oFld ID 110 OF oDlg ;
      PROMPT "Cli&pper", "&and", "&Windows", "&Magic" ;
      DIALOGS "Sub1", "Sub2","Sub3", "Sub4"

    REDEFINE BUTTON ID 120 OF oDlg ;
      ACTION oDlg:End()


   oFld:aEnable = { .t., .t., .t., .t. }
   
   oFld:bChange := {|| SetImages( oDlg, oFld ) }

   ACTIVATE DIALOG oDlg CENTERED ;
      VALID MsgYesNo( "Want to end ?" ) ;
      ON INIT SetImages( oDlg, oFld )

return nil

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

function DoBrowse()

   USE Customer
   Browse()
   USE

return nil

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

function SetImages( oDlg, oFld )

   local oImageList, n
   
   DEFINE IMAGELIST oImageList SIZE 16, 16
   
   for n = 1 to len( oFld:aPrompts )
      if n == oFld:nOption
      oImageList:AddMasked( TBitmap():Define( "open",,    oDlg ), nRGB( 192, 192, 192 ) )   
     else
      oImageList:AddMasked( TBitmap():Define( "close",,   oDlg ), nRGB( 192, 192, 192 ) )   
    endif
   next
   
   oFld:SetImageList( oImageList )
   
 
   
return nil   


archivo RC

Code: Select all  Expand view
#define IDC_CHECKBOX1   92
#include ".\..\include\WinApi.ch"

#ifdef __FLAT__
  1 24 "winxp\WindowsXP.Manifest"
#endif

#ifdef __64__
   1 24 "WinXP/WindowsXP.Manifest64"
#endif

open   BITMAP "../bitmaps/on.bmp"
close  BITMAP "../bitmaps/off.bmp"

Test DIALOG 19, 47, 233, 124
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "FiveWin Folders Demo"
{
CONTROL "", 110, FOLDER32, 0 | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 4, 5, 225, 99
PUSHBUTTON "&OK", 120, 98, 108, 37, 14
}


sub1 DIALOG 18, 18, 205, 80
STYLE WS_CHILD | 4
{
}


sub2 DIALOG 18, 18, 142, 67
STYLE WS_CHILD | 4
{
}

sub3 DIALOG 18, 18, 142, 67
STYLE WS_CHILD | 4
{
}

sub4 DIALOG 18, 18, 142, 67
STYLE WS_CHILD | 4
{
}
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Bitmap en Folder

Postby Pedro » Sat Jan 03, 2009 4:35 pm

Gracias Daniel

Eso era justo lo que quería, y ya que estamos, una pegunta...para ti y para Antonio.
En la clase TxBrowse (últimas versiones) debo suponer que se ha corregido algo, pues siguiendo tu mismo ejemplo
con xBrwAppe, resulta que al crear la primera columna, en el bOnPosEdit, he puesto un If nKey == VK_Return .......
y un If nKey == VK_ESCAPE, pues bien si he pulsado return primero y luego escape, me da un error DBCMD/2001 al hacer un dbappend() (que no hago en la linea que da) y si solo pulso escape, se cierra el dialogo.
las lineas de creación son estas
Code: Select all  Expand view
oBrw = TXBrowse():New( oDlgAlb )
   
   oBrw:nColDividerStyle    := LINESTYLE_BLACK
   oBrw:nRowDividerStyle    := LINESTYLE_BLACK
   oBrw:lRecordSelector     := .t.
   oBrw:nHeaderLines        := 1
   oBrw:nDataLines          := 1
    oBrw:nRowSel             := 1
    oBrw:nMarqueeStyle       := 3 //Highlight row //MARQSTYLE_HIGHLCELL
    oBrw:bClrSelFocus        := {||{CLR_WHITE,RGB(176,196,222 )}}
   oBrw:cAlias := cAlias1
   oBrw:bClrStd := {|| { nRGB( 0, 0, 0), nRGB(255,248,220) } } // colores para lineas normales
   oBrw:bClrSel := {|| { nRGB(0,0,0), nRGB(241,222,088) } } // para barra de linea selecc cuando el control no tiene el foco
   oBrw:bClrSelFocus := {|| { nRGB( 0, 0, 0), nRGB(248,195, 34) } } // para barra de linea selecc cuando el control tiene el foco

   oBrw:lFastEdit  := .T.
   oBrw:bPastEof = {|| (cAlias1)->(Dbappend()), oBrw:GoLeftMost(),oBrw:Refresh(),;
                                            oBrw:aCols[ 1 ]:Edit() }
                                            //agrega registro y "oprime" enter
                       
   oCol = oBrw:AddCol()
   oCol:bStrData      := { ||TRANSFORM((cAlias1)->codigo,"99999") }
   oCol:nEditType     := EDIT_GET
   oCol:cHEADER       := "CODIGO"
   oCol:bEditValid   =   {|o| if ( VAL(o:value()) == 0 , .f., .t.) }
   oCol:bOnPostEdit   := { | oCol, xVal, nKey | If( RecCount() == 0,( DbAppend(), oBrw:Refresh() ),) ,;
   If( nKey == VK_RETURN, If(Barticulo(oBrw,xVal),oBrw:Refresh(),oBrw:GoleftMost()),),;
   If( nKey == VK_ESCAPE .and. VAL((cAlias1)->codigo)=0,( (cAlias1)->(dbDelete()),;
               (cAlias1)->(__dbPack()),(cAlias1)->(dbGoBottom()),oBrw:Refresh() ), ) }


Las de tu código de ejemplo son estas
Code: Select all  Expand view
@ 0, 0 XBROWSE oBrw OF oWndChild ALIAS "test"


   oBrw:nMarqueeStyle = 3
   oBrw:nColDividerStyle =  LINESTYLE_BLACK
   oBrw:nRowDividerStyle = LINESTYLE_BLACK
   oBrw:lHScroll  =  .T.
   oBrw:lColDividerComplete    =  .T.
   oBrw:lAutoAppend =  lAuto
   oBrw:lFastEdit  =  .T.
        oBrw:bPastEof = {|| Dbappend(), oBrw:refresh(), oBrw:aCols[ 1 ]:Edit() }
  oBrw:bKeyDown = {|nKey| if( nKey == VK_DELETE ,;
                            ( nLast:=recno(),test->( dbdelete() ), __Dbpack(), dbgoto(nLast) ),), oBrw:refresh() }

oCol = oBrw:AddCol()
   oCol:bStrData    = { || test->First }
   oCol:cHeader     = "First"
   oCol:nEditType   = EDIT_GET
   oCol:bOnPostEdit = ;
            { | oCol, xVal, nKey | if( xVal == space( 20 ) .and. nKey == VK_ESCAPE,;
                                                 ( nLast:=recno(),test->( dbdelete() ), __Dbpack(),dbgoto(nLast-1) ),;// Afirmacion
                                                ( If( RecCount() == 0, ( DbAppend(), oBrw:Refresh() ),), ;//Negativa
                                                  If( nKey == VK_RETURN, test->First := xVal,) )), oBrw:refresh() }
    oCol:bEditValid   =   {|o| if ( o:value() == space(20), .f., .t.) }
   

Al margen de que tu ejemplo es una Windows y el mío un dialog, ¿qué diferencia hay?
Yo no veo ninguna salvo lo que dije antes, que se haya corregido algo en la clase.

Un abrazo y feliz año nuevo

Pedro
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Bitmap en Folder

Postby Antonio Linares » Sat Jan 03, 2009 5:30 pm

Daniel, Pedro,

Una pequeña observación respecto al código,

Antes de asignar el nuevo ImageList habria que destruir el anteriormente usado:
Code: Select all  Expand view
function SetImages( oDlg, oFld )

   local oImageList, n

   oFld:oImageList:End() // aqui
   
   DEFINE IMAGELIST oImageList SIZE 16, 16

   ...
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Bitmap en Folder

Postby Pedro » Sat Jan 03, 2009 6:45 pm

Antonio

Eso no me ha funcionado, me da un error,
Code: Select all  Expand view
Application
===========
   Path and name: C:\Proyectos\Gfactu\GFACTU.Exe (32 bits)
   Size:   737,280 bytes
   Time from start: 0 hours 0 mins 8 secs
   Error occurred at: 03-01-2009, 19:35:29
   Error description: Error BASE/1004  Class: 'NIL' has no exported method: END
   Args:
     [   1] = U   

Stack Calls
===========
   Called from:  => END(0)
   Called from: gesh0110.prg => SETIMAGES(287)
   Called from: gesh0110.prg => (b)CTRARTI(239)
   Called from: DIALOG.PRG => TDIALOG:INITIATE(0)
   Called from: DIALOG.PRG => TDIALOG:HANDLEEVENT(0)
   Called from:  => DIALOGBOX(0)
   Called from: DIALOG.PRG => TDIALOG:ACTIVATE(0)
   Called from: gesh0110.prg => CTRARTI(239)
   Called from: gesh0110.prg => (b)ARTICULOS(58)
   Called from: WINDOW.PRG => TCONTROL:LDBLCLICK(0)
   Called from: WBROWSE.PRG => TWBROWSE:LDBLCLICK(0)
   Called from:  => TWINDOW:HANDLEEVENT(0)
   Called from: CONTROL.PRG => TWBROWSE:HANDLEEVENT(0)
   Called from: WINDOW.PRG => _FWH(0)
   Called from:  => WINRUN(0)
   Called from: WINDOW.PRG => TMDIFRAME:ACTIVATE(0)
   Called from: geshinic.prg => MAIN(179)


Al parecer hay que verificar primero si el objeto oImageList es nil, antes de lo que tu has puesto

if oImageList <> Nil
destruirlo
EndIF
Y asi si funciona

Un abrazo
Pedro

PD. Mira mi pregunta sobre el txbrowse a ver si hay alguna solución
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Bitmap en Folder

Postby Antonio Linares » Sat Jan 03, 2009 8:54 pm

Pedro,

Si, cierto, pues la primera vez es nil :-)

Vamos a revisar tu pregunta del xbrowse cuanto antes
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Bitmap en Folder

Postby Daniel Garcia-Gil » Sun Jan 04, 2009 12:06 am

pedro intenta poner un valid en la activacion del dialogo.. algo como esto...

Activate dialog oDlg VALID ( !GETKEYSTATE( VK_ESCAPE ) )
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Bitmap en Folder

Postby Daniel Garcia-Gil » Sun Jan 04, 2009 12:41 am

uso dialog y no da ningun inconveniente
te dejo el codigo
Code: Select all  Expand view
procedure dbfs()   
local oBrw, oWndChild, oBar, oCol
local nLast
local lAuto := .t.
     
    set delete on

   USE test
   

   DEFINE DIALOG oWndChild SIZE 300,300
   
   //define buttonbar oBar of oWndChild
   
   @ 1,1    btnBMP of oWndChild prompt "ON" action( oBrw:lAutoappend := lAuto:= .t. ) top when !lAuto
   @ 1, 100 btnBMP of oWndChild prompt "OFF" action( oBrw:lAutoappend := lAuto:= .f.) top   when lAuto
   @ 1, 200 btnBMP of oWndChild prompt "Exit" action( oWndChild:end()   )          top
   
   
   @ 2, 0 XBROWSE oBrw OF oWndChild ALIAS "test" SIZE 130,130


   oBrw:nMarqueeStyle = 3
   oBrw:nColDividerStyle =  LINESTYLE_BLACK
   oBrw:nRowDividerStyle = LINESTYLE_BLACK
   oBrw:lHScroll  =  .T.
   oBrw:lColDividerComplete    =  .T.
   oBrw:lAutoAppend =  lAuto
   oBrw:lFastEdit  =  .T.
        oBrw:bPastEof = {|| Dbappend(), oBrw:refresh(), oBrw:aCols[ 1 ]:Edit() }
  oBrw:bKeyDown = {|nKey| if( nKey == VK_DELETE ,;
                            ( nLast:=recno(),test->( dbdelete() ), __Dbpack(), dbgoto(nLast) ),), oBrw:refresh() }
   
   oCol = oBrw:AddCol()
   oCol:bStrData    = { || test->First }
   oCol:cHeader     = "First"
   oCol:nEditType   = EDIT_GET
   oCol:bOnPostEdit = ;
            { | oCol, xVal, nKey | if( xVal == space( 20 ) .and. nKey == VK_ESCAPE,;
                                                 ( nLast:=recno(),test->( dbdelete() ), __Dbpack(),dbgoto(nLast-1) ),;// Afirmacion
                                                ( If( RecCount() == 0, ( DbAppend(), oBrw:Refresh() ),), ;//Negativa
                                                  If( nKey == VK_RETURN, test->First := xVal,) )), oBrw:refresh() }
    oCol:bEditValid   =   {|o| if ( o:value() == space(20), .f., .t.) }
   
   oCol = oBrw:AddCol()
   oCol:bStrData    = { || test->Last }
   oCol:cHeader     = "Last"
   oCol:nEditType   = EDIT_GET
   oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),), If( nKey == VK_RETURN, ( test->Last := xVal, oBrw:Refresh() ),) }
   
   oBrw:CreateFromCode()
   
//  oWndChild:oClient := oBrw

   ACTIVATE DIALOG oWndChild

return
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Bitmap en Folder

Postby Pedro » Sun Jan 04, 2009 1:07 pm

Hola Daniel

Veamos,
1º el verficar la tecla Escape en el Valid del dialogo no funciona, no hace nada.
2º El problema de la tecla Escape sólo está en el dialogo, no en la window, y creo que eso se ha debido retocar, pues si tu dices que a ti te funciona, obvio que tienes una versión mucho más moderna que la mía. En el ejemplo del que he partido para verficarlo, (ejemplo de Francisco J. Alegría) si pongo el Xbrowse en un dialogo y pulso Escape, se cierra el dialogo, en cambio si lo pongo en una window, :twisted: no se cierra al pulsar Escape.

El tema es, que por eso hice la pregunta, que el módulo es un diálogo para introducir albaranes, primero van los gets con los datos de la cabecera del albarán y luego el browse de las líneas, funciona todo Ok menos la dichosa tecla Escape.

3º Un dato curioso, segun el xbrowse.ch que tengo de la version 8.04, al poner en el módulo @ 2.0 (o las coordenadas que sean) me debe convertir a <oBrw> := XbrowseNew( <oWnd>, <nRow>, <nCol>, <nWidth>, <nHeigth>,;....etc
Pues bien, eso da un error de compilación C:\PROYEC~1\Xbrowse\xbrowse.prg(44) Error E0030 Syntax error: "syntax error at , en cambio si pongo oBrw := TXBrowse():New( oWndChild ) no da error de compilación.
Curioso, verdad.

Un abrazo y seguiré investigando
Pedro
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Bitmap en Folder

Postby Daniel Garcia-Gil » Sun Jan 04, 2009 2:39 pm

publica el codigo desde el punto donde defines el dialogo hasta el lugar donde lo activas o puedes enviarmelo al correo o hablamos por mensajeria , despues podemos publicar la solucion
email:danielgarciagil@gmail.com
messenger:danielgarciagil@cantv.net
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Bitmap en Folder

Postby Pedro » Sun Jan 04, 2009 2:48 pm

Hola Daniel

Despues de escribir el anterior post, me dije, ¿por qué no revisar los FTDN?, y así lo hice.
Y la verdad, todo lo que pensaba era cierto, la clase TxBrowse se ha tocado muchísimo, el problema es mío, es decir de mi versión de FWH, no me queda más remedio que actualizarme.
Por ejemplo, se ha tocado lo de la tecla Escape, antes se evaluaba dos veces y ya no, eso y otras muchas cosas más, como por ejemplo que me de un error de compilación cuando uso @ nRow, nCol Xbrowse.....en mi versión no es posible usarlo, solo se puede hacer con oBrw:=TxBrowse():New().
Siento haberos hecho perder el tiempo, no me percaté hasta ahora del tema de que cuando se publica una versión los cambios y mejoras están ahí.
Mil perdones.

Un abrazo y seguimos en contacto.

Pedro
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Bitmap en Folder

Postby Daniel Garcia-Gil » Sun Jan 04, 2009 3:34 pm

Pedro.
No hay problema, estamos para ayudarnos, tu caso tiene solucion, mantengo mi posicion del post anterior

saludos...
PD. la actualizacion es una buena decision
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Bitmap en Folder

Postby FranciscoA » Sun Jan 04, 2009 4:33 pm

Pedro, tienes razón, pero lo de Daniel es acertado.

Probé mi ejemplo desde recursos (oDlg y oBrw) y se comporta como dices.

Como dice Daniel, puedes solucionarlo asi:

//------------------------
Function PuedeSalir(cAlias)
local lRet:=.f.

IF (cAlias)->(!bof())
if MsgNoYes("Si sale, perderá los datos actuales en edición."+CRLF+;
"¿Está seguro de salir?","Advertencia")
lRet := .t.
endif
ELSE
lRet:=.t. //dbf esta vacia, cierre automaticamente el dialogo.
ENDIF
return lRet

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2112
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 51 guests