Monitores activos y su resolucion

lstScreen is string = SysListScreen()
res is string
i is int = 0
Moni is Control
MoniRes is Control
y is int = 145
FOR EACH STRING screen OF lstScreen SEPARATED BY CR
	i++
	Moni <- ControlCreate("Monitor_"+i, typStatic, 170, y, 300, 26)
	Moni..Caption = ExtractString(screen, lastRank, "\")
	res = SysScreenResolution(screen)
	MoniRes <- ControlCreate("MonitorRes_"+i, typStatic, 474, y, 300, 26)
	MoniRes..Caption = ExtractString(res, 1) + " x " + ExtractString(res, 2)
	y+=27
END

Visualizar mails HTML y texto en el mismo control HTML

Los mails pueden ser tipo texto o tipo html.

WinDev guarda en la propiedad HTML el contenido HTML y en la propiedad Message el contenido texto.

Para mostrar la información de forma correcta en un Edit box de tipo HTML.

Podemos hacer:

MySession is EmailPOP3Session

MySession..ServerAddress = "mail.mihostpop.com"
MySession..Name = "pruebas@mihostpop.com"
MySession..Password = "clave"

EmailStartSession(MySession)

// Se trae todos los mensajes
arrMessage is array of Emails
arrMessage = EmailGetAll(MySession)

FOR EACH AMessage OF MySession
    // Si el mensaje es HTML
    IF AMessage..HTML <> "" THEN
       edt_noname1 = AMessage..HTML
    ELSE
       EDT_NoName1 = TextToHTML(AMessage..Message) // Aqui esta el truco. Convertir el texto a HTML
    END
END

Nota: Para ver un mensaje concreto podemos usar la ID. Para eso tenemos AMessage..MessageID = «<op.yua3m7ip6biz1x@desktop-jji97or>»

Optimizar MySQL en Windows (II)

Cuando instalas mySQL te deja el fichero de configuración my.ini en: c:\programData\MySQL\MYSQL Server 5.6\my.ini

Para ver qué consultas SQL van lentas puedes activar el log de consultas lentas cambiando los parametros:

log-output=NONE
slow-query-log=0
long_query_time=10

por

log-output=FILE
slow-query-log=1
long_query_time=5

Con eso se activaba el log para consultas lentas que duren mas de 5 segundos.

Una vez reiniciado el servidor… veras que en la carpeta DATA aparece un fichero *.log de consultas lentas en las que puedes ver qué consultas están ralentizando los procesos y crear los indices oportunos.

La propiedad month (mes)

Suponte que estás en el mes de Enero y quieres trabajar con el mes anterior (diciembre).

Si usas:

MyDate1..Month = MyDate1..Month – 1

Te devolverá 0 (en vez de 12 que es lo que esperas)

En este caso tienes que usar:

MyDate1..Month -= 1

Los unicos operadores que puedes usar con Month son:

++ and —
+= and – =

Editor de informes

Efectivamente al editor de informes puedes ir via:

iPreview()
iPrintReport(nombre del informe)

Y con los botones crear/modificar accedes al editor de informes. Pero eso es algo confuso… Es mucho mejor ir a través de

RunReportsAndQueries(nombre del informe) 

te ahorras la vision preliminar que con su cumulo de opciones desconcierta un poco.

Report & Queries

Una de las cosas buenas de WinDev es que tiene un editor de informes que se le puede entregar al cliente.

Para que se esto le funcione al cliente tienes que hacer 3 cosas:

1.- Decirlo en el proyecto (en la opción Advanced)

2.- Decirlo individualmente en cada informe en (options). Yo suelo marcar todo (all modificable/ Include the compiled code)

3.- Al cliente tienes que adjuntarle el exe del Reports & Queries que te lo tienes que bajar de la web de WinDev.


Cuando el cliente abre el preview del informe tiene un par de botones para modificar o para crear informes. Nos vamos a centrar en modificar informes.

Dándole al boton modificar te abre el diseñador del informe y te permite hacer cambios en él. Cuando una vez realizados los cambios le das a guardar verás que WD te crea al lado del exe una carpeta llamada Reports and Queries. En esa carpeta junto con diversos ficheros que si los eliminas parece que no pasa nada… te crea un fichero con el mismo nombre que tu report. Si el Report se llamaba Informe1…. verás que aparece un fichero que se llama Informe1.wde

Lo mas curioso es que una vez modificado el informe por el usuario, las veces siguientes que accedes al preview te muestra siempre el informe modificado. No hay forma de recuperar el informe original salvo que borres el que se ha creado dentro de la carpeta Reports & Queries.

Para acceder a esos informes puedes usar:

IF InTestMode() THEN
    iPreview(i100,Informe1)

    iPrintReport(Informe1)
ELSE
    iPreview(i100,CompleteDir(fExeDir()) + "Reports and Queries\Informe1.wde")

    iPrintReport(CompleteDir(fExeDir()) + "Reports and Queries\Informe1.wde")
END

Nota: para modificar el directorio de los informes por defecto puedes usar: fReportsAndQueriesDir()

¿Donde se guarda la información de la aplicación?

En modo desarrollo (cuando lo ejecutas desde los fuentes) se guarda en:

HKEY_CURRENT_USER\SOFTWARE\PC SOFT\WINDEV\21.0\TestMode (o ModeTest en WD 20)\<project>

Desde el ejecutable en:

HKEY_CURRENT_USER\SOFTWARE\Applications WinDev\<project>

Para grabar en otro sitio podrias usar:

InitParameter(paramRegistry, «HKEY_CURRENT_USER\Software\DDSoft\DDTool\3.51»)

De todos modos yo te recomiendo guardar en XML en el propio directorio de la aplicación. Esto tiene muchas ventajas:

1.- Es más fácil recuperar la configuración por defecto de la aplicación. Basta con que borres el fichero *.xml y te evitas navegar por oscurantistas claves del registry.

2.- Se puede tener 2 instalaciones en la misma máquina con configuraciones distintas.

InitParameter(paramXML, <path de la aplicacion> + «configuracion.xml»)

También le puedes añadir un parametro para indicar el usuario.

Optimizar MySQL en Windows (I)

Si tienes muchos usuarios aumenta las conexiones.

Para saber el número de conexiones permitidas ejecuta: SHOW VARIABLES LIKE ‘max_connections’

Para aumentarlas, en la seccion mysqld del my.ini pon: max_connections = 200

El limite máximo es 10.000

Establece el Max_Allowed_Packet = 100M
Key_Buffer_Size=512M
query_cache_size = 128MB
query_cache_limit = 4MB
table_cache=512
tmp_table_size = 64MB

Mas info sobre la optimizacion en: http://dev.mysql.com/doc/refman/5.0/en/optimization.html

Para saber el número de conexiones activas puedes usar:

SHOW STATUS WHERE `variable_name` LIKE ‘Threads_%’ OR variable_name = ‘Connections’

Esto te da algo parecido a: