SlideShare une entreprise Scribd logo
1  sur  7
Télécharger pour lire hors ligne
Trucos y consejos - La página de JM                                                                      Page 1 of 7




     Página principal          Programación            PowerBuilder       Volver




         Trucos y consejos para PowerBuilder

   Haz clic aquí si no ves correctamente la página.



   Esta es mi lista de trucos que he ido recopilando durante los tres años que trabajé con PowerBuilder.
   Algunos de ellos los los he encontrado en las (pocas) páginas que hay en la red sobre PowerBuilder, y otros
   son de mi cosecha.

   Espero que os sea de interés, y ya sabéis que si queréis publicar vuestro propio truco, no tenéis más que
   enviarlo a mi dirección de mail.




            Crear un Groupbox en Datawindow

            Categoría                  Datawindow


            Nivel                                          Básico


            Autor                      JM

            En muchas ocasiones se da la necesidad de relacionar distintos objetos de una datawindow
            FreeForm de manera que se agrupen visualmente. La solución rápida pasa por crear un
            rectángulo, pero esto nos da un aspecto bastante raro, ya que no admite el efecto 3D. Para
            crear este efecto, podremos hacerlo con dos rectángulos, el primero transparente y con la línea
            gris oscuro, y el segundo del mismo tamaño con la línea blanca. Después podremos darle
            efecto 3D Raised si situamos el rectángulo blanco 4 unidades por más a la izquierda y arriba, o
            efecto 3D Lowered si situamos el rectángulo blanco 4 unidades por más abajo y a la derecha.
            Aseguraros que el rectángulo blanco esta por detrás del gris, utilizando la opción "Send to
            Back".

                 Enviar por correo        Comentar con el autor




            Texto inclinado en Datawindow

            Categoría                  Datawindow


            Nivel                                          Básico


            Autor                      JM

            Los objetos "Text" de las datawindows tienen un atributo que nos permite establecer la
            inclinación del texto: "font.escapement". Para inclinar 45 grados debemos establecer un valor
            de 450. El único inconveniente es que esta inclinación no se verá en diseño ni durante la
            ejecución en modo normal, sino que sólo será visible en modo "Preview".

                 Enviar por correo        Comentar con el autor




http://www.lawebdejm.com/prog/pb/trucos_pb.htm                                                           04/12/2008
Trucos y consejos - La página de JM                                                                    Page 2 of 7




         Formas de llamar a un evento

         Categoría               PowerScript


         Nivel                                       Alto


         Autor                   JM


         Cuando necesitamos lanzar un evento manualmente, hasta la versión 4 teníamos una sola
         opción, utilizando las funciones TriggerEvent y PostEvent:

             Objeto.TriggerEvent( evento, wParam, lParam )
             Objeto.PostEvent( evento, wParam, lParam )


         A partir de la versión 5, se nos ofrece una nueva sintaxis, para soportar el paso de parámetros
         a eventos:
         La sintaxis general es la siguiente:

             Objeto.Tipo Comprobacion Momento Nombre( Argumentos )


         Cada uno de los elementos tiene el siguiente significado:

         - Objeto:
         El objeto del cual queremos invocar el evento. Se puede omitir, asumiendo el objeto "this".

         - Tipo:
         Indica a qué vamos a llamar: FUNCTION o EVENT. Si se omite, se utilizará la palabra clase
         FUNCTION.

         - Comprobacion:
         Indica en qué momento se comprobará la existencia de esa función o evento, o dicho de otro
         modo: en tiempo de diseño (STATIC) o en tiempo de ejecución (DYNAMIC). Hay que tener en
         cuenta que si llamamos con DYNAMIC, la comprobación se hará durante la ejecución, por lo
         que será mucho más lento que STATIC. Siempre que sea posible, hay que llamar de forma
         estática. Por defecto se considera STATIC.

         - Momento:
         Indica si se llamará la función o evento en el momento actual (TRIGGER) o al final de la cola
         de mensajes (POST). Por defecto se utilizará TRIGGER.

         - Nombre:
         El nombre de evento o función a llamar.

         - Argumentos:
         Argumentos necesario en la llamada.

         Ejemplos:

         // esto nos permite llamar a la función SetFocus pero que se ejecute al final
         // de la cadena de eventos en que estamos. Esta técnica es muy útil
         // para pasar el foco a un control, y asegurarnos que ninguna
         // instrucción posterior va a volver a pasar el foco a otro control.
         dw_maestro.POST SetFocus()

         // esta otra llamada lo que nos permite es pasar el foco a un control
         // desconocido en tiempo de diseño, concretamente al primer control
         // que haya en el "tab_1". Si este control, contiene la función "SetFocus()",
         // se efectuará la llamada, si no es así, se producirá un error de ejecución.
         tab_1.control[1].Dynamic SetFocus()

         // ahora lo que hacemos es llamar estáticamente al evento "ue_evento"
         // del control actual (this). Si este evento no existe, se producirá un error
         // en la compilación del script durante el diseño.
         Event ue_evento("el parámetro")




http://www.lawebdejm.com/prog/pb/trucos_pb.htm                                                         04/12/2008
Trucos y consejos - La página de JM                                                                   Page 3 of 7




         // hace lo mismo que el ejemplo anterior, pero ejecutando el evento
         // "ue_pegar" de "cb_aceptar" al final de la cola de mensajes.
         // Además, la existencia de este evento se comprobará durante la ejecución,
         // no generando ningún error si no existiese (al contrario que las funciones).
         // Este ejemplo concreto, es muy útil para lanzar eventos a todos los controles
         // de una ventana (por ejemplo, el evento "pegar") y que si el control lo soporta,
         // reaccione al evento (si no lo soporta, no ocurrirá nada).
         cb_aceptar.Event Dynamic Post ue_pegar("el parámetro")


            Enviar por correo       Comentar con el autor




         Describe vs Object

         Categoría               Datawindow


         Nivel                                       Medio - bajo


         Autor                   JM

         Antes de la versión 5, la forma de acceder y manipular a un atributo de los objetos de
         datawindow era con las funciones "Describe" y "Modify".
         Su uso es muy flexible, pero a veces complicado, sobre todo cuando teníamos que meter
         cadenas dentro de cadenas a varios niveles.
         A partir de la versión 5, se nos ofrece una nueva forma de acceder: a través del objeto
         "DWObject".
         Este objeto, nos permite acceder a los atributos, utilizando la sintaxis normal de PowerScript,
         es decir, es operador ".".
         Por ejemplo, este describe:

         long    ll_color

         ll_color = Integer( dw_1.Describe("texto.background.color") )


         ahora lo podemos escribir como esto:

         long    ll_color

         ll_color = dw_1.object.texto.background.color


         Mucho más sencillo ¿no?. Además, al compilar el script, se hará una pequeña comprobación
         (que el objeto "texto" exista, que la propiedad "background" sea correcta, etc.), y se nos
         informará con un error si algo ha ido mal.
         Las funciones "Describe" y "Modify" se siguen manteniendo, y todavía son imprescindibles
         para acceder a objetos y/o propiedades que no conocemos sus nombre en tiempo de diseño, o
         dicho de otro modo: para construir la expresión de datawindow en tiempo de ejecución.

            Enviar por correo       Comentar con el autor




         Usar el 'Initial Value' para indicar los valores iniciales

         Categoría               Datawindow


         Nivel                                       Básico


         Autor                   JM




http://www.lawebdejm.com/prog/pb/trucos_pb.htm                                                        04/12/2008
Trucos y consejos - La página de JM                                                                  Page 4 of 7




         Cuando quieras establecer un valor inicial (o por defecto) a una columna, la mejor solución es
         utilizando el atributo "Initial Value" dentro de la ventana "Columns Specifications".
         Con esto te asegurarás que cada vez que se inserte una nueva fila, se establecerá el valor
         indicado, y el estado de la fila será el correcto.
         Incluso puedes modificar este valor inicial a través de un Modify() o del DWObject
         correspondiente.
         Con esta técnica, puedes evitar escribir los SetItem() y SetItemStatus() cada vez que hagas un
         InsertRow(), y la ejecución siempre será mucho más rápida.

            Enviar por correo      Comentar con el autor




         Eliminar columnas invisibles.

         Categoría               Datawindow


         Nivel                                      Básico


         Autor                   JM

         Cada vez que hagas una datawindow, puedes eliminar todos los objetos columna que no vayan
         a visualizarse, en vez de ponerlos como invisibles.
         Es decir, si creas un SELECT con 5 columnas, pero en la datawindow sólo vas a ver una de
         ellos, puedes eliminar los 4 objetos columna que te sobran. Incluso si más adelante tienes
         pensado hacer GetItem() o SetItem() sobre esas columnas, puedes hacerlo, ya que una cosa es
         la columna (que existirá mientras aparezca en la ventana "Columns Specifications") o otra es
         el "objeto columna" (que puede existir o no).
         Lo único que debes tener en cuenta es que si quieres cambiar el nombre a una columna, debes
         cambiarselo al "objeto columna" que la represente. Para asegurarte de cual es el nombre de la
         columna, debes ir a la ventana de "Columns Specifications" y allí aparecerá el nombre que
         tienes que usar tanto en el GetItem() y SetItem() como en cualquier otra función que haga
         referencia al nombre de una columna.

            Enviar por correo      Comentar con el autor




         Uso del 'Retrieve as Needed'

         Categoría               Datawindow


         Nivel                                      Medio - bajo


         Autor                   JM



         En ciertas datawindows que recuperan muchos registros, puedes utilizar la propiedad
         "Retrieve as Needed" para acelerar esta recuperación.

         El uso es muy sencillo: se activa la opción "Rows - Retrieve as Needed" y se mantendrá el
         cursos abierto en la base de datos, para ir recuperando los registros conforme se necesitan:
         cuando el usuario haga scroll, o nos situemos en una fila con el ScrollToRow().

         El principal inconveniente es que si utilizas funciones sumarias en campos calculados, o has
         ordenado la datawindow, esa opción no tendrá efecto, ya que en estos casos, es necesario
         contar con el conjunto de datos completo.




http://www.lawebdejm.com/prog/pb/trucos_pb.htm                                                       04/12/2008
Trucos y consejos - La página de JM                                                                   Page 5 of 7




         Ten en cuenta que en muchas ocasiones, no ahorrarás tiempo, ya que el tiempo que trascurre
         desde que recuperas el primer registro hasta el último, no es demasiado grande. En estos
         casos, el mayor tiempo se da desde que se lanza la instrucción SELECT, hasta que
         recuperamos el primer registro.

            Enviar por correo       Comentar con el autor




         Mover las columnas de una datawindow grid

         Categoría               Datawindow


         Nivel                                       Básico


         Autor                   JM

         Cuando se crea una datawindow grid, las columnas aparecen en el mismo orden en que las
         hayas dentro del SELECT y aparentemente ese orden no se puede cambiar.
         Lo que tienes que hacer el poner la datawindow en "preview" dentro del propio "datawindow
         painter", arrastrar la columna que quieras hasta dejarla en su nuevo sitio, y volver de nuevo a
         la vista diseño. Verás como la columna mantiene su nueva posición.

            Enviar por correo       Comentar con el autor




         Uso del 'Retrieve Rows to Disk'

         Categoría               Datawindow


         Nivel                                       Medio - bajo


         Autor                   JM

         Cuando una datawindow recupera mucho registros (miles), a veces puedes notar como el
         disco duro del equipo no para de leer y se ralentiza la recuperación.
         Esto es debido a que PB intenta almacenar todas las filas en memoria, y como no caben,
         Windows comienza a utilizar la memoria virtual y el archivo de intercambio para obtener más
         memoria.
         La mejor solución a esto puede ser activar la opción "Rows - Retrieve Rows to Disk", para que
         PB cree un archivo temporal donde almacenar estas filas, evitando así que Windows tenga que
         aumentar el tamaño del archivo de intercambio.

            Enviar por correo       Comentar con el autor




         Datawindows Tabulares con lineas de Grid

         Categoría               Datawindow


         Nivel                                       Medio




http://www.lawebdejm.com/prog/pb/trucos_pb.htm                                                        04/12/2008
Trucos y consejos - La página de JM                                                                     Page 6 of 7




         Autor                    JM

         Es posible crear datawindows de tipo "Tabular" pero que tengan líneas como si fueran de tipo
         "Grid".

         Para ello debes crear una linea horizontal en la banda detalle, y establecer los atributos "y1" e
         "y2" con la expresión "RowHeight() - 2" y en cada una de las líneas verticales, establecer el
         atributo "y1" a "0" e "y2" a la expresión "RowHeight() - 1".

         Con esto consigues que las líneas se ajusten automaticamente al tamaño del detalle, incluso si
         está marcada la opción "Autosize Height".

            Enviar por correo       Comentar con el autor




         Datawindow con barra de título pero que no se pueda mover

         Categoría                Datawindow


         Nivel                                       Alto


         Autor                    JM

         Muchas veces, queremos que un objeto datawindow tenga barra de título, pero nos molesta
         bastante que el usuario pueda moverlo.

         Para evitar esto podemos capturar el mensaje que Windows manda a la datawindow, y
         anularlo.
         Lo que tienes que hacer es declarar un evento de usuario, mapeandolo con el evento de
         sistema "pbm_syscommand", y después, codificar lo siguiente en este nuevo evento:

         uint      wParam, lParam

         wParam = message.wordparm

         CHOOSE CASE wParam
           CASE 61456, 61458
             message.processed = TRUE
             message.returnValue = 0

         END CHOOSE


            Enviar por correo       Comentar con el autor




         Descripción para el valor nulo de un campo

         Categoría                Datawindow


         Nivel                                       Básico


         Autor                    JM



         Cuando se añade una columna con estilo edición "DropDownListBox", se puede indicar el
         valor null! en el campo "Data value" y cualquier valor que quieras en el campo "Display
         value" (por ejemplo la descripción "Vacío"). Cuando este campo contenga un valor nulo,




http://www.lawebdejm.com/prog/pb/trucos_pb.htm                                                          04/12/2008
Trucos y consejos - La página de JM                                                                      Page 7 of 7




            aparecerá la descripción que hayamos indicado.
            Este truco también sirve para los campos con estilos de edición "CheckBox" y "RadioButton"

                 Enviar por correo        Comentar con el autor




            Crear un Datawindow a través de una instrucción SELECT

            Categoría                  Datawindow


            Nivel                                          Medio - bajo


            Autor                      Raúl Pacheco Huanca

            El siguiente código permite crear un Datawindow mediante una instrucción SELECT. Este
            ejemplo permite crear un Datawindow (También DataStore) dw_1 (Tipo Grid) de la fuente del
            DataWindow generada en la función de SyntaxFromSQL. Si ocurren errores de secuencia que
            se exhiben al usuario en una caja de mensaje. Observe que usted necesita llamar
            SetTransObject con SQLCA como su discusión antes de que usted pueda llamar la función de
            recuperación (Retrieve).

            String ERRORS, strConsulta
            String strEstilo, strSintaxis

            Setpointer(HourGlass!)

            //(Consulta SQL)
            strConsulta = "SELECT * FROM products ORDER BY productname Asc"

            // Estilo de presentación del datawindow
            //(Default) Tabular, Grid, Form (for freeform), Graph, Group y Label
            strEstilo = "style(type=grid)"

            // Generamos el Datawindow!
            strSintaxis = SQLCA.SyntaxFromSQL(strConsulta, strEstilo, ERRORS)

            // Preguntamos si ocurrio alguna exepción...
            if Len(ERRORS) > 0 then
                MessageBox("Cuidado", "Sintaxis Select genero el errors: " + ERRORS)
                return
            end if

            // Creamos el Objeto Datawindow
            dw_1.Create(strSintaxis, ERRORS)

            // Preguntamos si ocurrio alguna exepción...
            if Len(ERRORS) > 0 then
                // Preguntamos si ocurrio alguna exepción...
                MessageBox("Cuidado", "La creación del objeto genero el error: " + ERRORS)
                return
            end if

            // Asignamos la Transacción y Refrescamos
            dw_1.settransobject(sqlca)

            dw_1.retrieve()


                 Enviar por correo        Comentar con el autor




     Página principal          Programación            PowerBuilder       Volver                   © 2003 by JM




http://www.lawebdejm.com/prog/pb/trucos_pb.htm                                                           04/12/2008

Contenu connexe

Tendances (20)

Introduccion a j query
Introduccion a j queryIntroduccion a j query
Introduccion a j query
 
Swing
SwingSwing
Swing
 
Guia jQuery INCES Militar - Kurt Gude
Guia jQuery INCES Militar - Kurt GudeGuia jQuery INCES Militar - Kurt Gude
Guia jQuery INCES Militar - Kurt Gude
 
Java
JavaJava
Java
 
Caraline Cañas
Caraline CañasCaraline Cañas
Caraline Cañas
 
Guia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeansGuia practica funciones en java con NetBeans
Guia practica funciones en java con NetBeans
 
Librería swing java
Librería swing javaLibrería swing java
Librería swing java
 
Java - Tutorial Ventanas
Java - Tutorial VentanasJava - Tutorial Ventanas
Java - Tutorial Ventanas
 
Resumen el gran libro de andorid
Resumen el gran libro de andoridResumen el gran libro de andorid
Resumen el gran libro de andorid
 
Fundamentos de visual basic
Fundamentos de visual basicFundamentos de visual basic
Fundamentos de visual basic
 
Visual basic.docx
Visual basic.docxVisual basic.docx
Visual basic.docx
 
Guis en java-1pp_2012_
Guis en java-1pp_2012_Guis en java-1pp_2012_
Guis en java-1pp_2012_
 
Trabajo de programacion (visual basic)
Trabajo de programacion (visual basic)Trabajo de programacion (visual basic)
Trabajo de programacion (visual basic)
 
Jueves
JuevesJueves
Jueves
 
Generalidades de visual basic 8
Generalidades de visual basic 8Generalidades de visual basic 8
Generalidades de visual basic 8
 
Clase01net
Clase01netClase01net
Clase01net
 
INFOSAN Objetos en javascript
INFOSAN Objetos en javascriptINFOSAN Objetos en javascript
INFOSAN Objetos en javascript
 
Programación III (Java) - 06 Ventanas
Programación III (Java) - 06 VentanasProgramación III (Java) - 06 Ventanas
Programación III (Java) - 06 Ventanas
 
Folleto de visual basic
Folleto de visual basicFolleto de visual basic
Folleto de visual basic
 
Programacion en JAVA 2
Programacion en JAVA 2Programacion en JAVA 2
Programacion en JAVA 2
 

Similaire à Trucos PB Datawindow

Similaire à Trucos PB Datawindow (20)

Ejemplos de pseudocódigo
Ejemplos de pseudocódigoEjemplos de pseudocódigo
Ejemplos de pseudocódigo
 
Manual java
Manual javaManual java
Manual java
 
Introducción JavaScript
Introducción JavaScriptIntroducción JavaScript
Introducción JavaScript
 
Nvo objects powerbuilder
Nvo objects powerbuilderNvo objects powerbuilder
Nvo objects powerbuilder
 
Action script 3
Action script 3Action script 3
Action script 3
 
Todo Javascript para canibales
Todo Javascript para canibalesTodo Javascript para canibales
Todo Javascript para canibales
 
Javascript de Canibales
Javascript de CanibalesJavascript de Canibales
Javascript de Canibales
 
Java Script de canibaless
Java Script de canibalessJava Script de canibaless
Java Script de canibaless
 
Tutorial java fx_8_espanol
Tutorial java fx_8_espanolTutorial java fx_8_espanol
Tutorial java fx_8_espanol
 
Seguridad en access
Seguridad en accessSeguridad en access
Seguridad en access
 
Reportes
ReportesReportes
Reportes
 
Declaraciones, propiedades y operaciones - Small Basic
Declaraciones, propiedades y operaciones - Small BasicDeclaraciones, propiedades y operaciones - Small Basic
Declaraciones, propiedades y operaciones - Small Basic
 
INFOSAN Objetos del navegador
INFOSAN Objetos del navegador INFOSAN Objetos del navegador
INFOSAN Objetos del navegador
 
Manual de netbeans_7(2)(2)(2)
Manual de netbeans_7(2)(2)(2)Manual de netbeans_7(2)(2)(2)
Manual de netbeans_7(2)(2)(2)
 
Enclausulamiento java
Enclausulamiento javaEnclausulamiento java
Enclausulamiento java
 
Windows 10: Novedades en XAML
Windows 10: Novedades en XAMLWindows 10: Novedades en XAML
Windows 10: Novedades en XAML
 
Visual Basic 6.0
Visual Basic 6.0Visual Basic 6.0
Visual Basic 6.0
 
Netbeans
Netbeans Netbeans
Netbeans
 
Netbeans ir.doc
Netbeans ir.docNetbeans ir.doc
Netbeans ir.doc
 
Manual netbeans
Manual netbeansManual netbeans
Manual netbeans
 

Dernier

Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 

Dernier (13)

Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 

Trucos PB Datawindow

  • 1. Trucos y consejos - La página de JM Page 1 of 7 Página principal Programación PowerBuilder Volver Trucos y consejos para PowerBuilder Haz clic aquí si no ves correctamente la página. Esta es mi lista de trucos que he ido recopilando durante los tres años que trabajé con PowerBuilder. Algunos de ellos los los he encontrado en las (pocas) páginas que hay en la red sobre PowerBuilder, y otros son de mi cosecha. Espero que os sea de interés, y ya sabéis que si queréis publicar vuestro propio truco, no tenéis más que enviarlo a mi dirección de mail. Crear un Groupbox en Datawindow Categoría Datawindow Nivel Básico Autor JM En muchas ocasiones se da la necesidad de relacionar distintos objetos de una datawindow FreeForm de manera que se agrupen visualmente. La solución rápida pasa por crear un rectángulo, pero esto nos da un aspecto bastante raro, ya que no admite el efecto 3D. Para crear este efecto, podremos hacerlo con dos rectángulos, el primero transparente y con la línea gris oscuro, y el segundo del mismo tamaño con la línea blanca. Después podremos darle efecto 3D Raised si situamos el rectángulo blanco 4 unidades por más a la izquierda y arriba, o efecto 3D Lowered si situamos el rectángulo blanco 4 unidades por más abajo y a la derecha. Aseguraros que el rectángulo blanco esta por detrás del gris, utilizando la opción "Send to Back". Enviar por correo Comentar con el autor Texto inclinado en Datawindow Categoría Datawindow Nivel Básico Autor JM Los objetos "Text" de las datawindows tienen un atributo que nos permite establecer la inclinación del texto: "font.escapement". Para inclinar 45 grados debemos establecer un valor de 450. El único inconveniente es que esta inclinación no se verá en diseño ni durante la ejecución en modo normal, sino que sólo será visible en modo "Preview". Enviar por correo Comentar con el autor http://www.lawebdejm.com/prog/pb/trucos_pb.htm 04/12/2008
  • 2. Trucos y consejos - La página de JM Page 2 of 7 Formas de llamar a un evento Categoría PowerScript Nivel Alto Autor JM Cuando necesitamos lanzar un evento manualmente, hasta la versión 4 teníamos una sola opción, utilizando las funciones TriggerEvent y PostEvent: Objeto.TriggerEvent( evento, wParam, lParam ) Objeto.PostEvent( evento, wParam, lParam ) A partir de la versión 5, se nos ofrece una nueva sintaxis, para soportar el paso de parámetros a eventos: La sintaxis general es la siguiente: Objeto.Tipo Comprobacion Momento Nombre( Argumentos ) Cada uno de los elementos tiene el siguiente significado: - Objeto: El objeto del cual queremos invocar el evento. Se puede omitir, asumiendo el objeto "this". - Tipo: Indica a qué vamos a llamar: FUNCTION o EVENT. Si se omite, se utilizará la palabra clase FUNCTION. - Comprobacion: Indica en qué momento se comprobará la existencia de esa función o evento, o dicho de otro modo: en tiempo de diseño (STATIC) o en tiempo de ejecución (DYNAMIC). Hay que tener en cuenta que si llamamos con DYNAMIC, la comprobación se hará durante la ejecución, por lo que será mucho más lento que STATIC. Siempre que sea posible, hay que llamar de forma estática. Por defecto se considera STATIC. - Momento: Indica si se llamará la función o evento en el momento actual (TRIGGER) o al final de la cola de mensajes (POST). Por defecto se utilizará TRIGGER. - Nombre: El nombre de evento o función a llamar. - Argumentos: Argumentos necesario en la llamada. Ejemplos: // esto nos permite llamar a la función SetFocus pero que se ejecute al final // de la cadena de eventos en que estamos. Esta técnica es muy útil // para pasar el foco a un control, y asegurarnos que ninguna // instrucción posterior va a volver a pasar el foco a otro control. dw_maestro.POST SetFocus() // esta otra llamada lo que nos permite es pasar el foco a un control // desconocido en tiempo de diseño, concretamente al primer control // que haya en el "tab_1". Si este control, contiene la función "SetFocus()", // se efectuará la llamada, si no es así, se producirá un error de ejecución. tab_1.control[1].Dynamic SetFocus() // ahora lo que hacemos es llamar estáticamente al evento "ue_evento" // del control actual (this). Si este evento no existe, se producirá un error // en la compilación del script durante el diseño. Event ue_evento("el parámetro") http://www.lawebdejm.com/prog/pb/trucos_pb.htm 04/12/2008
  • 3. Trucos y consejos - La página de JM Page 3 of 7 // hace lo mismo que el ejemplo anterior, pero ejecutando el evento // "ue_pegar" de "cb_aceptar" al final de la cola de mensajes. // Además, la existencia de este evento se comprobará durante la ejecución, // no generando ningún error si no existiese (al contrario que las funciones). // Este ejemplo concreto, es muy útil para lanzar eventos a todos los controles // de una ventana (por ejemplo, el evento "pegar") y que si el control lo soporta, // reaccione al evento (si no lo soporta, no ocurrirá nada). cb_aceptar.Event Dynamic Post ue_pegar("el parámetro") Enviar por correo Comentar con el autor Describe vs Object Categoría Datawindow Nivel Medio - bajo Autor JM Antes de la versión 5, la forma de acceder y manipular a un atributo de los objetos de datawindow era con las funciones "Describe" y "Modify". Su uso es muy flexible, pero a veces complicado, sobre todo cuando teníamos que meter cadenas dentro de cadenas a varios niveles. A partir de la versión 5, se nos ofrece una nueva forma de acceder: a través del objeto "DWObject". Este objeto, nos permite acceder a los atributos, utilizando la sintaxis normal de PowerScript, es decir, es operador ".". Por ejemplo, este describe: long ll_color ll_color = Integer( dw_1.Describe("texto.background.color") ) ahora lo podemos escribir como esto: long ll_color ll_color = dw_1.object.texto.background.color Mucho más sencillo ¿no?. Además, al compilar el script, se hará una pequeña comprobación (que el objeto "texto" exista, que la propiedad "background" sea correcta, etc.), y se nos informará con un error si algo ha ido mal. Las funciones "Describe" y "Modify" se siguen manteniendo, y todavía son imprescindibles para acceder a objetos y/o propiedades que no conocemos sus nombre en tiempo de diseño, o dicho de otro modo: para construir la expresión de datawindow en tiempo de ejecución. Enviar por correo Comentar con el autor Usar el 'Initial Value' para indicar los valores iniciales Categoría Datawindow Nivel Básico Autor JM http://www.lawebdejm.com/prog/pb/trucos_pb.htm 04/12/2008
  • 4. Trucos y consejos - La página de JM Page 4 of 7 Cuando quieras establecer un valor inicial (o por defecto) a una columna, la mejor solución es utilizando el atributo "Initial Value" dentro de la ventana "Columns Specifications". Con esto te asegurarás que cada vez que se inserte una nueva fila, se establecerá el valor indicado, y el estado de la fila será el correcto. Incluso puedes modificar este valor inicial a través de un Modify() o del DWObject correspondiente. Con esta técnica, puedes evitar escribir los SetItem() y SetItemStatus() cada vez que hagas un InsertRow(), y la ejecución siempre será mucho más rápida. Enviar por correo Comentar con el autor Eliminar columnas invisibles. Categoría Datawindow Nivel Básico Autor JM Cada vez que hagas una datawindow, puedes eliminar todos los objetos columna que no vayan a visualizarse, en vez de ponerlos como invisibles. Es decir, si creas un SELECT con 5 columnas, pero en la datawindow sólo vas a ver una de ellos, puedes eliminar los 4 objetos columna que te sobran. Incluso si más adelante tienes pensado hacer GetItem() o SetItem() sobre esas columnas, puedes hacerlo, ya que una cosa es la columna (que existirá mientras aparezca en la ventana "Columns Specifications") o otra es el "objeto columna" (que puede existir o no). Lo único que debes tener en cuenta es que si quieres cambiar el nombre a una columna, debes cambiarselo al "objeto columna" que la represente. Para asegurarte de cual es el nombre de la columna, debes ir a la ventana de "Columns Specifications" y allí aparecerá el nombre que tienes que usar tanto en el GetItem() y SetItem() como en cualquier otra función que haga referencia al nombre de una columna. Enviar por correo Comentar con el autor Uso del 'Retrieve as Needed' Categoría Datawindow Nivel Medio - bajo Autor JM En ciertas datawindows que recuperan muchos registros, puedes utilizar la propiedad "Retrieve as Needed" para acelerar esta recuperación. El uso es muy sencillo: se activa la opción "Rows - Retrieve as Needed" y se mantendrá el cursos abierto en la base de datos, para ir recuperando los registros conforme se necesitan: cuando el usuario haga scroll, o nos situemos en una fila con el ScrollToRow(). El principal inconveniente es que si utilizas funciones sumarias en campos calculados, o has ordenado la datawindow, esa opción no tendrá efecto, ya que en estos casos, es necesario contar con el conjunto de datos completo. http://www.lawebdejm.com/prog/pb/trucos_pb.htm 04/12/2008
  • 5. Trucos y consejos - La página de JM Page 5 of 7 Ten en cuenta que en muchas ocasiones, no ahorrarás tiempo, ya que el tiempo que trascurre desde que recuperas el primer registro hasta el último, no es demasiado grande. En estos casos, el mayor tiempo se da desde que se lanza la instrucción SELECT, hasta que recuperamos el primer registro. Enviar por correo Comentar con el autor Mover las columnas de una datawindow grid Categoría Datawindow Nivel Básico Autor JM Cuando se crea una datawindow grid, las columnas aparecen en el mismo orden en que las hayas dentro del SELECT y aparentemente ese orden no se puede cambiar. Lo que tienes que hacer el poner la datawindow en "preview" dentro del propio "datawindow painter", arrastrar la columna que quieras hasta dejarla en su nuevo sitio, y volver de nuevo a la vista diseño. Verás como la columna mantiene su nueva posición. Enviar por correo Comentar con el autor Uso del 'Retrieve Rows to Disk' Categoría Datawindow Nivel Medio - bajo Autor JM Cuando una datawindow recupera mucho registros (miles), a veces puedes notar como el disco duro del equipo no para de leer y se ralentiza la recuperación. Esto es debido a que PB intenta almacenar todas las filas en memoria, y como no caben, Windows comienza a utilizar la memoria virtual y el archivo de intercambio para obtener más memoria. La mejor solución a esto puede ser activar la opción "Rows - Retrieve Rows to Disk", para que PB cree un archivo temporal donde almacenar estas filas, evitando así que Windows tenga que aumentar el tamaño del archivo de intercambio. Enviar por correo Comentar con el autor Datawindows Tabulares con lineas de Grid Categoría Datawindow Nivel Medio http://www.lawebdejm.com/prog/pb/trucos_pb.htm 04/12/2008
  • 6. Trucos y consejos - La página de JM Page 6 of 7 Autor JM Es posible crear datawindows de tipo "Tabular" pero que tengan líneas como si fueran de tipo "Grid". Para ello debes crear una linea horizontal en la banda detalle, y establecer los atributos "y1" e "y2" con la expresión "RowHeight() - 2" y en cada una de las líneas verticales, establecer el atributo "y1" a "0" e "y2" a la expresión "RowHeight() - 1". Con esto consigues que las líneas se ajusten automaticamente al tamaño del detalle, incluso si está marcada la opción "Autosize Height". Enviar por correo Comentar con el autor Datawindow con barra de título pero que no se pueda mover Categoría Datawindow Nivel Alto Autor JM Muchas veces, queremos que un objeto datawindow tenga barra de título, pero nos molesta bastante que el usuario pueda moverlo. Para evitar esto podemos capturar el mensaje que Windows manda a la datawindow, y anularlo. Lo que tienes que hacer es declarar un evento de usuario, mapeandolo con el evento de sistema "pbm_syscommand", y después, codificar lo siguiente en este nuevo evento: uint wParam, lParam wParam = message.wordparm CHOOSE CASE wParam CASE 61456, 61458 message.processed = TRUE message.returnValue = 0 END CHOOSE Enviar por correo Comentar con el autor Descripción para el valor nulo de un campo Categoría Datawindow Nivel Básico Autor JM Cuando se añade una columna con estilo edición "DropDownListBox", se puede indicar el valor null! en el campo "Data value" y cualquier valor que quieras en el campo "Display value" (por ejemplo la descripción "Vacío"). Cuando este campo contenga un valor nulo, http://www.lawebdejm.com/prog/pb/trucos_pb.htm 04/12/2008
  • 7. Trucos y consejos - La página de JM Page 7 of 7 aparecerá la descripción que hayamos indicado. Este truco también sirve para los campos con estilos de edición "CheckBox" y "RadioButton" Enviar por correo Comentar con el autor Crear un Datawindow a través de una instrucción SELECT Categoría Datawindow Nivel Medio - bajo Autor Raúl Pacheco Huanca El siguiente código permite crear un Datawindow mediante una instrucción SELECT. Este ejemplo permite crear un Datawindow (También DataStore) dw_1 (Tipo Grid) de la fuente del DataWindow generada en la función de SyntaxFromSQL. Si ocurren errores de secuencia que se exhiben al usuario en una caja de mensaje. Observe que usted necesita llamar SetTransObject con SQLCA como su discusión antes de que usted pueda llamar la función de recuperación (Retrieve). String ERRORS, strConsulta String strEstilo, strSintaxis Setpointer(HourGlass!) //(Consulta SQL) strConsulta = "SELECT * FROM products ORDER BY productname Asc" // Estilo de presentación del datawindow //(Default) Tabular, Grid, Form (for freeform), Graph, Group y Label strEstilo = "style(type=grid)" // Generamos el Datawindow! strSintaxis = SQLCA.SyntaxFromSQL(strConsulta, strEstilo, ERRORS) // Preguntamos si ocurrio alguna exepción... if Len(ERRORS) > 0 then MessageBox("Cuidado", "Sintaxis Select genero el errors: " + ERRORS) return end if // Creamos el Objeto Datawindow dw_1.Create(strSintaxis, ERRORS) // Preguntamos si ocurrio alguna exepción... if Len(ERRORS) > 0 then // Preguntamos si ocurrio alguna exepción... MessageBox("Cuidado", "La creación del objeto genero el error: " + ERRORS) return end if // Asignamos la Transacción y Refrescamos dw_1.settransobject(sqlca) dw_1.retrieve() Enviar por correo Comentar con el autor Página principal Programación PowerBuilder Volver © 2003 by JM http://www.lawebdejm.com/prog/pb/trucos_pb.htm 04/12/2008