Author | Topic: Xbp = Xbase++ Parts = Componentes Xbase++ | |
---|---|---|
Jose Luis Otermin | Xbp = Xbase++ Parts = Componentes Xbase++ on Fri, 12 Nov 2010 13:07:13 -0300 Hola, Para construir un ABM en modo grfico es necesario saber qu es y cmo funciona XbpDialog. XbpDialog es la ventana donde pondremos los controles grficos de nuestra aplicacin. Si bien tiene muchas partes, podemos destacar dos principales: :titlebar Area donde se despliegan ttulo y botones de control. :drawingArea Area donde se despliegan los controles que se agregan (XbpGet, por ej). Como un primer ejercicio y previo a continuar con la discusin del ABM en modo grfico, sugiero crear un dilogo y agregar una imagen de fondo como as tambin un icono diferente del preestablecido. Primer paso: Crear un archivo de recursos: Por ejemplo: MisRecursos.ARC *BOF #ifdef __ARC__ VERSION "CompanyName" = "Alaska Software Inc" "ProductName" = "Gui Standard Dialog" "ProductVersion" = " 1.0" "FileVersion" = " 1.000.000" "FileDescription" = "Demo de XbpDialog" "InternalName" = "Internal Name" "LegalCopyright" = "Copyright (c) Alaska Software Inc" "OriginalFilename" = "test.EXE" #endif #define DLG_BACKGROUND 1001 #define DLG_ICON 1 ICON DLG_ICON = "C:\ALASKA\XPPW32\RESOURCE\icon\xppFLD.ICO" BITMAP DLG_BACKGROUND = "C:\ALASKA\XPPW32\RESOURCE\bitmap\keybd2.bmp" *EOF Segundo paso: Crear procedimiento MAIN en un archivo separado. *BOF #include "Gra.ch" #include "Xbp.ch" #include "Common.ch" #include "Appevent.ch" #include "Font.ch" #PRAGMA LIBRARY( "ASCOM10.LIB" ) #define DLG_BACKGROUND 1001 #define DLG_ICON 1 PROCEDURE Main LOCAL nEvent, mp1, mp2, aSize LOCAL oDlg, oXbp, drawingArea, aEditControls := {}, oXbp1 LOCAL aPos := {100,100} IF IsMemberVar(XbpDialog(),"ClientSize") == .T. aSize := {0,0} ELSE aSize := {600,400} ENDIF oDlg := XbpDialog():new( AppDesktop(), , aPos, aSize, , .F.) IF aSize[1] == 0 .AND. aSize[2] == 0 oDlg:ClientSize := {592,370} ENDIF oDlg:taskList := .T. oDlg:title := "Dialogo con Icono personal e Imagen de fondo" oDlg:drawingArea:bitmap := DLG_BACKGROUND oDlg:icon := DLG_ICON oDlg:create() drawingArea := oDlg:drawingArea drawingArea:setFontCompoundName( "8.Courier New" ) oDlg:show() SetAppFocus(oDlg) nEvent := xbe_None DO WHILE nEvent <> xbeP_Close nEvent := AppEvent( @mp1, @mp2, @oXbp ) oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO RETURN *EOF Espero comentarios. Saludos Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Angel Pais | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Fri, 12 Nov 2010 18:50:18 -0200 On Fri, 12 Nov 2010 13:07:13 -0300, Jose Luis Otermin wrote: > Hola, > Para construir un ABM en modo gráfico es necesario saber qué es y cómo > funciona XbpDialog. > > XbpDialog es la ventana donde pondremos los controles gráficos de nuestra > aplicación. > Si bien tiene muchas partes, podemos destacar dos principales: > >:titlebar Area donde se despliegan título y botones de control. > :drawingArea Area donde se despliegan los controles que se agregan > (XbpGet, por ej). > > Como un primer ejercicio y previo a continuar con la discusión del ABM en > modo gráfico, sugiero crear un diálogo y agregar una imagen de fondo como > así también un icono diferente del preestablecido. > > Primer paso: > Crear un archivo de recursos: > > Por ejemplo: MisRecursos.ARC > *BOF > > #ifdef __ARC__ > VERSION > "CompanyName" = "Alaska Software Inc" > "ProductName" = "Gui Standard Dialog" > "ProductVersion" = " 1.0" > "FileVersion" = " 1.000.000" > "FileDescription" = "Demo de XbpDialog" > "InternalName" = "Internal Name" > "LegalCopyright" = "Copyright (c) Alaska Software Inc" > "OriginalFilename" = "test.EXE" > #endif > > #define DLG_BACKGROUND 1001 > #define DLG_ICON 1 > > ICON DLG_ICON = "C:\ALASKA\XPPW32\RESOURCE\icon\xppFLD.ICO" > BITMAP DLG_BACKGROUND = "C:\ALASKA\XPPW32\RESOURCE\bitmap\keybd2.bmp" > *EOF > > Segundo paso: Crear procedimiento MAIN en un archivo separado. > > > *BOF > #include "Gra.ch" > #include "Xbp.ch" > #include "Common.ch" > #include "Appevent.ch" > #include "Font.ch" > > #PRAGMA LIBRARY( "ASCOM10.LIB" ) > #define DLG_BACKGROUND 1001 > #define DLG_ICON 1 > > PROCEDURE Main > LOCAL nEvent, mp1, mp2, aSize > LOCAL oDlg, oXbp, drawingArea, aEditControls := {}, oXbp1 > LOCAL aPos := {100,100} > > IF IsMemberVar(XbpDialog(),"ClientSize") == .T. > aSize := {0,0} > ELSE > aSize := {600,400} > ENDIF > > oDlg := XbpDialog():new( AppDesktop(), , aPos, aSize, , .F.) > IF aSize[1] == 0 .AND. aSize[2] == 0 > oDlg:ClientSize := {592,370} > ENDIF > oDlg:taskList := .T. > oDlg:title := "Dialogo con Icono personal e Imagen de fondo" > > oDlg:drawingArea:bitmap := DLG_BACKGROUND > oDlg:icon := DLG_ICON > > oDlg:create() > > drawingArea := oDlg:drawingArea > drawingArea:setFontCompoundName( "8.Courier New" ) > > oDlg:show() > SetAppFocus(oDlg) > > nEvent := xbe_None > DO WHILE nEvent <> xbeP_Close > nEvent := AppEvent( @mp1, @mp2, @oXbp ) > oXbp:handleEvent( nEvent, mp1, mp2 ) > ENDDO > RETURN > *EOF > > Espero comentarios. > Saludos Para poder hacer gets automaticos, se va a necesitar un dialog con un scrollable drawing area. Yo uso uno pero no lo puedo publicar porque forma parte del paquete topdown. Seria bueno hacer un dialogo de esos que este libre de copyright. HTH Angel | |
Jose Luis Otermin | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Fri, 12 Nov 2010 18:10:01 -0300 Hola Angel, > Para poder hacer gets automaticos, se va a necesitar un dialog con un > scrollable drawing area. Tenemos uno que viene de fbrica > Yo uso uno pero no lo puedo publicar porque forma parte del paquete > topdown. Tambin soy usuario de TopDown. Excelente solucin. > Seria bueno hacer un dialogo de esos que este libre de copyright. Vamos a hacerlo, no te duda la menor quepa. Justamente por eso es que bifurqu hacia el XbpGet con formato Cl*pper y el XbpDialog en dos hilos separados. Nos va a hacer falta un Font y el clculo de sus dimensiones. Ah es donde se pone divertido :D > HTH > Angel Un abrazo Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Angel Pais | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Mon, 15 Nov 2010 11:38:28 -0200 On Fri, 12 Nov 2010 18:10:01 -0300, Jose Luis Otermin wrote: > Hola Angel, >> Para poder hacer gets automaticos, se va a necesitar un dialog con un >> scrollable drawing area. > > Tenemos uno que viene de fábrica > Nunca supe de su existencia. Como se llama y como se usa ? Con eso podria intentar migrar mi rutina BULKGET() hecha en topdown a algo que no necesite TD y sea mas generico. Saludos Angel | |
Jose Luis Otermin | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Mon, 15 Nov 2010 10:52:05 -0300 Hola Angel, >>> Para poder hacer gets automaticos, se va a necesitar un dialog con un >>> scrollable drawing area. >> Tenemos uno que viene de fbrica > Nunca supe de su existencia. > Como se llama y como se usa ? > Con eso podria intentar migrar mi rutina BULKGET() hecha en topdown a algo > que no necesite TD y sea mas generico. Bueno, en este hilo comenc a publicar el fuente del dilogo que trae sus scrollbars y en el desarrollo de la explicacin se ver cmo se maneja un area desplazable. Lo bsico ya fue publicado en ese mensaje. Revisa tu correo. Un abrazo Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Jose Luis Otermin | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Mon, 15 Nov 2010 09:21:55 -0300 Contino con XbpDialog. Toda vez que creamos un dilogo para interaccin con el usuario, existe la posibilidad de crear tambin un men. Agregaremos un men al dilogo creado en el mensaje anterior. PROCEDURE CrearMenu(oDlg, oFileDlg) LOCAL oMenuBar, oSubMenu oMenuBar := oDlg:MenuBar() oSubMenu := XbpMenu():new(oMenuBar):create() oSubMenu:title := "~Fichero" oSubMenu:addItem( { "~Abrir", {|mp1| Abrir( oFileDlg ) }} ) oSubMenu:addItem( { "~Cerrar", {|mp1| Cerrar() }} ) oSubMenu:addItem( { "~Salir", {|| AppQuit() }} ) oMenuBar:addItem( { oSubMenu, NIL } ) oSubMenu := XbpMenu():new(oMenuBar):create() oSubMenu:title := "A~BM" oSubMenu:addItem( { "~Alta", {|mp1| Alta( oDlg ) },,XBPMENUBAR_MIA_DISABLED}) oSubMenu:addItem( { "~Baja", {|mp1| Baja( oDlg ) },,XBPMENUBAR_MIA_DISABLED}) oSubMenu:addItem( { "~Modificacin", {|| Modifica( oDlg ) },,XBPMENUBAR_MIA_DISABLED}) oMenuBar:addItem( { oSubMenu, NIL } ) RETURN Para claridad del cdigo, separaremos al dilogo del procedimiento MAIN. /////////////////////////////////////////// FUNCTION GuiStdDialog() #define DLG_BACKGROUND 1001 #define DLG_ICON 1 Se define un Dilogo genrico. Para una mejor experiencia de aprendizaje se sugiere consultar la ayuda en lnea. /////////////////////////////////////////// LOCAL aSize, oDlg LOCAL aPos := {100,100} IF IsMemberVar(XbpDialog(),"ClientSize") == .T. aSize := {0,0} ELSE aSize := {600,400} ENDIF oDlg := XbpDialog():new( AppDesktop(), , aPos, aSize, , .F.) IF aSize[1] == 0 .AND. aSize[2] == 0 oDlg:ClientSize := {592,370} ENDIF oDlg:title := "Dialogo personalizado" oDlg:close := {|| AppQuit()} oDlg:drawingArea:setFontCompoundName( "8.Courier New" ) Innecesario en un ABM. oDlg:drawingArea:bitmap := DLG_BACKGROUND oDlg:icon := DLG_ICON oDlg:taskList := .T. oDlg:maxButton := .T. oDlg:minButton := .T. oDlg:maxSize := {600,400} oDlg:minSize := {300, 200} oDlg:cargo := {} Area donde puede "depositarse" un valor o arreglo. oDlg:create() #DEFINE NUMEROMAGICO 50 aPos := {0, 25} aSize := { oDlg:drawingArea:currentSize()[1], oDlg:drawingArea:currentSize()[2]-NUMEROMAGICO } aPP := {} Opera igual que oDlg:drawingArea:setFontCompoundName( "8.Courier New" ) AAdd ( aPP, { XBP_PP_COMPOUNDNAME, "8.Courier New" } ) Utiliza origen de coordenadas al estilo D.O.S. AAdd ( aPP, { XBP_PP_ORIGIN, XBP_ORIGIN_TOPLEFT } ) oDataArea := XbpDialog():new( oDlg:drawingArea, , aPos, aSize, aPP , .t.) oDataArea:titleBar := .F. Habilita barras de desplazamiento vertical y horizontal oDataArea:drawingArea:scrollbars := XBP_SCROLLBAR_VERT + XBP_SCROLLBAR_HORIZ Manejador de la rueda para el reaDeDibujo oDataArea:drawingArea:wheel := {|aPos, aWheel, oWindow | ProcessMouse(aPos, aWheel, oWindow) } scroll del DrawingArea pero slo si existe una barra de desplazamiento Mientras se mantiene la tecla Ctrl y desplazarse horizontal o verticalmente. Ganancia de foco en el area de dibujo con LbDown oDataArea:drawingArea:lbDown := {|aPos, uNIL, oWindow | SetAppFocus(oWindow)} oDataArea:create() oDataArea:show() RETURN oDlg Alguien notar que he definido NUMEROMAGICO. Bien, es el alejamiento vertical respecto del borde inferior del MenBar. Ya se discutir ms adelante de dnde surge ese valor (si es que est correcto). Preguntas? Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- MenuBar.png | |
Jose Luis Otermin | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Wed, 17 Nov 2010 06:02:32 -0300 En ausencia de preguntas, seguimos. Es importante considerar que todo dilogo debe tener: 1) Seccin de inicializacin de XbpDialog 2) Seccin de creacin del dilogo. 3) Activacin de los bloques de cdigo para los eventos. 4) Creacin de un sistema de men. 5) Agregado de contenidos. 6) Ciclo de Eventos. En el fuente anterior se hace mencin al evento :close. Este evento puede ser activado por: PostAppEvent( xbeP_Close ) a) Lanzado por un componente cualquiera (un pushbutton, por ejemplo). b) El usuario haciendo click en la cruz de cierre de ventana. c) El Sistema Operativo intentando cerrar la aplicacin. En el fuente anterior se observa que al evento close se le ha almacenado un bloque de cdigo. Este bloque de cdigo llama a la funcin AppQuit(). Veamos qu hace: /////////////////////////////////////////// PROCEDURE AppQuit() #DEFINE QUIT_MESSAGE "Desea abandonar el programa?" #DEFINE QUIT_OPTIONS "Salir" /////////////////////////////////////////// LOCAL nButton, oXbp := SetAppFocus() LOCAL nEvent, mp1, mp2 nButton := ConfirmBox( , ; QUIT_MESSAGE, ; QUIT_OPTIONS, ; XBPMB_YESNO , ; XBPMB_QUESTION+XBPMB_APPMODAL+XBPMB_MOVEABLE ) IF nButton == XBPMB_RET_YES CLOSE ALL PostAppEvent( xbeP_Quit ) ELSE "limpiar" cola de eventos indeseados. DO WHILE NextAppEvent() <> xbe_None nEvent := AppEvent( @mp1, @mp2, @oXbp ) oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO ENDIF SetAppFocus( oXbp ) RETURN Ntese que PostAppEvent() enva un mensaje xbeP_Quit y NO xbeP_Close. En este caso, slo el ciclo de eventos que procese xbeP_Quit har que la aplicacin se cierre. Es lo que se aprecia en el ciclo del procedimiento MAIN. [...] Fin de Aplicacin es xbeP_Quit y NO xbeP_Close xbeP_Close es ms usual para componentes o dilogos menores nEvent := xbe_None DO WHILE nEvent <> xbeP_Quit nEvent := AppEvent( @mp1, @mp2, @oXbp ) oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO RETURN *EOF Sin profundizar las explicaciones, agrego el cdigo fuente bsico para mostrar cmo se crea un dilogo, un men de seleccin de una tabla, tres acciones bsicas del men ABM con habilitacin / deshabilitacin desde cdigo fuente, carga de datos desde una tabla seleccionada, edicin de un registro en blanco (Alta), exposicin de un registro con edicin deshabilitada (Bajas) y edicin de los datos de un registro (Modificacin). Queda en manos de ustedes, queridos colegas, el completar los faltantes. Por ejemplo: Se ha dejado intencionalmente un espacio arriba y debajo del area de datos del dilogo. Pens que se podran usar XbpToolBar() y XbpStatusBar(). Si surge alguna duda, aqu estar. Saludos Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- GUIABM01.zip | |
Jose Luis Otermin | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Wed, 17 Nov 2010 19:43:00 -0300 Para quienes han compilado los fuentes que envi, probablemente hayan obtenido una pantalla como la que se adjunta. La separacin entre el men y la primer entrada de datos XbpGet, es el NUMEROMAGICO, aun no discutido. La separacin entre el borde externo del XbpDialog y el area de entrada de datos es aPos, el arreglo de valores {0,25} que se advierte en GuiStdDialog(). Si alguien tiene dificultad para entender el cdigo o tiene dudas sobre cmo funciona algo, est a tiempo para preguntar porque el fuente se volver ms complejo a medida que se le agreguen prestaciones. Es de notar que el men invocando al ABM es en realidad un substituto del ratn cuando en la actualidad nadie hara uso del men teniendo una barra llena de botones. Hemos visto un modelo procedural hasta ahora para que sea sencillo comprender cmo una propuesta aparentemente fcil de programar se va poniendo cada vez ms oscura para seguir y el orden de ejecucin del cdigo tiende a parecer un plato de spaghettis. Pues bien, todo este desarrollo culminar en una clase derivada de XbpDialog. Esa clase tendr como partes principales: a) Inicializacin (lo que vimos bajo la consigna Pre-Condiciones). b) Creacin y ejecucin del ABM - Algoritmo c) Estado final obtenido luego de la ejecucin del algoritmo - Post-Condiciones. Quede claro que no se trata sto de una clase magistral sobre cmo programar un ABM. Se trata de una discusin donde las opiniones son valiosas y probablemente aporten ideas creativas sobre el tema. Estoy seguro que ms de un seguidor de este hilo tiene inquietudes que no ha compartido con nosotros. Sera bueno leer esas inquietudes antes que el cdigo se transforme en una caja negra. Espero preguntas. Jorge, Te parece claro hasta ahora? Jos, Consideras que los fuentes hasta aqu vistos son ms complejos que los habuales? Gustavo, Te parece que tu fuente se podra convertir con ayuda de DOSSay() y DOSGet()? Angel, Qu te ha parecido el area desplazable? Carlos, Es crptico el cdigo Xbase++? Vamos anmense a comentar! Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- ABM-GUI_01.png | |
Osvaldo Ramirez | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Wed, 17 Nov 2010 21:15:04 -0700 Excelente amigo Me quedo una duda, el pq del xbeP_Close y el quit ? Saludos Osvaldo Ramirez | |
Jose Luis Otermin | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Thu, 18 Nov 2010 08:32:48 -0300 Hola mi cuate, > Excelente, amigo Ya haba pensado "ser que Don Ramrez ya tiene todo resuelto y por eso ni mira el foro?". > Me quedo una duda, el pq del xbeP_Close y el quit ? Je, sta es una muy buena pregunta Bueno, para cerrar "fsicamente" un formulario de dilogo uno tiene que hacer click en el botn rojo con la cruz. Eso equivale a ejecutar oDlg:close() en cdigo puro y duro. La cosa se mejora si tenemos un botn donde le decimos al usuario "cuando termines de jugar con los datos, hazme click". En ese caso el botn podra ejecutar en su activacin: {| uNIL1, uNIL2, oBoton | GuardarDatos(oBoton), oDlg:close() } Sin embargo tendra que escribir DOS llamadas a funcin/procedimiento en una misma sentencia y eso no es lo ms aconsejable a la hora de depurar (usando XppDebug). Entonces lo ms apropiado sera: PROCEDURE GuardarDatos(oBoton) LOCAL oDlg := oBoton:Setparent():SetParent() [...] oDlg:close() RETURN En este cdigo NO podemos ejecutar oDlg:close() directamente porque el procedimiento desconoce la existencia de oDlg. Podemos obtener su ancestro a travs de su padre pues la distancia (y relacin) mnima es: XbpDialog |---- DrawingArea |------- XbpPushButton Cuando se ejecuta LOCAL oDlg := oBoton:Setparent():SetParent() Ocurre: oBoton:SetParent() -> devuelve DrawingArea. DrawingArea:SetParent() -> devuelve XbpDialog Como sabemos por los manuales, el evento :close() se ejecutar en el XbpDialog. Podemos hacer dos cosas: a) Ejecutar :close() "a mano" b) Lanzar un evento y que el sistema lo administre: PostAppEvent( xbeP_Close ) El evento xbeP_Close ser ejecutado en el primer ciclo de eventos que est controlando la ejecucin. nEvent := xbe_None DO WHILE nEvent <> xbeP_Close nEvent := AppEvent( @mp1, @mp2, @oXbp ) oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO Es comn que un "Click" tenga un rebote y se genere ms de un xbeP_Close. Si queremos cerrar un dilogo en especial haremos: PostAppEvent( xbeP_Close , , , oDlg) Si estamos cerrando no slo el dilogo sino la aplicacin misma, podemos evitar el procesamiento automtico de xbeP_Close y usaremos xbeP_Quit, el cual sabemos que no ser procesado en ningn otro ciclo de eventos que no sea el nuestro: nEvent := xbe_None DO WHILE nEvent <> xbeP_Quit nEvent := AppEvent( @mp1, @mp2, @oXbp ) oXbp:handleEvent( nEvent, mp1, mp2 ) ENDDO Entonces, en el ciclo del Dilogo principal de la aplicacin usaremos xbeP_Quit. Se entendi o lo enred ms? Gracias por participar > Saludos > Osvaldo Ramirez Un abrazo Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Angel Pais | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Thu, 18 Nov 2010 14:18:34 -0200 On Wed, 17 Nov 2010 19:43:00 -0300, Jose Luis Otermin wrote: > Para quienes han compilado los fuentes que envié, probablemente hayan > obtenido una pantalla como la que se adjunta. > > La separación entre el menú y la primer entrada de datos XbpGet, es el > NUMEROMAGICO, aun no discutido. > La separación entre el borde externo del XbpDialog y el area de entrada de > datos es aPos, el arreglo de valores {0,25} que se advierte en > GuiStdDialog(). > > Si alguien tiene dificultad para entender el código o tiene dudas sobre cómo > funciona algo, > está a tiempo para preguntar porque el fuente se volverá más complejo a > medida que se le agreguen prestaciones. > > Es de notar que el menú invocando al ABM es en realidad un substituto del > ratón cuando en la actualidad nadie haría uso del menú teniendo una barra > llena de botones. > > Hemos visto un modelo procedural hasta ahora para que sea sencillo > comprender cómo una propuesta aparentemente fácil de programar se va > poniendo cada vez más oscura para seguir y el orden de ejecución del código > tiende a parecer un plato de spaghettis. > > Pues bien, todo este desarrollo culminará en una clase derivada de > XbpDialog. > Esa clase tendrá como partes principales: > > a) Inicialización (lo que vimos bajo la consigna Pre-Condiciones). > b) Creación y ejecución del ABM - Algoritmo > c) Estado final obtenido luego de la ejecución del algoritmo - > Post-Condiciones. > > Quede claro que no se trata ésto de una clase magistral sobre cómo programar > un ABM. > Se trata de una discusión donde las opiniones son valiosas y probablemente > aporten ideas creativas sobre el tema. > Estoy seguro que más de un seguidor de este hilo tiene inquietudes que no ha > compartido con nosotros. Sería bueno leer esas inquietudes antes que el > código se transforme en una caja negra. > > Espero preguntas. > Jorge, ¿Te parece claro hasta ahora? > José, ¿Consideras que los fuentes hasta aquí vistos son más complejos que > los habuales? > Gustavo, ¿Te parece que tu fuente se podría convertir con ayuda de DOSSay() > y DOSGet()? > Angel, ¿Qué te ha parecido el area desplazable? > Carlos, ¿Es críptico el código Xbase++? > > Vamos ¡anímense a comentar! Por ahora el desarrollo viene bien. Los gets en el area desplazable no hacen el scroll a medida que uno navega entre ellos pero eso es un detalle. Yo haria el ejemplo mas modular para que despues pasar a una clase sea mas facil. Ejemplo: una funcion que abre el archivo, otra que da el alta, otra que edita, otra que da de baja, otra que imprime etc. Visualmennte se ve muy dura pero eso se tunea despues. Creo que al final se va a tener un buen ejemplo generico con codigo xbase++ puro, que cubra los 3 aspectos mas fundamentales es un paquete de desarrollo de este tipo. a) manejo de tablas b) ingreso rapido de datos con validacion c) salida impresa de datos abrazos !!! | |
Gustavo M. Burgos | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Thu, 18 Nov 2010 16:52:54 -0300 La verdad recien estoy viendo los comentarios, ya que no tuve el timepo suficiente. pero ahora voy a ver el codigo. y creo, como comente antes hasta ahora solo e trabjado en forma procedual. pero seguro que lo qeu se esta publicando es muy valioso. saludos y luego les comento a ver si puedo implementarlos en mis sistema. un abrazo Gustavo M. Burgos Rivadavia 278 Pcia Roque Saenz Pea - Chaco Argentina Fijo 03732-420635 Movil 03732-15408559 Burmanspm@arnet.com.ar "Angel Pais" <amigosam@adinet.com.uy> escribi en el mensaje news:g7sibbqrftes.29it4g6mjvq6.dlg@40tude.net... > On Wed, 17 Nov 2010 19:43:00 -0300, Jose Luis Otermin wrote: > >> Para quienes han compilado los fuentes que envi, probablemente hayan >> obtenido una pantalla como la que se adjunta. >> >> La separacin entre el men y la primer entrada de datos XbpGet, es el >> NUMEROMAGICO, aun no discutido. >> La separacin entre el borde externo del XbpDialog y el area de entrada >> de >> datos es aPos, el arreglo de valores {0,25} que se advierte en >> GuiStdDialog(). >> >> Si alguien tiene dificultad para entender el cdigo o tiene dudas sobre >> cmo >> funciona algo, >> est a tiempo para preguntar porque el fuente se volver ms complejo a >> medida que se le agreguen prestaciones. >> >> Es de notar que el men invocando al ABM es en realidad un substituto del >> ratn cuando en la actualidad nadie hara uso del men teniendo una barra >> llena de botones. >> >> Hemos visto un modelo procedural hasta ahora para que sea sencillo >> comprender cmo una propuesta aparentemente fcil de programar se va >> poniendo cada vez ms oscura para seguir y el orden de ejecucin del >> cdigo >> tiende a parecer un plato de spaghettis. >> >> Pues bien, todo este desarrollo culminar en una clase derivada de >> XbpDialog. >> Esa clase tendr como partes principales: >> >> a) Inicializacin (lo que vimos bajo la consigna Pre-Condiciones). >> b) Creacin y ejecucin del ABM - Algoritmo >> c) Estado final obtenido luego de la ejecucin del algoritmo - >> Post-Condiciones. >> >> Quede claro que no se trata sto de una clase magistral sobre cmo >> programar >> un ABM. >> Se trata de una discusin donde las opiniones son valiosas y >> probablemente >> aporten ideas creativas sobre el tema. >> Estoy seguro que ms de un seguidor de este hilo tiene inquietudes que no >> ha >> compartido con nosotros. Sera bueno leer esas inquietudes antes que el >> cdigo se transforme en una caja negra. >> >> Espero preguntas. >> Jorge, Te parece claro hasta ahora? >> Jos, Consideras que los fuentes hasta aqu vistos son ms complejos que >> los habuales? >> Gustavo, Te parece que tu fuente se podra convertir con ayuda de >> DOSSay() >> y DOSGet()? >> Angel, Qu te ha parecido el area desplazable? >> Carlos, Es crptico el cdigo Xbase++? >> >> Vamos anmense a comentar! > > Por ahora el desarrollo viene bien. > Los gets en el area desplazable no hacen el scroll a medida que uno navega > entre ellos pero eso es un detalle. > Yo haria el ejemplo mas modular para que despues pasar a una clase sea mas > facil. > > Ejemplo: una funcion que abre el archivo, otra que da el alta, otra que > edita, otra que da de baja, otra que imprime etc. > > Visualmennte se ve muy dura pero eso se tunea despues. > > Creo que al final se va a tener un buen ejemplo generico con codigo > xbase++ > puro, que cubra los 3 aspectos mas fundamentales es un paquete de > desarrollo de este tipo. > a) manejo de tablas > b) ingreso rapido de datos con validacion > c) salida impresa de datos > > abrazos !!! | |
Jose Luis Otermin | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Thu, 18 Nov 2010 20:48:28 -0300 Angel, Muchas gracias por participar! > Por ahora el desarrollo viene bien. > Los gets en el area desplazable no hacen el scroll a medida que uno navega > entre ellos pero eso es un detalle. A ver si te gusta ms en esta versin... > Yo haria el ejemplo mas modular para que despues pasar a una clase sea mas > facil. Totalmente de acuerdo. > Ejemplo: una funcion que abre el archivo, otra que da el alta, otra que > edita, otra que da de baja, otra que imprime etc. Si, estn en el fuente que dice "Procesos.prg" > Visualmennte se ve muy dura pero eso se tunea despues. Bueno, le agregu una XbpToolBar() como para que se vea un poco mejor terminada, le falta aun. > Creo que al final se va a tener un buen ejemplo generico con codigo > xbase++ > puro, que cubra los 3 aspectos mas fundamentales es un paquete de > desarrollo de este tipo. > a) manejo de tablas > b) ingreso rapido de datos con validacion > c) salida impresa de datos Si. Es la intencin primaria Lo de la salida impresa me gustara que alguien hiciera un aporte as puedo concentrarme ms en la funcionalidad del resto. Un abrazo grande, capo. GUIABM05.zip abm-gui-conToolBar.png | |
Angel Pais | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Thu, 18 Nov 2010 22:05:39 -0200 On Thu, 18 Nov 2010 20:48:28 -0300, Jose Luis Otermin wrote: > > Lo de la salida impresa me gustaría que alguien hiciera un aporte así puedo > concentrarme más en la funcionalidad del resto. > > Un abrazo grande, capo. Tengo una rutina de impresion que esta bastante facil de usar y la voy a aportar en su momento Saludos Angel | |
Jose Luis Otermin | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Fri, 26 Nov 2010 13:03:01 -0300 Angel, Le tu ltimo mensaje sobre el tema impresin. Tu deseo de avance automtico del scroll cuando el campo get cambia de foco: //////////////////////////////////////////////////// Administra los eventos producidos. PROCEDURE DoEvents() //////////////////////////////////////////////////// LOCAL nEvent, mp1, mp2, oXbp LOCAL oDataArea := GetDataArea( SetAppWindow()) Fin de Aplicacin es xbeP_Quit y NO xbeP_Close xbeP_Close es ms usual para componentes o dilogos menores nEvent := xbe_None DO WHILE nEvent <> xbeP_Quit nEvent := AppEvent( @mp1, @mp2, @oXbp ) oXbp:handleEvent( nEvent, mp1, mp2 ) IF nEvent = xbeP_Keyboard DO CASE CASE mp1 $ {xbeK_UP, xbeK_SH_TAB } DesplazarAreaDeDatos( oDataArea, SCROLL_UP ) CASE mp1 $ { xbeK_PGUP, xbeK_CTRL_PGUP, xbeK_CTRL_HOME } DesplazarAreaDeDatos( oDataArea, SCROLL_UP, .T. ) CASE mp1 $ { xbeK_DOWN, xbeK_TAB, xbeK_ENTER } DesplazarAreaDeDatos( oDataArea, SCROLL_DOWN ) CASE mp1 $ { xbeK_PGDN, xbeK_CTRL_PGDN, xbeK_CTRL_END} DesplazarAreaDeDatos( oDataArea, SCROLL_DOWN, .T. ) CASE mp1 = xbeK_LEFT DesplazarAreaDeDatos( oDataArea, SCROLL_LEFT ) CASE mp1 = xbeK_RIGHT DesplazarAreaDeDatos( oDataArea, SCROLL_RIGHT ) ENDCASE ENDIF ENDDO RETURN Espero haber cumplido tu deseo Un abrazo Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Angel Pais | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Fri, 26 Nov 2010 14:12:53 -0200 On Fri, 26 Nov 2010 13:03:01 -0300, Jose Luis Otermin wrote: > Angel, > > Leí tu último mensaje sobre el tema impresión. > Tu deseo de avance automático del scroll cuando el campo get cambia de foco: > > //////////////////////////////////////////////////// > > Administra los eventos producidos. > > PROCEDURE DoEvents() > > //////////////////////////////////////////////////// > LOCAL nEvent, mp1, mp2, oXbp > LOCAL oDataArea := GetDataArea( SetAppWindow()) > Fin de Aplicación es xbeP_Quit y NO xbeP_Close > xbeP_Close es más usual para componentes o diálogos menores > nEvent := xbe_None > DO WHILE nEvent <> xbeP_Quit > nEvent := AppEvent( @mp1, @mp2, @oXbp ) > oXbp:handleEvent( nEvent, mp1, mp2 ) > IF nEvent = xbeP_Keyboard > DO CASE > CASE mp1 $ {xbeK_UP, xbeK_SH_TAB } > DesplazarAreaDeDatos( oDataArea, SCROLL_UP ) > CASE mp1 $ { xbeK_PGUP, xbeK_CTRL_PGUP, xbeK_CTRL_HOME } > DesplazarAreaDeDatos( oDataArea, SCROLL_UP, .T. ) > CASE mp1 $ { xbeK_DOWN, xbeK_TAB, xbeK_ENTER } > DesplazarAreaDeDatos( oDataArea, SCROLL_DOWN ) > CASE mp1 $ { xbeK_PGDN, xbeK_CTRL_PGDN, xbeK_CTRL_END} > DesplazarAreaDeDatos( oDataArea, SCROLL_DOWN, .T. ) > CASE mp1 = xbeK_LEFT > DesplazarAreaDeDatos( oDataArea, SCROLL_LEFT ) > CASE mp1 = xbeK_RIGHT > DesplazarAreaDeDatos( oDataArea, SCROLL_RIGHT ) > ENDCASE > ENDIF > ENDDO > > RETURN > > Espero haber cumplido tu deseo > > Un abrazo En realidad es algo mas complicado que eso. Viendo los fuentes de TopDown que por obvias razones no voy a publicar se trata de que cuando un objeto get toma foco el programa averigua en que posicion relativa se encuentra respecto de la ventana principal y hace el scroll en la direccion adecuada hasta que quede en el area visible. Gran abrazo, estoy recopilando mis rutina de impresion en algo "mostrable" para postearlas aqui. | |
Jose Luis Otermin | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Fri, 26 Nov 2010 17:55:59 -0300 Querido Angel, Leo y releo, pero aun no comprendo bien tu ltimo mensaje. "PD: Aun quedan temas de toma de datos sin resolver, como por ejemplo que el scroll no es automatico cuando cambio el foco del get." El foco del get puede cambiar porque salimos del campo (con xbeK_ENTER, xbeK_TAB, xbeK_SH_TAB. xbeK_UP o xbeK_DOWN por citar algunas teclas). En todos esos eventos (incluidos PagArr, PagAbj, Control PgArr, Control PgAbj) el foco es cambiado con xito. Bajo qu circunstancias el foco podra cambiar y ser necesario el scroll? Este es un desarrollo comunitario. As que si alguien ms quiere opinar o sugerir, bienvenido! Gracias por escribir Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Angel Pais | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Fri, 26 Nov 2010 23:13:24 -0200 On Fri, 26 Nov 2010 17:55:59 -0300, Jose Luis Otermin wrote: > Querido Angel, > > Leo y releo, pero aun no comprendo bien tu último mensaje. > > "PD: Aun quedan temas de toma de datos sin resolver, como por ejemplo que el > scroll no es automatico cuando cambio el foco del get." > > El foco del get puede cambiar porque salimos del campo (con xbeK_ENTER, > xbeK_TAB, xbeK_SH_TAB. xbeK_UP o xbeK_DOWN por citar algunas teclas). > > En todos esos eventos (incluidos PagArr, PagAbj, Control PgArr, Control > PgAbj) el foco es cambiado con éxito. > > ¿Bajo qué circunstancias el foco podría cambiar y ser necesario el scroll? > > Este es un desarrollo comunitario. Así que si alguien más quiere opinar o > sugerir, ¡bienvenido! > > Gracias por escribir Voy a intentar conseguir un software que filme una pantalla para mostrarte el comportamiento de la TD respecto de la rutina de xbase++ pura. Pero primero intentare hacer una decripcion escrita: supongamos que tenemos 10 gets de los cuales 7 quedan visibles y 3 quedan ocultos porque no entran en la pantalla cuando doy enter despues del primer get el foco debe pasar al segundo get pero no debe haber scroll porque ambos gets son visibles en cambio cuando doy enter en el septimo get el foco debe pasar al octavo get y hay la pantalla debe moverse automaticamente arriba para que el octavo get sea visible se entiende ? | |
Jose Luis Otermin | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Fri, 26 Nov 2010 22:49:40 -0300 Angel, Si substituyes la funcin que est en la ltima versin de ABM-GUI con la que sub en el mensaje anterior, se comporta tal como lo describes. Prueba y me cuentas Un abrazo Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- "Angel Pais" <amigosam@adinet.com.uy> escribi en el mensaje news:bugp6pl7z0zj.t35udzf2thij.dlg@40tude.net... > On Fri, 26 Nov 2010 17:55:59 -0300, Jose Luis Otermin wrote: > >> Querido Angel, >> >> Leo y releo, pero aun no comprendo bien tu ltimo mensaje. >> >> "PD: Aun quedan temas de toma de datos sin resolver, como por ejemplo que >> el >> scroll no es automatico cuando cambio el foco del get." >> >> El foco del get puede cambiar porque salimos del campo (con xbeK_ENTER, >> xbeK_TAB, xbeK_SH_TAB. xbeK_UP o xbeK_DOWN por citar algunas teclas). >> >> En todos esos eventos (incluidos PagArr, PagAbj, Control PgArr, Control >> PgAbj) el foco es cambiado con xito. >> >> Bajo qu circunstancias el foco podra cambiar y ser necesario el >> scroll? >> >> Este es un desarrollo comunitario. As que si alguien ms quiere opinar o >> sugerir, bienvenido! >> >> Gracias por escribir > > Voy a intentar conseguir un software que filme una pantalla para mostrarte > el comportamiento de la TD respecto de la rutina de xbase++ pura. > Pero primero intentare hacer una decripcion escrita: > > supongamos que tenemos 10 gets de los cuales 7 quedan visibles y 3 quedan > ocultos porque no entran en la pantalla > > cuando doy enter despues del primer get el foco debe pasar al segundo get > pero no debe haber scroll porque ambos gets son visibles > > en cambio cuando doy enter en el septimo get el foco debe pasar al octavo > get y hay la pantalla debe moverse automaticamente arriba para que el > octavo get sea visible > > se entiende ? | |
Pablo Botella | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Sat, 27 Nov 2010 12:13:35 +0100 Hola, > Si substituyes la función que está en la última versión de ABM-GUI con la > que subí en el mensaje anterior, se comporta tal como lo describes. Lo que Angel quería decir es que la comprobación se debe hacer cuando un control toma el foco sea cual sea el metodo. En la fúnción ot4xb_dirty_dlgedit() yo estaba haciendo eso sin complicarme mucho la vida ya que cuando un control toma el foco el padre recibe una notificación a traves de WM_COMMAND y ahi mismo es un buen sitio para comprobar si el control es visible y hacer el scroll correspondiente en caso contrario. Ahi adjunto las fuentes por si pudieran ser de alguna utilidad. //dirty_dlg_edit.cpp linea 1211 case WM_COMMAND: ..... switch( HIWORD(wp) ) { case CBN_SETFOCUS: case BN_SETFOCUS: case EN_SETFOCUS: { GetPage()->on_edit_focus(lp); return 0; } ...... linea 611 void ot4xb_dirty_dlgedit::page_spec_t::on_edit_focus( LPARAM lp ) ..... La verdad es que no sería muy complicado montar una funcioncita genérica, aun no tengo decidido si sería más conveniente hacerlo con un hook para todas las ventanas que tuvieran una propiedad concreta o bien subclaseando la ventana de un dialogo ( Para los nuevos: subclasear una ventana es reemplazar el procedimiento de ventana con SetWindowLong() no tiene nada que ver con las clases que usamos en PRG ) Pendiente aun de decidir cual de los 2 caminos tomar para implementarlo la función desde xbase sería igual, quizas algo asi ot4xb_automatic_scroll_focus( VentanaContenedora , Ventana de datos ) Ahi lo suyo sería en lugar de usar scrollbars como controles diferentes que la funcioncita le cambiara el estilo a la ventana contenedora para usar los scrollbars integrados que traen todas las ventanas si se les añade el estilo WS_VSCROLL, y a partir de ahi no preocuparnos ya de nada. No sé si podré sacar tiempo este fin de semana pero en cualquier caso el próximo ot4xb va a traer esta función, y así aporto mi granito de arena a este proyecto, para los que no quieran usar ot4xb a pesar de que es gratis, pues siempre pueden echar un ojo a las fuentes y tratar de implementarlo a base de DllCall() y BAP aunque es mucho más costoso. El ejemplo más sencillo seria usar un XbpDialog normalito sin scroll ni nada y usar drawingarea como ventana de datos oDlg := XbpDialog():New( blablabla.... ) oDlg:Create() como necesitamos 2 handles de ventana pues hacemos primero el create ot4xb_automatic_scroll_focus( oDlg , oDlg:drawingArea ) .... creamos los controles y le damos el foco al que queramos SetAppFocus( oEdit ) y ahi ya se hace el scroll automaticamente y nada más Saludos, Pablo Botella ot4xb_dirty_dlgedit.cpp ot4xb_dirty_dlgedit_internal.hpp | |
Pablo Botella | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Sun, 28 Nov 2010 11:37:31 +0100 Hola a todos, Ya quedó lista la funcioncita de autoscroll Para poder usarle necesitais bajar el ultimo ot4xb ( 1.5.16.209 ) de mi pagina www.xbwin.com y el uso no puede ser más facil una vez creado el dialogo antes de meterle los controles ot4xb_automatic_scroll_focus(contenedor,panel,altura,vrow_size , disable_wheel ) En el ejemplo que adjunto usamos un XbpDialog como contenedor y su drawingArea como panel, pero no hay ninguna limitación al respecto se puede usar cualquier par de ventanas siempre que el panel sea el unico hijo del contenedor. En el tercer parámetro necesitamos conocer de antemano la altura total del panel, la funcioncita lo redimensiona y asi podemos ir metiendole los controles a continuación. Esto es necesario porque Xbase++ mueve los controles al redimensionar las ventanas. El cuarto parámetro es el la altura que van a tener los controles, incluyendo el margen, por defecto usamos el valor 20. No es demasiado importante el proposito es hacer que se vea el siguiente control cuando hacemos el scroll automatico, pero tampoco pasa nada si hay controles de distinta altura o con distinta separación. La mejor manera de ajustar el valor es jugar un poco con el una vez que tengamos nuestro dialogo montado, para ajustar un poco el efecto estetico. El quinto parametro, por defecto .F. nos sirve para manipular nosotros los eventos de la ruedecita del ratón. En principio ot4xb_automatic_scroll_focus() maneja los eventos del mouse wheel internamente, pero en alguna ocasiós especial podemos querer manejarlo nosotros con los metodos que nos da Xbase++ , en esos casos ponemos el quito parametro a .T. y asi ot4xb_automatic_scroll_focus() no hace nada con la ruedecita del raton. Bueno, pues probarlo y me comentais que os parece. Saludos, Pablo Botella TestAutoscroll.zip | |
Pablo Botella | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Sun, 28 Nov 2010 16:32:32 +0100 > Ya quedó lista la funcioncita de autoscroll > Para poder usarle necesitais bajar el ultimo ot4xb ( 1.5.16.209 ) de mi pagina www.xbwin.com > y el uso no puede ser más facil Hacía alguna cosilla rara en el resize. ya esta arreglado en la 1.5.16.210 http://www.xbwin.com/download/snapshots/ot4xb_001_005_016_210.zip | |
Jose Luis Otermin | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Fri, 19 Nov 2010 12:54:20 -0300 Para quienes recin se suman a esta discusin, se sugiere mirar la imagen adjunta. En ella se aprecian las capas de objetos que participan de la base del objeto ABM que iremos construyendo a lo largo de esta conversacin. Todas las preguntas son bienvenidas y necesarias. Son necesarias porque a veces hay detalles que muchos ojos ven mejor que slo dos (los mos). Por favor, sintanse cmodos y opinen. Saludos Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- GUI-ABM-MainDesign.png | |
Jose Luis Otermin | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Thu, 25 Nov 2010 14:24:00 -0300 Contino con el diseo del ABM. En el adjunto se aprecian los componentes y su jerarqua de relacin. A menos que hayan preguntas, no voy a explicar este diagrama ni ningn otro. Saludos Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- GUI-ABM-FormContainer.png | |
Jose Luis Otermin | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Sun, 05 Dec 2010 10:17:22 -0300 Hemos desarrollado: Organizacin Central: - Un Dilogo bsico. - Una Barra de Herramientas primitiva. - Un Area de Datos donde pueden desplegarse los campos de una Tabla de Datos. Rutinas Auxiliares: - Despliegue de texto al estilo DOS. - Despliegue de campos de entrada de datos al estilo DOS. - Esbozo de rutinas para Altas - Bajas - Modificaciones. Como podr advertirse, existe una ventaja en la separacin de tareas. La separacin del cdigo que ejecuta una tarea especfica introduce claridad en el anlisis y, fundamental, en las tareas de mantenimiento. La produccin de errores es propia del desarrollo de cualquier tarea. Por tratarse de un ingrediente (indeseado) de los sistemas, es tarea del analista el separar en grnulos pequeos (cuanto ms pequeos, mejor) a los componentes de una tarea. Ntese que digo "tarea" y no "rutina". Tarea es un conjunto de actividades relacionadas entre s y que interactan con el entorno con un fin determinado. Una rutina es una actividad determinada y forma parte de una tarea. Dicho sto, alguien puede identificar las tareas dentro de un A-B-M? Es importante hacerlo EN ESTE PUNTO DEL DESARROLLO. Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Osvaldo Ramirez | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Fri, 26 Nov 2010 21:06:56 -0700 Me gusto la imagen don gato Saludos | |
Jose Luis Otermin | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Sat, 27 Nov 2010 05:48:25 -0300 Bueno, ya es un comienzo > Me gusto la imagen don gato > Saludos | |
AUGE_OHR | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Sat, 27 Nov 2010 10:14:46 +0100 hi, where do you get all those nice Picture from ? did you work with Win7 DWM ( Desktop Window Manager ) and "Aero Glass" ? greetings by OHR Jimmy | |
Jose Luis Otermin | Re: Xbp = Xbase++ Parts = Componentes Xbase++ on Sat, 27 Nov 2010 08:24:00 -0300 Hallo Jimmy!! Hola Jimmy!! Wie gehts? Qu tal? > where do you get all those nice Picture from ? In fact those pictures are a PowerPoint draw. De hecho esas imgenes son un dibujo hecho con PowerPoint. ) > did you work with Win7 DWM ( Desktop Window Manager ) and "Aero Glass" ? Nope, I didn't had enough time to test Win 7. No, no he tenido suficiente tiempo para probar Win 7. Hope you liked them ) Espero te hayan gustado. > greetings by OHR > Jimmy With my best wishes, Con mis mejores deseos, Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- |