Dear Jose
I hope to understand your doubts and concerns in this regard, so please tell me if I am right
Just as we define our movement codeblocks in the console in the browse, you want to be able to do the same with XBrowse, is that correct?
What may seem a little "disturbing" at first, in the fact that you apparently cannot define your codeblocks in XBrowse, must indicate that Mr. Rao must have had some reason for doing so, and I think I am not wrong in indicating that since the sources (dbfs, array, ADO, hash, etc.) available to us in the use of this wonderful tool are so wide, it is normal that by default they have been configured specifically for each type of source, since the way in which these codeblocks work in each of these sources has important differences between one another.
In this example that I attached, you can see that the data does not appear because the codeblocks are not defined, but if you comment the :bSkip := nil, or you put your own, the data does appear, which is logical because for the data to appear xbrowse needs to know how to move around the source you have chosen
It is a very powerful tool, but it takes a little time and a lot of testing to get to know its power and the small details that allow us to do everything you can think of in depth
- Code: Select all Expand view
#include "fivewin.ch"
#include "xbrowse.ch"
function main()
local oWnd
local oGrid
local oBtn, oGet1, oGet2
USE CUSTOMER ALIAS "BASE" NEW
DEFINE WINDOW oWnd
oWnd:nHeight := ScreenHeight()
oWnd:nWidth := ScreenWidth()
ACTIVATE WINDOW oWnd MAXIMIZED ON INIT Controles( oWnd )
Return nil
Function Controles( oWnd )
local oGrid
@ 10, 151 XBROWSE oGrid ;
SIZE -1, -1 PIXEL ;
OF oWnd ;
DATASOURCE "BASE" ;
AUTOSORT ;
AUTOCOLS ;
CELL LINES NOBORDER
WITH OBJECT oGrid
:CreateFromCode()
// User defined codeblocks
:bGoTop := nil
:bGoBottom := nil
:bSkip := nil // Comment this line or define your own codeblock
:bBof := nil
:bEof := nil
//:bKeyNo := nil
//:bKeyCount := nil
//:bBookMark := nil
END
Return nil
I also thought I read something related to being able to add columns, I assure you that you can do it both in their initial definition and dynamically at any time: add, delete, hide, etc.
You have many examples in the forum about this and I recommend that you take a look at the include folder in xbrowse.ch where the command to use appears, although I think I remember that xbrowse has a method for it.
Keep in mind that in the GUI environment it is not always developed thinking about code compatibility with the code that was used purely in the console.
What problem do you find with using multithread?
If you have any questions or concerns that I may be able to help you with, I remain at your disposal
-------------------------------- SPANISH ---------------------------------------------Sorry for my poor English
Estimado Jose
Espero entender tus dudas e inquietudes al respecto, por lo que te ruego me indiques si estoy en lo cierto
Al igual que en consola en el browse definimos nuestros codeblocks de movimiento, deseas poder hacer lo mismo con el XBrowse, es así?
Lo que en principio puede parecerte un poco "inquietante" en el hecho de que aparentemente no consigas definir tus codeblocks en el XBrowse, debe de indicarte que algún motivo habrá tenido el Sr. Rao para hacerlo así, y creo que no me equivoco al indicar que al ser tan amplios los sources ( dbfs, array, ADO, hash, etc ) de que disponemos en la utilizacion de esta maravillosa herramienta, es normal que por defecto se hayan configurados de forma específica para cada tipo de source, ya que la forma en la que funcionan en cada uno de esos sources esos codeblocks, tienen diferencias importantes entre unos y otros.
En este ejemplo que te adjunto, podrás comprobar que no aparecen los datos ya que no están definidos los codeblocks, pero el comentas el :bSkip := nil, o pones el tuyo propio, si aparecen los datos, lógico porque para que vayan apareciendo los datos xbrowse necesita saber como moverse por el source que hayas elegido
Es una herramienta muy poderosa, pero se necesita un poco de tiempo y muchas pruebas para ir conociendo en profundidad su potencia y los pequeños detalles que nos permiten hacer todo lo que se te pueda ocurrir
También me ha parecido leer algo relacionado con poder añadir columnas, te aseguro que se puede tanto en su definición inicial como dinámicamente en cualquier momento: añadir, borrar, ocultar, etc.
Tienes muchos ejemplo en el foro al respecto y te recomiendo que le eches un vistazo en la carpeta include a xbrowse.ch en el que aparece el comando a utilizar, aunque creo recordar que el xbrowse tiene un method para ello.
Piensa que en el entorno GUI no siempre se desarrolla pensando en la compatibilidad de código con el código que se utilizaba puramente en consola.
Qué problema encuentras con el uso de multithread?
Cualquier duda en la que pueda ayudarte, quedo a tu disposición