roCanvasWidget
15 min
este objeto compone color de fondo, texto e imágenes en un único rectángulo, lo que le permite superponer imágenes en un eje z creación de objetos al igual que otros widgets, rocanvaswidget se crea con un rorectangle para establecer su tamaño y posición en la pantalla createobject ("rocanvaswidget", r as rorectangle) as object ifcanvaswidget hide() as boolean oculta el widget show() as boolean muestra el widget raise() as void envía el widget a la parte superior del orden z en el plano gráfico (es decir, delante de todas las demás superficies que implementan la interfaz ifwidget ) de forma predeterminada, los nuevos widgets se colocan en la parte superior del orden z gráfico algunas superficies siempre se dibujan en la parte superior del orden z gráfico, incluido el cursor del mouse, los subtítulos y teletipos desplazables docid 2pwsmk6gfbdkc8rtfzkfj consejo puede usar los métodos pausegraphics() / resumegraphics() en el objeto rovideomode docid\ f0dvnrbdpvgozlrvb29gd para garantizar que múltiples cambios en el orden z gráfico ocurran simultáneamente lower() as void envía el widget a la parte inferior del orden z en el plano gráfico (es decir, detrás de todas las demás superficies que implementan la interfaz ifwidget ) de forma predeterminada, los nuevos widgets se colocan en la parte superior del orden z gráfico setrectangle(r as rorectangle) as boolean cambia el tamaño y la posición del rectángulo del widget utilizando el objeto rorectangle setlayer(content as object, z level as integer) as boolean establece el contenido de una capa dentro del widget el nivel z más bajo se dibuja primero y el nivel z más alto se dibuja al final el contenido del objeto se describe a continuación clearlayer(z level as integer) as boolean borra la capa especificada clear() as boolean borra todas las capas enableautoredraw(enable as boolean) as boolean habilita o deshabilita el redibujado automático del widget cuando esta función está habilitada, cada llamada a setlayer, clearlayer o clear produce un redibujado si necesita cambiar múltiples capas, entonces debe deshabilitar el redibujado automático mientras llama a la función setlayer setlayer habilita o deshabilita el redibujado del widget cuando cambia el contenido de la capa cuando el redibujado automático está habilitado, cada llamada a setlayer, clearlayer o clear produce un redibujado para agrupar múltiples actualizaciones, primero debe suspender el dibujo usando enableautoredraw(false), luego realizar los cambios en el contenido y finalmente volver a habilitar el dibujo usando enableautoredraw(true) el redibujado ocurre en un hilo separado, por lo que enableautoredraw retorna casi inmediatamente contenido del objeto el contenido especificado en cada capa puede consistir en uno o más objetos cada objeto se define mediante un roassociativearray si hay más de un objeto, entonces cada uno se coloca en un roarray antes de pasarlo al método setlayer() actualmente, hay cuatro tipos de objetos color de fondo color el valor hexadecimal #\[aa]rrggbb del color de fondo targetrect un rectángulo de destino, que es otro roassociativearray compuesto por valores x, y, w y h estos valores son relativos a la esquina superior izquierda del widget texto texto una cadena de texto para mostrar targetrect el rectángulo en el que se muestra el texto textattrs un roassociativearray que contiene atributos para aplicar al texto los atributos pueden ser cualquiera de los siguientes fuente una cadena que indica si el texto debe mostrarse como "small"/"medium"/"large"/"huge" tamaño de fuente un tamaño en puntos que se utiliza directamente al crear la fuente si el valor se establece en 0, la fuente cambia automáticamente de tamaño para ajustarse al targetrect archivo de fuente el nombre de archivo de una fuente no perteneciente al sistema para usar halign una cadena que indica la alineación "left"/"center"/"right" del texto en una línea valign una cadena que indica la alineación "top"/"center"/"bottom" del texto perpendicular a la línea rotación una cadena que indica la rotación de "0"/'90"/"180"/"270" grados del texto color el valor hexadecimal #\[aa]rrggbb del texto imagen nombre de archivo el nombre de archivo de la imagen encryptionalgorithm el algoritmo de cifrado del archivo actualmente las opciones son "aesctr" y "aesctrhmac" encryptionkey la clave para descifrar el archivo de imagen esta es una matriz de bytes compuesta por 128 bits de clave, seguidos de 128 bits de iv consulte descifrado de imágenes docid\ z65qez0xwq9c70obegcyi para obtener detalles sobre cómo mostrar imágenes cifradas targetrect el rectángulo en el que se muestra la imagen la imagen cambiará automáticamente de tamaño para ajustarse al área de destino sourcerect el rectángulo de origen para recortar desde una imagen fuente modo de composición introduzca source o source over este último mezcla alfa con los objetos subyacentes el primero reemplaza completamente los valores subyacentes imgattrs un roassociativearray que contiene atributos para aplicar a la imagen rotación una cadena que indica la rotación de "0"/'90"/"180"/"270" grados de la imagen códigos qr los códigos qr (quick response) aparecen como cuadrados de puntos negros sobre un fondo blanco se utilizan para codificar url, direcciones de correo electrónico, etc , y pueden escanearse utilizando software fácilmente disponible para teléfonos inteligentes aunque los códigos normalmente aparecen como negro sobre blanco, en teoría puede utilizar cualquier par de colores contrastantes targetrect el rectángulo en el que se muestra el código qr independientemente de la relación de aspecto de este rectángulo, el propio código qr siempre será cuadrado con el color de fondo que rellena los espacios código qr (forma simple) contiene la cadena que se codificará en el código qr código qr (forma compleja) contiene una matriz de parámetros para el código qr los parámetros pueden ser cualquiera de los siguientes color el color de primer plano en el código qr (el valor predeterminado es negro) backgroundcolor el color de fondo en el código qr (el valor predeterminado es blanco) rotación una cadena que indica la rotación del código en grados "0"/"90"/"180"/"270" el código se escaneará independientemente de la rotación qrtext contiene el texto que se codificará en el código qr ejemplo este código contiene la mayoría de las funciones de rocanvaswidget descritas anteriormente rect=createobject("rorectangle", 0, 0, 1920, 1080) cw=createobject("rocanvaswidget", rect) aa=createobject("roassociativearray") aa\["text"] = "primal scream" aa\["targetrect"] = { x 280, y 180, w 500, h 30 } aa\["textattrs"] = { color "#aaaaaa", font "medium", halign "left", valign "top"} aa1=createobject("roassociativearray") aa1\["text"] = "movin' on up, followed by something else, followed by something else, followed by something else, followed by something else" aa1\["targetrect"] = { x 282, y 215, w 80, h 500 } aa1\["textattrs"] = { color "#ffffff", font "large", fontfile "usb1 /giddyupstd otf", halign "left", valign "top", rotation "90"} array=createobject("roarray", 10, false) array push({ color "5c5d5f" }) array push({ filename "transparent balls png" }) array push(aa) aa2=createobject("roassociativearray") aa2\["filename"] = "transparent balls png" aa2\["compositionmode"] = "source over" aa2\["targetrect"] = { x 400, y 200, w 200, h 200 } aa3=createobject("roassociativearray") aa3\["qrcode"] = "www brightsign biz" aa3\["targetrect"] = { x 100, y 100, w 400, h 400 } aa4=createobject("roassociativearray") aa4\["qrcode"] = { qrtext "www brightsign biz", rotation "90" } aa4\["targetrect"] = { x 1200, y 100, w 400, h 600 } aa5=createobject("roassociativearray") aa5\["qrcode"] = { color "#964969", backgroundcolor "#ffff77", qrtext "www brightsign biz", rotation "180" } aa5\["targetrect"] = { x 100, y 600, w 400, h 400 } cw\ show() cw\ enableautoredraw(0) cw\ setlayer(array, 0) cw\ setlayer(aa1, 1) cw\ setlayer(aa1, 2) cw\ setlayer(aa3, 3) cw\ setlayer(aa4, 4) cw\ setlayer(aa5, 5) cw\ enableautoredraw(1) cw\ clearlayer(0)