Como lo prometido es deuda -según dicen-, aquí les dejó este pequeño tutotruco sobre cómo poner un fondo de escritorio en nuestra aplicación Powerbuilder. Si bien constituye lo que, personalmente...
Una de las variables en programación que pocas veces se utilizan por desconocimiento son los arrays, también conocidos como arreglos o matrices, aquí los llamaremos por su nombre en inglés...
Todos los sistemas tienen métodos de búsquedas para seleccionar determinados items al ingresar datos. Un caso típico se da en una empresa durante el proceso de facturación, por ejemplo, al...
Sin dudas que una de las tareas frecuentes que hacemos los programadores es el debugg del software, el testeo en caliente. En Powerbuilder existen distintas formas para debuggear un programa y...
Vamos a ver cómo hacer un login como la gente para nuestro sistema Powerbuilder. Pero digamos primero qué es el login, logueo, registro, o como quieran llamarlo. El login es simplemente...
Las estructuras de Powerbuilder son similares a las existentes en Pascal o Cobol, son colecciones de una o más variables, del mismo tipo o no, agrupadas bajo una misma denominación....
Como todos sabemos, cuando creamos una aplicación en PB, éste nos crea un objeto con el mismo nombre del programa y lo coloca primero en el árbol de la librería....
A pedido de varios les dejo una función para validar el CUIT. CUIT significa "Código Único de Identificación Tributaria" y se refiere a un número que identifica a una persona física...
Cuando usamos cadenas en Powerbuilder podemos incluir determinados caracteres ASCII en vistas a ciertos objetivos. Supongamos que el texto de un MessageBox queremos que aparezca en dos líneas, deberías escribirlo...
Como lo prometido es deuda -según dicen-, aquí les dejó este pequeño tutotruco sobre cómo poner un fondo de escritorio en nuestra aplicación Powerbuilder. Si bien constituye lo que, personalmente denomino "chichecitos" -tradúzcase pavadas-, hace a la buena presentación del software y "engorda" las características funcionales del mismo (aunque lo deja más "pesado").
El sistema nos brinda la posibilidad de cambiar los colores de las ventanas y demás, pero no de colocar fondos con imágenes, así que para ello recurriremos a un "truco" sencillo pero eficaz y luego veremos como darle al usuario una interfaz para que coloque el fondo que le de la gana. La ventaja de lo que veremos es que cada usuario podrá poner el fondo que quiera y, además, el que elija se guardará en la base de datos con lo que independizamos su ubicación. La desventaja es que hay que tener mayor control sobre los fondos ya que, por ejemplo, puede colocar un fondo porno... :-).
Vale aclarar que lo que sigue a continuación está hecho sobre Powerbuilder v11.5 con MySQL v5.
En primer lugar crearemos una ventana a la que llamaremos "w_fondo" que deberá ser del tipo "child!" y con un estado en el arranque del tipo "maximized!". Colocaremos en la misma un control picture con el nombre "p_tapiz", en el casillero "PictureName" le asignaremos una imagen por defecto y como propiedades marcaremos "Visible", "Enabled" y "Original Size". Aquí entra a jugar el tamaño de los monitores así que le pondremos, para empezar, una imagen de 1024x768px, luego veremos como cambiarla.
En el evento "Resize" de dicha ventana pondremos el siguiente código:
Si observan la segunda línea verán que le asigno al control "p_tapiz" una imagen que proviene de una variable global del tipo blob (gblb_fondo), ¿por qué? porque en mi aplicación "guardo" en la base de datos, en la tabla "usuarios", las preferencias de cada uno, por lo que tengo un campo llamado "user_fondo" del tipo longblob para almacenar el fondo que ha elegido. Además, esto nos permite que cuando se cierre la aplicación y vuelva a arrancar aparezca el fondo elegido y no el que está asignado por defecto, es un opcional, uds. hagan como quieran. Si deciden utilizar este método deberán declarar en "Global Variables" esto: blob gblb_fondo.
En el evento "open" de la ventana solo pondremos esto:
Es simplemente para ponerle un título y es todo en cuanto a esta ventana se refiere.
Ahora nos vamos al arranque del sistema, es decir, lo que acontece luego de que el usuario introduce su nombre y contraseña. En primer lugar, si hemos elegido la opción de utilizar una variable global para cargar el fondo debemos agregar este código luego de todas las verificaciones:
Donde "user_fondo" es el campo de la tabla que almacena la imagen, gblb_fondo es el nombre de la variable global donde contenerla, USUARIOS es el nombre de la tabla de usuarios y con el código WHERE verificamos que tome la imagen que coincida con el nombre de usuario.
Una vez que esté todo cargado y validado cargaremos la ventana principal(w_main) y la ventana fondo(w_fondo) de la siguiente forma:
Brindándole una interfaz al usuario
La ventana tendrá esta apariencia:

Crearemos una similar con el nombre "w_tapizchange" y con los siguientes controles:
-Para el título "Fondo actual:" con las Propiedades: Name=st_1; Text=Fondo actual:; Visible=true; Enabled=true.
-Para mostrar una miniatura del fondo con las Propiedades: Name=p_nuefondo; Visible=true, Enabled=true, Border=true.
-Botón "Elegir" con las Propiedades: Name=cb_cambiar; Text=&Elegir; Visible=true; Enable=true.
-Botón "Predeterminar" con las Propiedades: Name=cb_guardar; Text=&Predeterminar; Visible=true.
-Botón "Fijar Solo para esta sesión" con las Propiedades: Name=cb_mostrar; Text=Fijar S&olo para esta sesión; Visible=true.
-Botón "Cancelar" con las Propiedades: Name=cb_cancelar; Text=&Cancelar; Visible=true.
-Botón "Salir" con las Propiedades: Name=cb_salir; Text=&Salir; Visible=true; Enabled=true.
Declararemos dos variables de instancia:
blob Emp_pic, iblb_tapizori
En el evento "open" de la ventana pondremos:
En el botón "Elegir" (cb_cambiar), en el evento "clicked" pondremos el siguiente código:
En el botón "Predeterminar" (cb_guardar), en el evento "clicked" pondremos el siguiente código:
En el botón "Fijar solo para esta sesión", en el evento "clicked" pondremos este código:
Como ven, aquí no guardamos la imagen en la base de datos por lo que al reiniciar el sistema aparecerá la que esté almacenada.
En el botón "Cancelar", en el evento "clicked" pondremos este código:
En el botón "Salir", en el evento "clicked" solo pondremos: close(parent).
Como pueden apreciar en los códigos, pongo la ventana en normal y enseguida, mediante el evento trigger resize dispararo el reacomodamiento hasta que finalmente dejo la ventana maximizada.
Espero que les haya servido este "trucotuto". Hasta la próxima.