Esquiando en Dolomitas

Después de 40 años esquiando he tenido mi primer percance. Aunque por la foto parezca que me he roto medio cuerpo, sólo ha sido el húmero del brazo derecho. Tendré que llevar la escayola 30 días. Lo aprovecharé para tomarme un merecido y obligado descanso.

InstaPlaceImage

Class VImage

Con esta clase podemos manejar imágenes independientes del hardware, permitiendo cargarlas y salvarlas en distintos formatos y de distintas fuentes. Dispone de funciones para modificar las imágenes  como scaledToHeight que nos devuelve otra imagen a escala de la inicial y de la altura deseada. También dispone de funciones de modificación a nivel de pixel. También es usada como parámetro en funciones de otras clases con en VRegister para coger o modificar un campo objeto dibujo, en VTabWidget para indicar el icono de una pestaña…

Hay una serie de tipos de fichero soportados por defecto, pudiendo añadirse más mediante pluggins. Los tipos de fichero soportados por defecto son:

Tipo Fichero Descripción Soportado
BMP Windows Bitmap Read/Write
GIF Graphic Interchange Format (opcional) Read
JPG Joint Photographic Experts Group Read/Write
JPEG Joint Photographic Experts Group Read/Write
PNG Portable Network Graphics Read/Write
PBM Portable Bitmap Read
PGM Portable Graymap Read
PPM Portable Pixmap Read/Write
TIFF Tagged Image File Format Read/Write
XBM X11 Bitmap Read/Write
XPM X11 Pixmap Read/Write

Las funciones de manipulación de pixels dependen del formato de la imagen.

  1. Si el formato es 32-bits a la funcion setPixel en el parametro index_or_rgb le pasamos un valor 32-bits con el color rgb 0 rgba si maneja transparencias.
  2. Si el formato es de 8-bits o monocromo el valor de index_or_rgb deberá ser el indice del color en la paleta de colores de la imagen.

Funciones

Generales

  • VImage();
  • Boolean isNull();
  • Number width();
  • Number height();
  • Number depth();
  • Number bitPlaneCount();
  • Boolean hasAlphaChannel();
  • Numer dotsPerMeterX();
  • Numer dotsPerMeterY();
  • void setDotsPerMeterX( Number x );
  • void setDotsPerMeterY( Number y );
  • Number byteCount();

Input/Output

  • Boolean loadResource( String szIdRefDib );
  • Boolean load( String szPath );
  • Boolean load( String szPath, String szFileType );
  • Boolean save( String szPath );
  • Boolean save( String szPath, String szFileType, Number quality = -1 );

Operaciones

  • VImage copy();
  • VImage copy( Number x, Number y, Number width, Number height );
  • VImage mirrored( Boolean bHorizontal = false, Boolean bVertical = true );
  • VImage scaled( Number width, Number height, Number aspectRatio = arIgnore, Number transform = tmFast );
  • VImage scaledToHeight( Number height, Number transform = tmFast );
  • VImage scaledToWidth( Number width, Number transform = tmFast );

Edición

  • Number pixel( Number x, Numer y );
  • Number pixelIndex( Number x, Numer y );
  • void setPixel( Number x, Number y, Number index_or_rgb );
  • void fill( Number pixelValue );
  • void invertPixels( Number inverMode );

Textos (No soportado en todos los formatos)

  • String text( String szKey );
  • void setText( String szKey, String szText );

Ejemplos:

1: Importar una imagen de disco

importClass( "VImage" );

// Lanzamos el cuadro de dialogo "Abrir fichero"
var path = theMainWindow.fileDialogGetOpenFileName( "Abrir imagen", "", "*.jpg;*.bmp;*.png");

if ( path.length > 0 )
{
    // Creamos una imagen y cargamos el fichero
    var img = new VImage();

    if ( img.load(path) )
    {
        // Cogemos el control FOTO y le pasamos la imagen
        var edFoto = theRoot.dataView().control( "ED_FOTO" );

        edFoto.setImage( img );
    }
    else
        alert("No se ha podido cargar la imagen: " + path);
}

Nuevos menús en Stock

En la propiedad “menú de contexto” de las vistas de datos ahora tenemos una opción más: Por defecto extendido. Al menú Por Defecto le hemos quitado las opciones de modificar campos y en el extendido las hemos dejado todas. La nueva opción “Exportar Xml” solo aparece en el extendido y si estamos en una rejilla.

Menú Por Defecto

Menú Por Defecto Extendido

Además en Menús en stock hemos hecho lo mismo, desdoblando el menú de listas en dos: Lista y Lista extendido. También hemos añadido el menú en stock Cestas, este solo válido para menús de contexto de vistas de datos. Si usamos el menú de cestas fuera del menu de contexto de vistas o en una vista de una tabla que no tenga cestas creadas, en ejecución no aparece.

Class VApp para vJavaScript

De esta clase v7 crea un unico objeto theApp que representa a la aplicacion. Dispone de funciones para ver información de sus proyectos, acceso a variables globales, utilidades de base de datos…

Funciones:

Generales

  • String exeName();
  • void beep();

Proyectos

Variables globales

  • String globalVarToString( String szIdRefVar );
  • double globalVarToDouble( String szIdRefVar );
  • int globalVarToInt( String szIdRefVar );
  • Boolean globalVarToBool( String szIdRefVar );
  • QDateTime globalVarToDateTime( String szIdRefVar );
  • QDate globalVarToDate( String szIdRefVar );
  • QTime globalVarToTime( String szIdRefVar );
  • Boolean isGlobalVarEmpty( String szIdRefVar );
  • void setGlobalVar( String szIdRefVar, String szValue );
  • void setGlobalVar (String szIdRefVar, Number nValue );
  • void setGlobalVar( String szIdRefVar, Boolean bValue );
  • void setGlobalVar( String szIdRefVar, QDateTime dtValue );
  • void setGlobalVar( String szIdRefVar, QDate dValue );
  • void setGlobalVar( String szIdRefVar, QTime tValue );

Constantes

  • String constant( String szIdRefConstante );

Database tools

  • Boolean regenIndexes( String idRefTabla, Boolean bProgressDialog );
  • Boolean regenDataArea( String idRefTabla, Boolean bProgressDialog );

DOS: directorios

  • String currentPath();
  • Boolean setCurrentPath( String path );
  • String homePath();
  • String rootPath();
  • String tempPath();
  • String cleanPath( String path );
  • Boolean loadDrives();
  • Number drivesCount();
  • VFileInfo driveAt( Number index );

DOS: files

  • Boolean copyFile( String szFileName, String szNewName ) ;
  • Boolean existsFile( String szFileName ) ;
  • Boolean linkFile( String szFileName, String szLinkName );
  • Boolean removeFile( String szFileName );
  • Boolean renameFile( String szFileName, String szNewName );

Info local actual

  • Number currentLanguageCode();
  • String currentLanguageName();
  • String currentLanguageIsoCode();
  • Number currentCountryCode();
  • String currentCountryName();
  • String currentCountryIsoCode();
  • String currentDecimalPoint() ;

Info local del sistema

  • Number sysLanguageCode() ;
  • String sysLanguageName();
  • String sysLanguageIsoCode();
  • Number sysCountryCode();
  • String sysCountryName();
  • String sysCountryIsoCode();
  • String sysDecimalPoint();

Systema

  • String sysMachineName();

Nuevas funciones V7 7.11

Cestas

  • Boolean getBasket( String szIdRefCesta, VRegisterList regList )
  • Boolean setBasket( String szIdRefCesta, VRegisterList regList )
  • void appendToBasket( String szIdRefCesta, VRegister reg )
  • void appendToBasket( String szIdRefCesta, VRegisterList regList )
  • void removeFromBasket( String szIdRefCesta, VRegister reg )
  • void removeFromBasket( String szIdRefCesta, VRegisterList regList )

Constantes

  • String constant( String szIdRefConstante, Number idioma, [Number pais] )

DOS: directorios

  • String applicationDirPath();
  • String applicationFilePath():

Impresoras del sistema

  • Array<String> availablePrinters()
  • String defaultPrinter()
  • Array<int> supportedPaperSizes( String szPrinterName )

Impresión de informes

  • void printReport( VRegisterList list, String idRefReport, [String idRefLogicPr])
  • void printReportToPrinter( VRegisterList list, String idRefReport, String printerName, [Boolean bHighRes=false])
  • void printReportToFile( VRegisterList list, String idRefReport, String path )

Enumeraciones

Tamaños de papel

  • A4
  • B5
  • Letter
  • Legal
  • Executive
  • A0
  • A1
  • A2
  • A3
  • A5
  • A6
  • A7
  • A8
  • A9
  • B0
  • B1
  • B10
  • B2
  • B3
  • B4
  • B6
  • B7
  • B8
  • B9
  • C5E
  • Comm10E
  • DLE
  • Folio
  • Ledger
  • Tabloid
  • Custom

Ejemplos:

1: Obtener el numero total de tablas

var mainpro = theApp.mainProjectInfo();
var nTotalTablas = mainpro.allTableCount();

2: Obtener el valor de una variable global

var timeLast = theApp.varGlobalToString( "CINE_DAT/TIME_LAST_SUGEST" );

3: Regenerar indices de todas las tablas

var project = theApp.mainProjectInfo();
for( var x=0; x < project.allTableCount(); ++x )
{
    var tableInfo = project.allTableInfo(x);
    theApp.regenIndexes( tableInfo.idRef(), true );
}

Actualizaciones automáticas de Velneo V7

Estamos últimando los detalles del nuevo componente vUpdater de Velneo v7. Su misión es detectar nuevas versiones de v7 y actualizarlo en nuestro equipo, automaticamente o pidiendo confirmación según lo configuremos.

En las instalaciones cliente (vClient, vAdmin, VDevelop…) comprueba primero la versión del servidor v7 al que se conecta normalmente, para no actualizarse antes que este.

Independientemente de cual de los componentes sea el lanzador, actualizará los distintos componentes instalados en la misma carpeta que el lanzador, respetando otras instalaciones de v7 en el equipo. Si tenemos instalada una versión antigua para conectarnos a un servidor antiguo, al ser cliente y servidor de la misma versión no nos pedirá actualizarnos. Pero si tenemos una segunda instalación y nos conectamos a un servidor mas actual, nos actualizará esta.

Donde pone Dailybuild, nuestra versión diaria de pruebas, os pondrá la versión normal a la que se está actualizando.

class VMdiView para vJavaScript

Un objeto de esta clase representa a una de las vistas centrales de la ventana principal. Algunas de las funciones solo están disponibles cuando el boot-mode de la VMainWindow es MDI.

Se puede coger el VRoot que contiene la vista si no es una vista genérica.

Funciones

Generales

  • Number type();

Genéricas de ventana

  • String windowTitle();
  • void setWindowTitle( String szTitle );
  • String styleSheet();
  • void setStyleSheet( String szSS );
  • Boolean isVisible();
  • void show();
  • void hide();
  • Number x();
  • Number y();
  • Number width();
  • Number height();
  • void setFocus();
  • void close();
  • void repaint();
  • void update();

Solo en modo MDI

  • void move( Number x, Number y );
  • void resize( Number nWidth, Number nHeight );
  • Boolean isMaximized();
  • Boolean isMinimized();
  • void showMaximized();
  • void showMinimized();
  • void showNormal();
  • void lower();
  • void raise();

Solo vistas de datos

Nuevas funciones V7 7.11

  • QWidget centralWidget();

Enumeraciones

Tipos de vistas

  • TypeGeneric = 0
  • TypeForm = 1
  • TypeGrid = 2
  • TypeCasillero = 3
  • TypeTree = 4
  • TypeMultiView = 5
  • TypeMultiViewTree = 6
  • TypeFormBlock = 7
  • TypeReportPreview = 8
  • TypeMultiPanel = 9
  • TypeViewFlow = 10
  • TypeListAlternator = 11
  • TypeComboView = 12
  • TypeListView = 13
  • TypeQmlList = 14
  • TypeAdvancedGrid = 15
  • TypeQmlForm = 16

Ejemplos

1. Analiza la vista actual

var view = theMainWindow.currentView();
if ( view )
{
    // Coge el root de la vista
    var root = view.root();
    if ( root )
    {
        // Coge el contenido del root: ficha, lista o ninguno
        var rootContent = root.content();
	if ( rootContent )
	{
            if (1 == root.objectInfo().inputType())
            {
                // Contenido Ficha: rootContent es un VRegister
                alert( "Contenido ficha = " + rootContent.fieldToString("NAME") );
            }
            else if (2 == root.objectInfo().inputType())
            {
                // Contenido Lista: rootContent es un VRegisterList
                alert( "Contenido lista tamaño = " + rootContent.sizeList() );
            }
        }
        else
            alert("Contenido ninguno");
    }
    else
        alert("No es vista de datos");
}
else
    alert("No hay ninguna vista");

Clase VQuery para vJavaScript

La clase VQuery nos permite ejecutar objetos búsqueda. Construimos un objeto VQuery pasandole el objeto VRoot en curso y le indicamos la búsqueda a ejecutar con la función setQuery. Una vez inicializado el objeto ya podemos usar el resto de funciones (salvo result): le pasamos contenido a las variables locales de la búsqueda con setVarLocal (si lo requiere) y la ejecutamos con la función exec. Ahora ya podemos recoger los resultados con la función result, que nos devuelve un objeto de la clase VRegisterList con el cual podemos operar.

Funciones:

Construcción / Inicialización

  • VQuery( VRoot );
  • void setQuery( String szIdRefQuery );

Api del objeto

Variables locales

  • String varToString( String szID );
  • double varToDouble( String szID );
  • Number varToInt( String szID );
  • QDateTime varToDateTime( String szID );
  • QDate varToDate( String szID );
  • QTime varToTime( String szID );
  • void setVar( String szID, String szValor );
  • void setVar( String szID, double dValor );
  • void setVar( String szID, int nValor );
  • void setVar( String szID, Boolean bValor );
  • void setVar( String szID, QDateTime dt );
  • void setVar( String szID, QDate date );
  • void setVar( String szID, QTime time );

Operaciones

Ejemplos:

1: Ejecutar una búsqueda

// Construimos el objeto VQuery
var query = new VQuery( theRoot );

// Inicializamos la búsqueda
query.setQuery( "CINE/PELICULAS_PAL" );

// Le pasamos contenido a las variables locales de la búsqueda
var szTextToSearch = ...;
query.setVar( "TEXTO", szTextToSearch );

// Ejecutamos la búsqueda
if ( query.exec() )
{
    // Le pasamos los resultados a la lista de salida
    theRegisterListOut.append( query.result() );
}

Class VProjectInfo para vJavaScript

Este objeto contiene la información de un proyecto. Tiene funciones para obtener sus propiedades básicas, sus tablas, sus objetos y los proyectos de los que hereda.

Las funciones de tablas y de objetos que empiezan por “all” nos devuelven todas sus tablas u objetos, incluyendo las de sus proyectos heredados. Las otras solo las suyas propias.

Funciones:

Generales

  • String id();
  • String alias();
  • Number type();
  • String name();
  • String version();
  • Date saved();
  • Number history();

Tablas

  • Number tableCount();
  • VTableInfo tableInfo( String szIdPrimarioTabla );
  • VTableInfo tableInfo( Number nIndex );
  • Number allTableCount();
  • VTableInfo allTableInfo( Number nIndex );

Objectos

  • Number objectCount( Number nObjectType );
  • VObjectInfo objectInfo( Number nObjectType, Number nObjectIndex );
  • VObjectInfo objectInfo( Number nObjectType, String szIdPrimario );
  • Number allObjectCount( Number nObjectType );
  • VObjectInfo allObjectInfo( Number nObjectType, Number nObjectIndex );

Herencia

  • Number legacyProjectCount();
  • VProjectInfo legacyProjectInfo( Number nIndex );

Enumeraciones:

Tipos de proyectos

  • 0 – Datos
  • 1 – Aplicación

Tipos de objetos

Ver la clase VObjectInfo

Ejemplos:

1: Recorre todas las tablas históricas de un proyecto (heredadas incluidas)

var mainProject = theApp.mainProjectInfo();

for( var nIndex=0; nIndex < mainProject.allTableCount(); nIndex++ )
{
    var tableInfo = mainProject.allTableInfo( nIndex );

    if (tableInfo.type() == 1)
    {
        var nameTable = tableInfo.name();
        ....
    }
}

Clase VXmlWriter para vJavaScript de Velneo V7

Esta es la primera de las clases para Xml. Nos permite generar un fichero Xml con el contenido de una lista.

Para empezar hay que contruir el objeto VXmlWriter con new pasandole como parametro un objeto de la clase VRegisterList.

El codec por defecto es “UTF-8″. Para cambiarlo por ejemplo a UTF-16, llamar a la funcion setCodec( “UTF-16″ ). Hay una lista de los codes disponibles más abajo.

Si no se usa la función setDocType(“mytype”) no se incluirá la cabecera opcional <!DOCTYPE mytype>.

Por defecto el texto es formateado con saltos de linea e indentación. Para cancelarlo usar la función setAutoFormatting( false ). Con la función setAutoFormattingIndent( n ) ajustamos el numero de espacios o tabs de indentación. Si usamos valores positivos para n representan espacios y si son negativos tabs. Por defecto la indentación son 4 espacios.

Con la función addInitialTag( “tag”) le añadimos uno o varios tags, llamando varias veces a la función, que envuelven a los registros de la lista. Lo normal es usar una con el nombre de la tabla.

Con la función setRowTag( “tag” ) le decimos la etiqueta que ha de envolver a cada registro. Si no se usa por defecto es “row”.

A continuación con las funciones addField( “tagCol”, “IDCOMPUESTOCAMPO”) y addFormula( “tagCol”, “Formula” ) le añadimos tantas columnas como queramos por registro.

Y ya solo nos queda llamar a la función writeFile( “file.xml” ); para que nos lo escriba en disco.

Funciones:

Constructor

Inicializacion

  • void setCodec( String szCodecName );
  • void setDocType( String szType );
  • void setAutoFormatting( Boolean bSet );
  • void setAutoFormattingIndent( Number nSpacesOrTabs );
  • void addInitialTag( String szTag );
  • void setRowTag( String szTag );
  • void addField( String szTag, String szIdCampoCompuesto );
  • void addFormula( String szTag, String szFormula );

Operaciones

  • Boolean writeFile( String szPath );
  • String writeToString();

Codec Names:

  • Apple Roman
  • Big5
  • Big5-HKSCS
  • CP949
  • EUC-JP
  • EUC-KR
  • GB18030-0
  • IBM 850
  • IBM 866
  • IBM 874
  • ISO 2022-JP
  • ISO 8859-1 to 10
  • ISO 8859-13 to 16
  • Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg, and Tml
  • JIS X 0201
  • JIS X 0208
  • KOI8-R
  • KOI8-U
  • MuleLao-1
  • ROMAN8
  • Shift-JIS
  • TIS-620
  • TSCII
  • UTF-8
  • UTF-16
  • UTF-16BE
  • UTF-16LE
  • UTF-32
  • UTF-32BE
  • UTF-32LE
  • Windows-1250 to 1258
  • WINSAMI2

Ejemplos:

1: Exportar una lista a xml

var xml = new VXmlWriter( theRegisterListIn );
xml.setDocType( "myType" );
xml.addInitialTag( "Corredores" );
xml.setRowTag( "row" );
xml.addField( "Nombre", "NAME" );
xml.addField( "Equipo", "EQUIPO.NAME" );
xml.addField( "Pais", "PAIS.NAME" );
....
xml.writeFile( "filename.xml" );

Produce el siguiente fichero xml

2: Exportar una lista de cualquier tabla con todos sus campos

var xml = new VXmlWriter( theRegisterListIn );
xml.addInitialTag( theRegisterListIn.tableInfo().id() );
xml.setRowTag( "row" );

var ti = theRegisterListIn.tableInfo();

for (var col=0; col < ti.fieldCount(); ++col)
    xml.addField( ti.fieldName(col), ti.fieldId(col) );

xml.writeFile( "filename.xml" );

Solo una rama abierta

He añadido un nuevo flag de estilo, Solo una rama abierta, a los 3 objetos de tipo árbol:

  • Control de formulario: Menú arbolado
  • Arbol visor de tablas
  • Multivista en árbol

Con esta propiedad activa el árbol solo permite una rama abierta, cerrando las otras automáticamente cuando abrimos una. Es muy usada en menús pero ya puestos hice también los otros arboles:  de tabla y multivista.

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 29 seguidores