In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Control Horizontal del TBrowse. Al borde de la locura

Foro público de Xailer en español
Responder
Xavi[1]
Mensajes: 55
Registrado: Mar Jul 18, 2006 2:02 pm

Control Horizontal del TBrowse. Al borde de la locura

Mensaje por Xavi[1] »

Para que todos podáis entender el subtitulo, "Al borde de MI locura" :-),
cojamos el ejemplo DbfBuilder que viene con la demo:
"C:XailerSamplesDbfbuilderDbfbuilder.xpj"
Compilar y Ejecutar.
Ahora cojamos la columna Name del browse con el mouse en su esquina superior
derecha, y arrastramos aumentando su longitud de forma que aparezca el scroll
horizontal del browse y esta ocupe la totalidad del espacio.
Desplazamos el scroll horizontal a la derecha de forma que la primera columna
visible del browse sea Type, pulsamos el botón Append del ejemplo, y ya la
hemos liado. Porque si bien la posibilidad de alterar el orden de las columnas
o la ocultación de las mismas, se pude inhibir mediante lAllowColHiding y
lAllowColSwapping, e incluso en el ejemplo se podrí­a inhibir el cambio de
tamaño de las columnas con lAllowColSizing, es algo habitual en presentaciones
browses el disponer de scroll horizontal y editar "inplace" su contenido, así­
que no puedo "escaquearme" ni lanzar un dialogo de edición de la fila y aquí­
empiezan mis problemas.
¿Cómo puedo controlar la posición horizontal del browse en edición?
GoHPos(),GoLeft(),GoLeftMost(),GoRight(),GoRightMost(), oNextCtl del
GridEditOnExit, con y sin Refresh(), Refill(), ProcessMessages().
¿Dónde..., Cómo?
Un cordial saludo
Xavi
P.D. Perdón por estilo del post, pero como dije, es al borde de mi locura :-)
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9463
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Control Horizontal del TBrowse. Al borde de la locura

Mensaje por ignacio »

Xevi,
Como no podía ser de otra forma el Browse SOLO PUEDE EDITAR aquellas
columnas que se ven completamente. Y logicamente, operaciones como la
edición en línea de varias columnas a la vez son bastante incompatibles
desde un punto de vista puramente pragmático con las funcionalidades de
redimensión y 'swap' de columnas, por lo tanto, tan sólo hay que evitar
dichas funcionalidades con las propiedades que el browse ofrece para ello.
> ¿Cómo puedo controlar la posición horizontal del browse en edición?
Intenta ser más conciso. ¿Qué es lo que quieres saber exactamente?
oBrowse:nColSel te devuelve el número de columna activa de las columnas
visibles del Browse.
Saludos,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Xavi" <[email=x_@_com]x_@_com[/email]> escribió en el mensaje news:450d42db$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Para que todos podáis entender el subtitulo, "Al borde de MI locura" :-),
> cojamos el ejemplo DbfBuilder que viene con la demo:
> "C:XailerSamplesDbfbuilderDbfbuilder.xpj"
>
> Compilar y Ejecutar.
> Ahora cojamos la columna Name del browse con el mouse en su esquina
> superior derecha, y arrastramos aumentando su longitud de forma que
> aparezca el scroll horizontal del browse y esta ocupe la totalidad del
> espacio.
> Desplazamos el scroll horizontal a la derecha de forma que la primera
> columna visible del browse sea Type, pulsamos el botón Append del ejemplo,
> y ya la hemos liado. Porque si bien la posibilidad de alterar el orden de
> las columnas o la ocultación de las mismas, se pude inhibir mediante
> lAllowColHiding y lAllowColSwapping, e incluso en el ejemplo se podría
> inhibir el cambio de tamaño de las columnas con lAllowColSizing, es algo
> habitual en presentaciones browses el disponer de scroll horizontal y
> editar "inplace" su contenido, así que no puedo "escaquearme" ni lanzar un
> dialogo de edición de la fila y aquí empiezan mis problemas.
>
> ¿Cómo puedo controlar la posición horizontal del browse en edición?
>
> GoHPos(),GoLeft(),GoLeftMost(),GoRight(),GoRightMost(), oNextCtl del
> GridEditOnExit, con y sin Refresh(), Refill(), ProcessMessages().
> ¿Dónde..., Cómo?
>
> Un cordial saludo
> Xavi
> P.D. Perdón por estilo del post, pero como dije, es al borde de mi locura
> :-)
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Xavi[1]
Mensajes: 55
Registrado: Mar Jul 18, 2006 2:02 pm

Control Horizontal del TBrowse. Al borde de la locura

Mensaje por Xavi[1] »

Hola Ignacio,
Vayan por delante mis felicitaciones por Xailer.
No consigo situar una columna determinada del Browse en la primera posición
de visualización, como si se hubiera desplazado el scroll horizontal, y comenzar
desde allí­ la Edición.
¿ Qué debo utilizar, SelectCol(x); GoLeftMost() ?
El siguiente código funciona hasta llegar al remarque del OnPostEdit del Browse:
/*
Necesito Colocar nModColAt en la primera columna de visualización del
Browse, como si se hubiera movido el scroll, y retornar la Edición.
¿Cómo lo hago?
*/
El comportamiento de este código en edición, si funcionara, serí­a el equivalente
al Browse del Clipper, cuando pulsas Intro en el campo 3 pasas al campo 4 aunque
este no aparezca en pantalla, por eso creo que algo no soy capaz de entender.
Creo que poniendo el código no puedo ser más conciso.
¿Que programo en el remarque, o en cualquier otro sitio, para conseguir editar todas
las columnas no sólo las 4 que se visualizan en la ventana?
/*
DATA nModColAt INIT 0
Configuración del Browse por defecto
::oABrw:lAllowColHiding := FALSE
::oABrw:lAllowColSwapping := FALSE
*/
METHOD Modificar() CLASS TForm1
Local oCol
if( ::oABrw:nArrayAt > 0 )
WITH OBJECT ::oABrw
:OnKeyDown := nil
:OnPostEdit := "ModBrwPostEdit"
:nMarqueeStyle := bmHIGHLCELL
for each oCol in :aCols
oCol:nEditType := beGET
if( oCol:nWidth < 50 ); oCol:nWidth := 50; endif
oCol:oGridEdit:OnExit := {|s,n| ::ModColExit( oCol, s, n )}
next
:SelectCol(1)
:Edit()
END
endif
RETURN NIL
METHOD ModColExit( oCol, oSender, oNextCtl ) CLASS TForm1
// Trata la Columna Actual
if( (::oABrw:nWidth - oNextCtl:nLeft < 50) .or. ;
(oNextCtl:nLeft == 0 .and. oCol:nIndex < Len(::oABrw:aCols)) )
::nModColAt := oCol:nIndex + 1
::oABrw:CancelEdit()
endif
RETURN nil
METHOD ModBrwPostEdit( oSender, lCanceled, nKey ) CLASS TForm1
Local oCol
WITH OBJECT ::oABrw
if( ::nModColAt > 0 )
/*
Necesito Colocar nModColAt como primera columna de visualización del
Browse, como si se hubiera movido el scroll, y retornar la Edición.
¿Cómo lo hago?
*/
::nModColAt := 0
else
:OnKeyDown := "ABrwKeyDown"
:nMarqueeStyle := bmHIGHLROW
for each oCol in :aCols
oCol:nEditType := beNONE
next
endif
END
RETURN NIL
Un cordial saludo
Xavi
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

Control Horizontal del TBrowse. Al borde de la locura

Mensaje por Xevi »

Xavi,
::oBrowse:GoHPos(1)
::oBrowse:Refresh()
Un Saludo,
Xevi.
"Xavi" <[email=x_@_com]x_@_com[/email]> ha escrit al missatge del grup de discussió:
450f04cc$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Hola Ignacio,
>
> Vayan por delante mis felicitaciones por Xailer.
> No consigo situar una columna determinada del Browse en la primera
> posición
> de visualización, como si se hubiera desplazado el scroll horizontal, y
> comenzar
> desde allí la Edición.
> ¿ Qué debo utilizar, SelectCol(x); GoLeftMost() ?
> El siguiente código funciona hasta llegar al remarque del OnPostEdit del
> Browse:
> /*
> Necesito Colocar nModColAt en la primera columna de visualización del
> Browse, como si se hubiera movido el scroll, y retornar la Edición.
> ¿Cómo lo hago?
> */
> El comportamiento de este código en edición, si funcionara, sería el
> equivalente
> al Browse del Clipper, cuando pulsas Intro en el campo 3 pasas al campo 4
> aunque
> este no aparezca en pantalla, por eso creo que algo no soy capaz de
> entender.
> Creo que poniendo el código no puedo ser más conciso.
> ¿Que programo en el remarque, o en cualquier otro sitio, para conseguir
> editar todas
> las columnas no sólo las 4 que se visualizan en la ventana?
>
> /*
> DATA nModColAt INIT 0
> Configuración del Browse por defecto
> ::oABrw:lAllowColHiding := FALSE
> ::oABrw:lAllowColSwapping := FALSE
> */
> METHOD Modificar() CLASS TForm1
> Local oCol
>
> if( ::oABrw:nArrayAt > 0 )
> WITH OBJECT ::oABrw
> :OnKeyDown := nil
> :OnPostEdit := "ModBrwPostEdit"
> :nMarqueeStyle := bmHIGHLCELL
> for each oCol in :aCols
> oCol:nEditType := beGET
> if( oCol:nWidth < 50 ); oCol:nWidth := 50; endif
> oCol:oGridEdit:OnExit := {|s,n| ::ModColExit( oCol, s, n )}
> next
> :SelectCol(1)
> :Edit()
> END
> endif
> RETURN NIL
>
> METHOD ModColExit( oCol, oSender, oNextCtl ) CLASS TForm1
>
> // Trata la Columna Actual
>
> if( (::oABrw:nWidth - oNextCtl:nLeft < 50) .or. ;
> (oNextCtl:nLeft == 0 .and. oCol:nIndex < Len(::oABrw:aCols)) )
> ::nModColAt := oCol:nIndex + 1
> ::oABrw:CancelEdit()
> endif
> RETURN nil
>
> METHOD ModBrwPostEdit( oSender, lCanceled, nKey ) CLASS TForm1
> Local oCol
>
> WITH OBJECT ::oABrw
> if( ::nModColAt > 0 )
> /*
> Necesito Colocar nModColAt como primera columna de
> visualización del
> Browse, como si se hubiera movido el scroll, y retornar la
> Edición.
> ¿Cómo lo hago?
> */
> ::nModColAt := 0
> else
> :OnKeyDown := "ABrwKeyDown"
> :nMarqueeStyle := bmHIGHLROW
> for each oCol in :aCols
> oCol:nEditType := beNONE
> next
> endif
> END
> RETURN NIL
>
> Un cordial saludo
> Xavi
Xavi[1]
Mensajes: 55
Registrado: Mar Jul 18, 2006 2:02 pm

Control Horizontal del TBrowse. Al borde de la locura

Mensaje por Xavi[1] »

Hola Xevi,
Eso no solventa nada y hace lo mismo que :SelecCol(1)
Un saludo,
Xavi
Xevi escribió:
> Xavi,
>
> ::oBrowse:GoHPos(1)
> ::oBrowse:Refresh()
>
> Un Saludo,
> Xevi.
>
>
> "Xavi" <[email=x_@_com]x_@_com[/email]> ha escrit al missatge del grup de discussió:
> 450f04cc$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
>> Hola Ignacio,
>>
>> Vayan por delante mis felicitaciones por Xailer.
>> No consigo situar una columna determinada del Browse en la primera
>> posición
>> de visualización, como si se hubiera desplazado el scroll horizontal, y
>> comenzar
>> desde allí­ la Edición.
>> ¿ Qué debo utilizar, SelectCol(x); GoLeftMost() ?
>> El siguiente código funciona hasta llegar al remarque del OnPostEdit del
>> Browse:
>> /*
>> Necesito Colocar nModColAt en la primera columna de visualización del
>> Browse, como si se hubiera movido el scroll, y retornar la Edición.
>> ¿Cómo lo hago?
>> */
>> El comportamiento de este código en edición, si funcionara, serí­a el
>> equivalente
>> al Browse del Clipper, cuando pulsas Intro en el campo 3 pasas al campo 4
>> aunque
>> este no aparezca en pantalla, por eso creo que algo no soy capaz de
>> entender.
>> Creo que poniendo el código no puedo ser más conciso.
>> ¿Que programo en el remarque, o en cualquier otro sitio, para conseguir
>> editar todas
>> las columnas no sólo las 4 que se visualizan en la ventana?
>>
>> /*
>> DATA nModColAt INIT 0
>> Configuración del Browse por defecto
>> ::oABrw:lAllowColHiding := FALSE
>> ::oABrw:lAllowColSwapping := FALSE
>> */
>> METHOD Modificar() CLASS TForm1
>> Local oCol
>>
>> if( ::oABrw:nArrayAt > 0 )
>> WITH OBJECT ::oABrw
>> :OnKeyDown := nil
>> :OnPostEdit := "ModBrwPostEdit"
>> :nMarqueeStyle := bmHIGHLCELL
>> for each oCol in :aCols
>> oCol:nEditType := beGET
>> if( oCol:nWidth < 50 ); oCol:nWidth := 50; endif
>> oCol:oGridEdit:OnExit := {|s,n| ::ModColExit( oCol, s, n )}
>> next
>> :SelectCol(1)
>> :Edit()
>> END
>> endif
>> RETURN NIL
>>
>> METHOD ModColExit( oCol, oSender, oNextCtl ) CLASS TForm1
>>
>> // Trata la Columna Actual
>>
>> if( (::oABrw:nWidth - oNextCtl:nLeft < 50) .or. ;
>> (oNextCtl:nLeft == 0 .and. oCol:nIndex < Len(::oABrw:aCols)) )
>> ::nModColAt := oCol:nIndex + 1
>> ::oABrw:CancelEdit()
>> endif
>> RETURN nil
>>
>> METHOD ModBrwPostEdit( oSender, lCanceled, nKey ) CLASS TForm1
>> Local oCol
>>
>> WITH OBJECT ::oABrw
>> if( ::nModColAt > 0 )
>> /*
>> Necesito Colocar nModColAt como primera columna de
>> visualización del
>> Browse, como si se hubiera movido el scroll, y retornar la
>> Edición.
>> ¿Cómo lo hago?
>> */
>> ::nModColAt := 0
>> else
>> :OnKeyDown := "ABrwKeyDown"
>> :nMarqueeStyle := bmHIGHLROW
>> for each oCol in :aCols
>> oCol:nEditType := beNONE
>> next
>> endif
>> END
>> RETURN NIL
>>
>> Un cordial saludo
>> Xavi
>
>
Xavi[1]
Mensajes: 55
Registrado: Mar Jul 18, 2006 2:02 pm

Control Horizontal del TBrowse. Al borde de la locura

Mensaje por Xavi[1] »

Feliz Navidad, Bon Nadal, Merry Christmas, Eguberri On.
/*
DATA aColExt INIT {}
DATA nModColAt INIT 0
Configuración del Browse por defecto
::oABrw:lAllowColHiding := FALSE
::oABrw:lAllowColSwapping := FALSE
ABrwKeyDown VK_F2 ::Modificar()
*/
METHOD Modificar() CLASS TForm1
Local oCol
WITH OBJECT ::oABrw
if( :nArrayAt > 0 )
:OnKeyDown := nil
if( ::nModColAt == 0 )
:OnPostEdit := "ModBrwPostEdit"
:nMarqueeStyle := bmHIGHLCELL
for each oCol in :aCols
oCol:nEditType := beGET
if( oCol:nWidth < ::aColExt[HB_EnumIndex()] )
oCol:nWidth := ::aColExt[HB_EnumIndex()]
endif
oCol:oGridEdit:OnExit := {|s,n| ::ModColExit( oCol, s, n )}
next
:SelectCol(1)
else
::nModColAt := 0
endif
:Edit()
endif
END
RETURN NIL
METHOD ModColExit( oCol, oSender, oNextCtl ) CLASS TForm1
// Trata la Columna Actual
if( oNextCtl != nil .and. ( ;
(:nWidth - oNextCtl:nLeft < oNextCtl:nWidth) .or. ;
(oNextCtl:nLeft == 0 .and. oCol:nIndex < Len(:aCols)) ;
) )
::nEdtColAt := oCol:nIndex + 1
:CancelEdit()
endif
RETURN nil
METHOD ModBrwPostEdit( oSender, lCanceled, nKey ) CLASS TForm1
Local oCol, i
WITH OBJECT ::oABrw
:OnKeyDown := "ABrwKeyDown"
if( ::nModColAt > 0 )
:SelectCol( Len(:aCols) ); :SelectCol( ::nModColAt )
for i := ::nModColAt - :nColSel to ::nModColAt - 1
:aCols:nEditType := beNONE
next
:PostMsg( WM_KEYDOWN, VK_F2 )
else
:nMarqueeStyle := bmHIGHLROW
for each oCol in :aCols
oCol:nEditType := beNONE
oCol:oGridEdit:OnExit := nil
next
endif
END
RETURN NIL
//---------------------------------------------------------- --------------------
Un Saludo
Xavi
Xavi escribió:
> Hola Ignacio,
>
> Vayan por delante mis felicitaciones por Xailer.
> No consigo situar una columna determinada del Browse en la primera posición
> de visualización, como si se hubiera desplazado el scroll horizontal, y
> comenzar
> desde allí­ la Edición.
> ¿ Qué debo utilizar, SelectCol(x); GoLeftMost() ?
> El siguiente código funciona hasta llegar al remarque del OnPostEdit del
> Browse:
> /*
> Necesito Colocar nModColAt en la primera columna de visualización del
> Browse, como si se hubiera movido el scroll, y retornar la Edición.
> ¿Cómo lo hago?
> */
> El comportamiento de este código en edición, si funcionara, serí­a el
> equivalente
> al Browse del Clipper, cuando pulsas Intro en el campo 3 pasas al campo
> 4 aunque
> este no aparezca en pantalla, por eso creo que algo no soy capaz de
> entender.
> Creo que poniendo el código no puedo ser más conciso.
> ¿Que programo en el remarque, o en cualquier otro sitio, para conseguir
> editar todas
> las columnas no sólo las 4 que se visualizan en la ventana?
>
> /*
> DATA nModColAt INIT 0
> Configuración del Browse por defecto
> ::oABrw:lAllowColHiding := FALSE
> ::oABrw:lAllowColSwapping := FALSE
> */
> METHOD Modificar() CLASS TForm1
> Local oCol
>
> if( ::oABrw:nArrayAt > 0 )
> WITH OBJECT ::oABrw
> :OnKeyDown := nil
> :OnPostEdit := "ModBrwPostEdit"
> :nMarqueeStyle := bmHIGHLCELL
> for each oCol in :aCols
> oCol:nEditType := beGET
> if( oCol:nWidth < 50 ); oCol:nWidth := 50; endif
> oCol:oGridEdit:OnExit := {|s,n| ::ModColExit( oCol, s, n )}
> next
> :SelectCol(1)
> :Edit()
> END
> endif
> RETURN NIL
>
> METHOD ModColExit( oCol, oSender, oNextCtl ) CLASS TForm1
>
> // Trata la Columna Actual
>
> if( (::oABrw:nWidth - oNextCtl:nLeft < 50) .or. ;
> (oNextCtl:nLeft == 0 .and. oCol:nIndex < Len(::oABrw:aCols)) )
> ::nModColAt := oCol:nIndex + 1
> ::oABrw:CancelEdit()
> endif
> RETURN nil
>
> METHOD ModBrwPostEdit( oSender, lCanceled, nKey ) CLASS TForm1
> Local oCol
>
> WITH OBJECT ::oABrw
> if( ::nModColAt > 0 )
> /*
> Necesito Colocar nModColAt como primera columna de
> visualización del
> Browse, como si se hubiera movido el scroll, y retornar la
> Edición.
> ¿Cómo lo hago?
> */
> ::nModColAt := 0
> else
> :OnKeyDown := "ABrwKeyDown"
> :nMarqueeStyle := bmHIGHLROW
> for each oCol in :aCols
> oCol:nEditType := beNONE
> next
> endif
> END
> RETURN NIL
>
> Un cordial saludo
> Xavi
Responder