Biel EA6DD wrote:A la espera de la opinión de Daniel, quizás seria interesante disponer de un array de codeblocks para poder asignar acciones distintas según la pestaña que se cierre. Como comente antes, actualmente suplo esta ausencia colocando el codeblock en el valid del dialogo asociado a la pestaña.
En el additem, creo que no es necesario, con un solo codeblock cumple toda la funcionalidad.
Que os parece, asi?
Las Datas, serian:
Code: Select all
DATA bPrevItemAdded // Proceso al añadir una pestaña
DATA bPostItemAdded // Idem
DATA aPrevItemDeleted // Procesos individuales para cada pestaña
DATA aPostItemDeleted // Idem
y el codigo, seria
Method New
Code: Select all
.../...
::lTransparent = lTransparent
::bPrevItemAdded := { || .T. } // New
::bPostItemAdded := { || .T. } // New
.../...
::aDialogs = Array( nLen )
::aBitmaps = {}
::aBrightBmp = {}
::LoadBitmaps( aBitmaps )
::aPrevItemDeleted := Array( nLen ) // New
AFill( ::aPrevItemDeleted, { || .T. } )
::aPostItemDeleted := Array( nLen ) // New
AFill( ::aPostItemDeleted, { || .T. } )
.../...
Metodo DelItem
Code: Select all
METHOD DelItem( nOption ) CLASS TFolderEx
local nLen := Len( ::aDialogs )
local oDlg
DEFAULT nOption := ::nOption
if Len( ::aPrompts ) > 0
if ValType( ::aPrevItemDeleted[ nOption ] ) == "B" // New
Eval( ::aPrevItemDeleted[ nOption ], Self, nOption, ::nOption )
endif
ADel( ::aPrompts, nOption )
ASize( ::aPrompts, Len( ::aPrompts ) - 1 )
ADel( ::aHelps, nOption )
ASize( ::aHelps, Len( ::aHelps ) - 1 )
ADel( ::aEnable, nOption )
ASize( ::aEnable, Len( ::aEnable ) - 1 )
ADel( ::aVisible, nOption )
ASize( ::aVisible, Len( ::aVisible ) - 1 )
ADel( ::aBitmaps, nOption )
ASize( ::aBitmaps, Len( ::aBitmaps ) - 1 )
ADel( ::aBrightBmp, nOption )
ASize( ::aBrightBmp, Len( ::aBrightBmp ) - 1 )
ADel( ::aAlphaLevel, nOption) //Biel 1404
ASize( ::aAlphaLevel, Len( ::aAlphaLevel ) - 1 )
ADel( ::aHasAlpha, nOption )
ASize( ::aHasAlpha, Len( ::aHasAlpha ) - 1 )
ADel( ::aAlign, nOption )
ASize( ::aAlign, Len( ::aAlign ) - 1 )
ADel( ::aPrevItemDeleted , nOption ) // New
ASize( ::aPrevItemDeleted , Len( ::aPrevItemDeleted ) - 1 )
//::aSizes = ADel( ::aSizes, nOption )
//::aSizes = ASize( ::aSizes, Len( ::aSizes ) - 1 )
//::aPos = ADel( ::aPos, nOption )
//::aPos = ASize( ::aPos, Len( ::aPos ) - 1 )
if nOption < nLen
::CalPos()
//::aDialogs[ nOption ]:bValid = { || .t. }
::aDialogs[ nOption ]:End()
::aDialogs = ADel( ::aDialogs, nOption )
::aDialogs = ASize( ::aDialogs, Len( ::aDialogs ) - 1 )
::nOption = Min( ::nOption, Len( ::aPrompts ) ) //Biel 1404
else
::nOption = Min( ::nOption, Len( ::aPrompts ) ) //Biel 1404
::CalPos()
//::aDialogs[ nOption ]:bValid = { || .t. }
::aDialogs[ nOption ]:End()
::aDialogs = ADel( ::aDialogs, nOption )
::aDialogs = ASize( ::aDialogs, Len( ::aDialogs ) - 1 )
endif
if ValType( ::aPostItemDeleted[ nOption ] ) == "B" // New
Eval( ::aPostItemDeleted[ nOption ], Self, nOption, ::nOption )
endif
ADel( ::aPostItemDeleted[ nOption ] , nOption ) // New
ASize( ::aPostItemDeleted , Len( ::aPostItemDeleted ) - 1 )
::Default()
endif
Return nil
Method AddItem
Code: Select all
METHOD AddItem( cItem, cResName, bRedefineControls, cnHelpId ) CLASS TFolderEx
local oDlg
local nLen
local n
local oThis := Self
if ValType( ::bPrevItemAdded ) == "B" // New
Eval( ::bPrevItemAdded, Self, ::nOption )
endif
if Empty( cResName )
DEFINE DIALOG oDlg OF oThis STYLE nOR( WS_CHILD, If( ! ::oWnd:IsKindOf( "TDIALOG"), WS_CLIPCHILDREN, 0 ) ) ;
BRUSH ::oBrush
else
DEFINE DIALOG oDlg OF oThis STYLE nOR( WS_CHILD, If( ! ::oWnd:IsKindOf( "TDIALOG"), WS_CLIPCHILDREN, 0 ) ) ;
NAME cResName brush ::oBrush
endif
AAdd( ::aDialogs, oDlg )
AAdd( ::aPrompts, cItem )
AAdd( ::aHelps, cnHelpId )
AAdd( ::aEnable, .t. )
AAdd( ::aVisible, .t. )
AAdd( ::aBitmaps, { 0, 0, 0 } )
AAdd( ::aBrightBmp, 0 )
AAdd( ::aAlphaLevel,255) //Biel 1404
AAdd( ::aHasAlpha, .F. )
AAdd( ::aAlign, AL_LEFT )
AAdd( ::aPrevItemDeleted , { || .T. } )
AAdd( ::aPostItemDeleted , { || .T. } )
if ValType( bRedefineControls ) == "B"
Eval( bRedefineControls, oDlg )
endif
if ValType( ::bPostItemAdded ) == "B" // New
Eval( ::bPostItemAdded, Self, ::nOption )
endif
::Default()
oDlg:Hide()
::SetOption( Len( ::aDialogs ) )
::Refresh()
RETURN NIL
Biel, Daniel, qué os parece?
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.