Huawei Mate 8 se agota en un día en China

El diseño del Huawei Mate 8 destaca por su aspecto elegante con un cuerpo completamente en aluminio. Sus marcos son mas delgados que su predecesor e incluso mejora su proporción entre cuerpo y pantalla. Los bordes de su pantalla tiene el vidrio curvado proporcionando un efecto 2,5 D.

huawei mate 8
Así es el Huawei Mate 8. / © Huawei

La parte trasera está coronada por un cámara protegida con un borde circular metálico. A su derecha se encuentra un doble flash LED y debajo tenemos el sensor de huella dactilar. En la parte de abajo tenemos unas ranuras para el altavoz principal y el micrófono.

Su aspecto es muy similar al del Mate S, pero su tamaño llega hasta las seis pulgadas de diagonal de pantalla.

NEXT Image 2 3
Disponible en cuatro colores. / © Huawei

Huawei Mate 8: Especificaciones técnicas

Este nuevo Mate 8 cuenta con un procesador Kirin 950, mucho más potente que el 920 que montaba el Mate 7, y además es el primer smartphone en contar con la GPU Mali T880. Este SoC es capaz de ofrecer un 22% más de rendimiento y un 12% más de ahorro de energía que el Exynos 7420.

Para la memoria interna y la memoria RAM se podrá elegir entre dos versiones. La más económica contará con 3GB de RAM y 32 GB de memoria interna. La gama alta estará equipada hasta con 4 GB de RAM y 64 GB de memoria interna. Lo más probable es que además cuente con una ranura compartida para una tarjeta nano SIM y una tarjeta micro SD para ampliar la memoria hasta 128 GB más.

NEXT Image 3 3
El nuevo Mate 8 con Kirin 950. / © Huawei

Las cámaras que monta el Mate 8 suben la resolución que ya tenía su predecesor el Mate 7 hasta los 16 megapíxeles en la cámara principal con estabilización y f/2.0, acompañada de un doble flash led de dos tonos. La cámara frontal también sube llegando a los 8 megapíxeles.

El Ascend Mate 7 contaba con una magnífica batería de 4.100 mAh. El nuevo Mate 8 recorta un poco esta característica, que ha hecho tan famosa a esta línea, hasta los 4.000 mAh. El sistema operativo es EMUI 4.0 basado en Android Marshmallow que seguro exprimirá al máximo esta batería.

Para la pantalla presenta un tamaño de 6 pulgadas y una resolución Full HD. Como viene siendo la tendencia de los nuevos dispositivos presentados por Huawei, el nuevo Mate 8 también cuenta con un sensor de huella dactilar en la parte posterior como ya tenía el Ascend Mate 7.

SISTEMA OPERATIVO Android 6.0 Marshmallow
PANTALLA 6 pulgadas
BATERÍA 4.000 mAh
CÁMARA 8MP / 16MP
PROCESADOR Hisilicon Kirin 950
RAM 3-4 GB
MEMORIA INTERNA 32-64 GB
PRECIO Desconocido

Huawei Mate 8: Precio y Lanzamiento

Según nos revela gsmarena  el Huawei Mate 8 se agotó el mismo día se su salida a la venta. La compañía china Huawei debe estar más que satisfecha con la devoción que sus compatriotas les profesan.

El precio de salida del Huawei Mate 8 en China ha sido de 2.999 yuanes para su versión de 3GB/32 GB, unos $470 y 3.699 yuanes para su versión de 4GB/64 GB, más o menos un $580. Nosotros todavía deberemos esperar a que la compañía se pronuncie y nos diga cuándo podremos lanzarnos a su compra. Esperemos que no nos hagan esperar mucho mas.

 

 

Armada Americana OFF

En abril de 2015, el destructor norteamericano USS Donald Cook fue desactivado completamente durante una patrulla en el Mar Negro por un simple  bombardero ruso desarmado.

 

Un avión ruso Su-24 envió una señal electrónica al barco “desactivado todos los radares, los circuitos de control, los sistemas, la transmisión de información, etc. a bordo del destructor estadounidense. En otras palabras, el todo poderoso sistema Aegis de la OTAN, que está a punto de ser instalado como sistema de defensa en la mayoría de los buques modernos de la OTAN fue anulado por un simple avión”, según informa Red Voltaire.

El destructor de misiles guiados representa la vanguardia de la tecnología militar de los Estados Unidos. Lleva a misiles de crucero Tomahawk con un alcance de hasta 2.500 kilómetros, capaces de transportar explosivos nucleares. El barco lleva 56 misiles Tomahawk en el modo estándar y 96 misiles en modo de ataque. También está equipado con la última tecnología del sistema de combate Aegis.

El Sistema de Combate Aegis es un sistema de armamento naval fabricado por Lockheed Martin. Utiliza sofisticada tecnología informática y de radar para rastrear y guiar a las armas hacia objetivos enemigos.

“El Departamento de Estado reconoció que la tripulación del destructor USS Donald Cook se ha visto gravemente desmoralizado desde que su buque fue anulado por un único avión de combate ruso Sukhoi-24 (Su-24) sin bombas ni misiles, pero dotado de un dispositivo de guerra electrónica”

Antes de este incidente en el Mar Negro, el Ministerio de Defensa ruso se quejó por el despliegue del buque de guerra norteamericano. El ministerio dijo que los Estados Unidos demostró que los sistemas anti-misiles en Europa están destinadas a socavar la disuasión nuclear de Rusia.

Rusia ha condenado la colocación por parte de la OTAN de un radar en la República Checa y de diez interceptores en Polonia.

Con lo sucedido, Rusia también está enviando un mensaje a la OTAN acerca del posicionamiento de la Alianza Atlántica sobre la crisis de Ucrania.

Y el mensaje no puede ser más contundente: Rusia tiene la capacidad de anular los dispositivos tecnológicamente más avanzados de la maquinaria militar de los Estados Unidos, incluyendo su capacidad de lanzar misiles nucleares.

Y con tan solo un simple zumbido electrónico…

Auto Híbrido Prius

El nuevo Toyota Prius ya está aquí. Se habían difundido varias imágenes espía que dejaban entrever que el nuevo Prius iba a cambiar estéticamente mucho con respecto al anterior, y así ha sido. El nuevo Toyota Prius 2016 es la cuarta generación de este coche híbrido eléctrico y supone una renovación completa del mismo.

Han pasado 18 años desde que se lanzó la primera generación del Prius en 1997 en Japón. El Toyota Prius tiene el honor de haber conseguido popularizar los coches híbridos en todo el mundo. Del Prius, entre las tres generaciones, se han vendido ya más de 3,5 millones de unidades en total, y sumando todos los modelos híbridos de Toyota y Lexus, se han vendido más de 8 millones de coches híbridos.

Toyota Prius 2015 2

Toyota Prius 2016: nuevo diseño y nueva arquitectura

El nuevo Toyota Prius 2016 sigue teniendo un diseño de la carrocería donde se busca la mejor aerodinámica posible, pues eso redunda en menos consumo, de ahí que de perfil se pueda apreciar una línea en gota de agua como en el anterior. Sin embargo, se ha aligerado la sensación disimulando el pilar C del coche y alargando ligeramente los pilotos posteriores y el alerón integrado en el portón del maletero, para que visualmente recuerde a un sedán de tres volúmenes sin serlo.

Si el Prius fue siempre un coche de diseño atrevido, la cuarta generación lo es todavía más. El nuevo Toyota Prius 2016 rompe con lo establecido y propone trazos vigorosos y atrevidos, más angulosos y con faros y pilotos singulares y diferenciadores. Los faros, por cierto, son Full LED.

Toyota Prius 2015 6

Además de estrenar nuevo diseño, el nuevo Prius también estrena nueva plataforma, la primera desarrollada con la nueva arquitectura global de Toyota —Toyota New Global Architecture (TNGA). Ésta hace más versátil la fabricación y reduce los costes de producción de los vehículos”.

Estrena plataforma, es más grande y a la vez más ligero

Se ha aumentado la rigidez y resistencia de la carrocería con nuevos aceros de alto límite elástico, y a la vez se ha reducido peso. El nuevo Toyota Prius de cuarta generación es 6 cm más largo, 1,5 cm más ancho y 2 cm más bajo que el Prius anterior de tercera generación. Esto supone que mide 4,54 m de largo, 1,76 m de ancho y un poco más de 1,48 m de alto. Sigue siendo un coche de dimensiones contenidas.

Toyota Prius 2015 5

Interior de mayor calidad

Sin conocerse todavía todas las especificaciones y cotas, sí se puede afirmar que el habitáculo es ahora algo más espacioso que antes y que el maletero ha crecido también en volumen (en el Prius actual el maletero es de 445 litros, en el nuevo será algo mayor). Esto último ha sido gracias a una batería de níquel e hidruro metálico (NiMH) de mayor densidad energética.

En el interior destaca la notablemente mejorada calidad visual de acabado, con materiales con mejor presencia que en la anterior generación. Según versiones, el interior puede incluir elementos ornamentales en blanco brillante con aspecto de porcelana.

Toyota Prius 2015 3

El diseño del salpicadero hace prevalecer la simetría con respecto a un eje central. Se sigue utilizando un cuadro de instrumentos digital centrado, pero con nueva pantalla con más resolución y color, que también muestra más información. Se completa con una nueva pantalla táctil a color en la consola central del sistema de infoentretenimiento Toyota Touch.

La palanca de cambio se relega a una posición casi testimonial justo debajo de los mandos del climatizador. El Prius es un coche de cambio automático, así que el uso de la palanca se reduce a insertar la marcha atrás o bien utilizar el freno motor.

Toyota Prius 2015 8

El motor de gasolina más eficiente del momento

Tampoco se ha desvelado aún cuánta potencia tiene el nuevo Toyota Prius 2016, pero sí que utiliza un motor térmico que ahora supera ligeramente el 40 % de rendimiento, y se convierte en el motor de gasolina más eficiente del momento. El consumo combinado mejora un 10 %, y sin tener todavía las cifras definitivas de la homologación en Europa (en EEUU se estima que hará 55 mpg), sí podemos adelantar que rondará los 3,5 l/100 km (cuando en el anterior Prius era de 3,9 l/100 km). Habrá también una versión Eco que llegará un poco más adelante.

También habrá un Toyota Prius Eco, pero más adelante

La conducción y el comportamiento del coche también se han renovado por completo. El centro de gravedad está ahora algo más bajo y se utilizan nuevas suspensiones que aúnan refinamiento de marcha y mayor control y respuesta más ágil y dinámica. Destaca sobre todo la nueva suspensión trasera de doble horquilla (multibrazo).

Toyota Prius 2015 7

Para completar el equipamiento del nuevo Toyota Prius 2016, además de navegador GPS, climatizador automático, tapicería de cuero o asistente de aparcamiento, entre otros, puede incluir también una base de recarga inalámbrica para teléfonos móviles en la consola central. Según versiones, se podrá equipar control de velocidad de crucero adaptativo y además el paquete de seguridad Toyota Safety Sense, pero más avanzado que el que montan otros modelos de la marca.

Este paquete incluye reconocimiento de señales de velocidad, asistente de precolisión, asistente para las luces de carretera y alerta de cambio involuntario de carril, pero además se amplía conreconocimiento de peatones y asistente de mantenimiento en el carril.

El nuevo Toyota Prius 2016 se pondrá a la venta a principios del próximo año.

Fuente: Motorpasion

MySQL acelerará en 200%

Oracle anuncia considerable aceleración de MySQL mediante nueva actualización, la mayor de los últimos dos años.

Oracle anunció el 19 de octubre la versión 5.7 de MySQL. El software estará disponible para descargas a partir del lunes 26 de octubre. Una de las principales novedades es la considerable aceleración de algunas consultas. En la prueba de referencia citada por la empresa, SysBench Read only Point Selects, MySQL 5.7 logra gestionar 1,6 millones de consultas por segundo, en 1024 conexiones simultáneas.

Esto implica una capacidad tres veces mayor que MySQL 5.6 en el mismo sistema. Cabe señalar que Oracle no informa en su comunicado el tipo de sistema en que realizó la prueba.

Anteriormente, Oracle ha explicado que las mejoras en rendimiento obedecen, entre otras cosas, a un mejor aprovechamiento de sistemas con numerosos kernels y SSD.

Considerables mejoras

La empresa anuncia además una serie de mejoras en otras áreas, que incluyen escalabilidad, disponibilidad, y posibilidades de administración.

Asimismo, la incorporación de un nuevo modelo dinámico de costos para MySQL Optimizer contribuirá a mejorar el rendimiento y el control de las consultas, especialmente en aquellos casos en que hay un considerable uso de la cláusula Join.

Mayores volúmenes de datos

Aunque MySQL es el producto original, con el paso del tiempo grupos de desarrolladores han creado diversas bifurcaciones, desarrolladas en proyectos independientes. La más conocida es MariaDB, mientras que la más reciente es Amazon Aurora.

“MySQL 5.7 ofrece una amplia gama de innovaciones que permiten a los desarrolladores, administradores de bases de datos y DevOps herramientas para construir y gestionar la web de próxima generación y aplicaciones basadas en la nube capaces de procesar cada vez más volúmenes de datos”, dijo Tomás Ulin, vicepresidente de ingeniería de MySQL, Oracle. “MySQL 5.7 se basa en versiones de Development Milestone, que han permitido a los usuarios de visualizar, probar y proporcionar retroalimentación durante el proceso de desarrollo y, como resultado, esta versión ha sido un proceso de colaboración entre muchos miembros a la comunidad MySQL”.

Fuente: Diario TI 

 

Ejemplo RMChart desde DLL

2015-10-23_202626

Descarga Ejemplo Aquí

/*
 * RMChart DLL Demo by (c)2015 MigSoft 
 */

#include "oohg.ch"

#define ID_CHART   1001
#define ID_CHART_2 1002

#define RMC_DEFAULT   O
#define RMC_PORTRAIT  1
#define RMC_LANDSCAPE 2

#define RMC_EMF       1
#define RMC_EMFPLUS   2
#define RMC_BMP       3


Function Main()

  DEFINE WINDOW Win_1 ;
    AT 0,0 ;
    WIDTH 800 ;
    HEIGHT 600 ;
    TITLE 'Test RMChart By (c)2015 MigSoft' ;  
    ON INIT Chart( MyFillData(1) ) ;
    MAIN 
  
    DEFINE MAIN MENU
      DEFINE POPUP 'Test'
        MENUITEM 'Chart 1 View'  ACTION Chart( MyFillData(1) )
        MENUITEM 'Chart 1 Print' ACTION PrintChart( MyFillData(1) ) 
        SEPARATOR
        MENUITEM 'Chart 2 View'  ACTION Chart( MyFillData(2) )
        MENUITEM 'Chart 2 Print' ACTION PrintChart( MyFillData(2) )
        SEPARATOR
        MENUITEM 'Chart 3 View'  ACTION Chart( MyFillData(3) )
        MENUITEM 'Chart 3 Print' ACTION PrintChart( MyFillData(3) )
      END POPUP
    END MENU

  END WINDOW
  
  CENTER WINDOW Win_1
  ACTIVATE WINDOW Win_1

Return

*-----------------------------------------------------------------------------*
Procedure Chart( cData )
*-----------------------------------------------------------------------------*

        CallDll32 ( "RMC_CREATECHARTFROMFILE" , "RMCHART.DLL" , GetFormHandle("Win_1"), ;
                    ID_CHART, 10, 10, 0, cData  )        
        CallDll32 ( "RMC_DRAW" , "RMCHART.DLL" , ID_CHART  )        

Return

*-----------------------------------------------------------------------------*
Procedure PrintChart( cData )
*-----------------------------------------------------------------------------*

    CallDll32 ( "RMC_CREATECHARTFROMFILE" , "RMCHART.DLL" , GetFormHandle("Win_1"), ;
                 ID_CHART_2, 10, 10, 1, cData  )        

    IF CallDll32 ( "RMC_DRAW2PRINTER" , "RMCHART.DLL" , ID_CHART_2, RMC_LANDSCAPE, ;
                   10, 10, 250, 150, RMC_EMFPLUS  )  < 0
       MsgStop("Print error!", "Error")   
       
    ENDIF

    CallDll32 ( "RMC_DELETECHART" , "RMCHART.DLL" , ID_CHART_2  )        

Return


Function MyFillData( nOp )
    Local sData := "" 

  If nOp == 3
    sData += "00003650|00004450|000051|000061|000071|00008-6697831|00009401|00011Tahoma|100011"
    sData += "|1000310|1000410|10005-5|10006-5|1000910|100101|100111|100121|100131|100181|1002"
    sData += "00|100217|1002215|100238|100272|100331|100341|100358|100378|100411|100482|100492"
    sData += "|10051-6751336|10052-15132304|10053-983041|100541|100558|10056-16777077|10057-16"
    sData += "777077|100586|10060-16777077|10061-1468806|100622|10180data source: www.federalr"
    sData += "eserve.gov + www.ecb.int|10181Prime Rates in USA and Euroland|10183 %|101871999*"
    sData += "2000*2001*2002*2003*2004*2005*2006|110011|1100221|110035|1100434|110052|110063|1"
    sData += "10073|1100970|1101312|110171|11019-16744448|1102115|110221|1102396|110262|110521"
    sData += "2|110534.75*4.75*4.75*4.75*4.75*5*5*5.25*5.25*5.25*5.5*5.5*5.5*5.75*6*6*6.5*6.5*"
    sData += "6.5*6.5*6.5*6.5*6.5*6.5*5.5*5.5*5*4.5*4*3.75*3.75*3.5*3*2.5*2*1.75*1.75*1.75*1.7"
    sData += "5*1.75*1.75*1.75*1.75*1.75*1.75*1.75*1.25*1.25*1.25*1.25*1.25*1.25*1.25*1*1*1*1*"
    sData += "1*1*1*1*1*1*1*1*1*1*1.25*1.5*1.75*2*2.25*2.25*2.5*2.75*2.75*3*3.25*3.25*3.5*3.75"
    sData += "*3.75*4*4.25*4.5*4.5*4.75*4.75*5*5.25*5.25*5.25*5.25*5.25*5.25*5.25|120011|12002"
    sData += "21|120035|1200434|120052|120063|120073|1200950|1201312|120171|12019-2448096|1202"
    sData += "115|120221|1202396|120262|1205212|120533*3*3*2.5*2.5*2.5*2.5*2.5*2.5*2.5*3*3*3*3"
    sData += ".25*3.5*3.75*3.75*4.25*4.25*4.5*4.5*4.75*4.75*4.75*4.75*4.75*4.75*4.75*4.5*4.5*4"
    sData += ".5*4.25*3.75*3.75*3.25*3.25*3.25*3.25*3.25*3.25*3.25*3.25*3.25*3.25*3.25*3.25*3."
    sData += "25*2.75*2.75*2.75*2.5*2.5*2.5*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*"
    sData += "2*2*2*2*2*2.25*2.25*2.25*2.5*2.5*2.5*2.75*2.75*3*3*3.25*3.25*3.5|010011|010054|0"
    sData += "100721|01014-16744448|010222|01024216*287|01025109*109|010272|010283|010012|0100"
    sData += "51|01010295|01011102|010191|01026USA (Federal Funds Rate)|010013|010054|0100721|"
    sData += "01014-10496|010222|01024260*287|01025192*192|010272|010283|010014|010051|0101029"
    sData += "5|01011185|010191|01026Euroland (Prime Rate)" 
  Endif
  
  If nOp == 2   
    sData := "00003670|00004450|000051|000061|000071|00008-10185235|00009310|00011Tahoma|10001" + ;
             "1|100035|1000410|10005-5|10006-5|1000912|100101|100111|100131|100181|10020100000" + ;
             "|10021250000|1002211|100239|100281|100292|100300|100310|100322|100331|100341|100" + ;
             "3510|100378|100482|100492|10051-32944|10052-1296|10053-983041|100541|100558|1005" + ;
             "6-1828|10057-16777216|100592|10060-1828|10061-16777216|10180data source: F.A.Z|1" + ;
             "0181The world's 10 biggest industrial companies 2003|10183$ |10184Total turnover" + ;
             " in Mill. Dollar|10185 %|10186Net operating margin|10187Exxon Mobil*Royal Dutch " + ;
             "/ Shell*BP*General Motors*Daimler Chrysler*Ford Motor*Toyota Motor*General Elect" + ;
             "ric*TOTAL*Chevron Texaco|110011|110021|110031|110043|110053|11006-1|1100950|1101" + ;
             "31|11014-1|110171|11019-10496|1102111|110221|1102310|11053242365*235598*232571*1" + ;
             "85524*170457*164196*149321*132797*130067*119703|120011|1200221|120035|1200422|12" + ;
             "0052|120061|120071|1200970|120111|120121|120131|1201421|120171|12019-16744448|12" + ;
             "02115|120221|1202310|120261|120538.9*4.1*4.4*2.1*.3*.3*5.9*11.3*6.7*6"
  Endif
  
  If nOp == 1   
    sData := "00003700|00004500|000054|000061|000071|00008-984833|00009310|00011Tahoma|100011|" + ;
             "100032|100042|10005348|10006248|1000910|100101|100111|100181|100200|10021100|100" + ;
             "2211|100238|100331|100341|100355|100378|100481|100491|10051-984833|10052-1677721" + ;
             "6|10053-657956|100541|100558|10056-16777216|10057-16777216|10060-16777216|10061-" + ;
             "16777216|10187Label 1*Label 2*Label 3*Label 4*Label 5|110011|110021|110031|11004" + ;
             "6|110056|11006-1|110091|110131|11014-1|110171|1102111|110221|110235|1105330*40*7" + ;
             "0*60*20|200011|20003352|200042|20005-2|20006248|2000910|200101|200111|200181|200" + ;
             "200|20021100|2002211|200238|200331|200341|200355|200378|200484|200491|20051-9848" + ;
             "33|20052-16777216|20053-657956|200544|200555|20056-16777216|20057-16777216|20060" + ;
             "-16777216|20061-16777216|20187Label 1*Label 2*Label 3*Label 4*Label 5|210011|210" + ;
             "023|210033|210045|210055|21006-1|210091|210101|210131|21014-1|210171|2102111|210" + ;
             "221|210235|2105320*10*15*25*30|220011|220023|220033|220045|220055|22006-1|220091" + ;
             "|220101|220131|22014-1|220171|2202111|220221|220235|2205325*30*10*20*15|230011|2" + ;
             "30023|230033|230045|230055|23006-1|230091|230101|230131|23014-1|230171|2302111|2" + ;
             "30221|230235|2305310*20*40*20*30|240011|240023|240033|240045|240055|24006-1|2400" + ;
             "91|240101|240131|24014-1|240171|2402111|240221|240235|2405340*30*20*30*20|300011" + ;
             "|300032|30004252|30005348|30006-2|3000910|300101|300181|300481|300491|30051-9848" + ;
             "33|30052-16777216|30053-657956|310011|3100251|310031|3100454|310054|310071|31009" + ;
             "1|310121|310151|310161|310171|310182|310211|310221|310235|3105330*50*20*40*60|40" + ;
             "0011|40003352|40004252|40005-2|40006-2|4000910|400101|400111|400131|400181|40020" + ;
             "100|40021250|4002211|400238|400281|400292|400300|400310|400322|400331|400341|400" + ;
             "3510|400378|400482|400492|40051-984833|40052-16777216|40053-984833|400541|400558" + ;
             "|40056-16776961|40057-16777216|400592|40060-16777216|40061-16777216|40183$ |4018" + ;
             "5 %|410011|410021|410031|410043|410053|41006-1|4100950|410131|41014-1|410171|410" + ;
             "19-10496|4102111|410221|4102310|41053240*230*220*180*170*160*145*130*125*115|420" + ;
             "011|4200221|420035|4200422|420052|420061|420071|4200963|420111|420121|420131|420" + ;
             "171|42019-16744448|4202115|420221|4202310|420261|420538.1*6.2*4.3*2.2*1.2*3.1*5." + ;
             "2*11.4*7.3*4.2"
  Endif
    
Return(sData)

Prototipo de GUI por Roberto Lopez

I’m trying to learn WIN32API fundamentals and Harbour-C interface,
so i started the development of a little experimental project:
A simple GUI system for Harbour with the goal of hide the complexities
asociated with WIN32API programming (handles, id’s,etc.).

I taked some ideas and inspiration from HGF (Harbour GUI framework)
by Antonio Linares and Alexander Kressin, HWGUI by Alexander Kressin
and BCX by Kevin Diggins.

*------------------------------------------------------------------------------
* Low Level C Routines
*------------------------------------------------------------------------------
#pragma BEGINDUMP

#include <windows.h>

#include <commctrl.h>
#include "hbapi.h"
#include "hbvm.h"
#include "hbstack.h"
#include "hbapiitm.h"

static char g_szClassName[] = "MyWindowClass";
static HINSTANCE g_hInst = NULL;

LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  static PHB_DYNS Dyns;
  Dyns = 0;

  if ( ! Dyns )
  {
    Dyns = hb_dynsymFind( "EVENTS" );
  }

  hb_vmPushSymbol( Dyns->pSymbol );
  hb_vmPushNil();
  hb_vmPushLong( ( LONG ) hWnd );
  hb_vmPushLong( message );
  hb_vmPushLong( wParam );
  hb_vmPushLong( lParam );
  hb_vmDo( 4 );

  if ( hb_arrayGetType( &hb_stack.Return, 1 ) == HB_IT_NIL )
  {
    return DefWindowProc( ( HWND ) hWnd, message, wParam, lParam );
  }
  else
  {
    return 0;
  }
}

HB_FUNC ( EXITPROCESS )
   {
  ExitProcess(0);
   }
HB_FUNC ( LISTVIEW_GETFIRSTITEM )
   {
  hb_retni ( ListView_GetNextItem( (HWND) hb_parnl( 1 )  , -1 ,LVNI_ALL | LVNI_SELECTED) + 1);
   }

HB_FUNC ( INITGUI )
{

  WNDCLASSEX WndClass;
  HANDLE hInstance = GetModuleHandle( NULL );

  g_hInst = hInstance;

  WndClass.cbSize        = sizeof(WNDCLASSEX);
  WndClass.style         =  CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
  WndClass.lpfnWndProc   = WndProc;
  WndClass.cbClsExtra    = 0;
  WndClass.cbWndExtra    = 0;
  WndClass.hInstance     = g_hInst;
  WndClass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
  WndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);
  WndClass.hbrBackground = (HBRUSH)( COLOR_BTNFACE + 1 );
  WndClass.lpszMenuName  = NULL;
  WndClass.lpszClassName = g_szClassName;
  WndClass.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

  if(!RegisterClassEx(&WndClass))
  {
  MessageBox(0, "Window Registration Failed!", "Error!",
  MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
  return;
  }

}

HB_FUNC ( INITTOPMOSTFORM )
{

  HWND hwnd;
  int Style;

  Style = WS_MINIMIZEBOX |
    WS_SIZEBOX     |
    WS_CAPTION     |
    WS_MAXIMIZEBOX |
    WS_POPUP       |
    WS_SYSMENU;

  hwnd = CreateWindowEx(WS_EX_TOPMOST , g_szClassName,hb_parc(1),
  Style,
  hb_parni(2),
  hb_parni(3),
  hb_parni(4),
  hb_parni(5),
  NULL,(HMENU)NULL, g_hInst ,NULL);

  if(hwnd == NULL)
  {
  MessageBox(0, "Window Creation Failed!", "Error!",
  MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
  return;
  }

  hb_retnl ((LONG)hwnd);

}

HB_FUNC ( INITFORM )
{

  HWND hwnd;
  int Style;

  Style = WS_MINIMIZEBOX |
    WS_SIZEBOX     |
    WS_CAPTION     |
    WS_MAXIMIZEBOX |
    WS_POPUP       |
    WS_SYSMENU;

  hwnd = CreateWindow(  g_szClassName,hb_parc(1),
  Style,
  hb_parni(2),
  hb_parni(3),
  hb_parni(4),
  hb_parni(5),
  NULL,(HMENU)NULL, g_hInst ,NULL);

  if(hwnd == NULL)
  {
  MessageBox(0, "Window Creation Failed!", "Error!",
  MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
  return;
  }

  hb_retnl ((LONG)hwnd);

}

HB_FUNC ( INITMODALDIALOG )
{

  HWND parent;
  HWND hwnd;
  int Style;

  parent = (HWND) hb_parnl (6);

  Style = WS_CAPTION	|
    WS_SYSMENU ;

  hwnd = CreateWindow( g_szClassName,hb_parc(1),
  Style,
  hb_parni(2),
  hb_parni(3),
  hb_parni(4),
  hb_parni(5),
  parent,(HMENU)NULL, g_hInst ,NULL);

  if(hwnd == NULL)
  {
  MessageBox(0, "Window Creation Failed!", "Error!",
  MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
  return;
  }

  hb_retnl ((LONG)hwnd);

}

HB_FUNC ( ACTIVATEFORM )
{

  HWND hwnd;
  MSG Msg;

  hwnd = (HWND) hb_parnl (1);

  ShowWindow(hwnd, 1);

  while(GetMessage(&Msg,NULL,0,0) )
  {

  if(!IsWindow(GetActiveWindow()) ||
  !IsDialogMessage(GetActiveWindow(),&Msg))
    {
    TranslateMessage(&Msg);
    DispatchMessage(&Msg);
    }
  }
       
  return;

}

HB_FUNC ( CSHOWCONTROL )
{

  HWND hwnd;
  MSG Msg;

  hwnd = (HWND) hb_parnl (1);

  ShowWindow(hwnd, SW_SHOW);

  return ;
}

HB_FUNC (MAXIMIZE)
{
  ShowWindow((HWND) hb_parnl( 1 ), SW_MAXIMIZE);
}

HB_FUNC (MINIMIZE)
{
  ShowWindow((HWND) hb_parnl( 1 ), SW_MINIMIZE);
}

HB_FUNC (RESTORE)
{
  ShowWindow( (HWND) hb_parnl( 1 ),SW_RESTORE);
}

HB_FUNC ( CHIDECONTROL )
{

  HWND hwnd;
  MSG Msg;

  hwnd = (HWND) hb_parnl (1);

  ShowWindow(hwnd, SW_HIDE);

  return ;
}

HB_FUNC( INITBUTTON )
{
  
  HWND hwnd;
  HWND hbutton;

  hwnd = (HWND) hb_parnl (1);
  
  hbutton = CreateWindow( "button" , hb_parc(2) ,
  WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP ,
  hb_parni(4), hb_parni(5) ,hb_parni(6) ,hb_parni(7) ,
  hwnd,(HMENU)hb_parni(3) , GetModuleHandle(NULL) , NULL ) ;

  hb_retnl ( (LONG) hbutton );

}

HB_FUNC( INITLABEL )
{
  
  HWND hwnd;
  HWND hbutton;

  hwnd = (HWND) hb_parnl (1);
  
  hbutton = CreateWindow( "static" , hb_parc(2) ,
  WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON ,
  hb_parni(4), hb_parni(5) , hb_parni(6), 28,
  hwnd,(HMENU)hb_parni(3) , GetModuleHandle(NULL) , NULL ) ;

  hb_retnl ( (LONG) hbutton );

}

HB_FUNC( INITCHECKBOX )
{
  
  HWND hwnd;
  HWND hbutton;

  hwnd = (HWND) hb_parnl (1);
  
  hbutton = CreateWindow( "button" , hb_parc(2) ,
  WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX | WS_TABSTOP ,
  hb_parni(4), hb_parni(5) , 100, 28,
  hwnd,(HMENU)hb_parni(3) , GetModuleHandle(NULL) , NULL ) ;

  hb_retnl ( (LONG) hbutton );

}

HB_FUNC( INITGROUPBOX )
{
  
  HWND hwnd;
  HWND hbutton;

  hwnd = (HWND) hb_parnl (1);
  
  hbutton = CreateWindow( "button" , hb_parc(2) ,
  WS_CHILD | WS_VISIBLE | BS_GROUPBOX ,
  hb_parni(4), hb_parni(5) , hb_parni(6), hb_parni(7),
  hwnd,(HMENU)hb_parni(3) , GetModuleHandle(NULL) , NULL ) ;

  hb_retnl ( (LONG) hbutton );

}

HB_FUNC( INITRADIOGROUP )
{
  
  HWND hwnd;
  HWND hbutton;

  hwnd = (HWND) hb_parnl (1);
  
  hbutton = CreateWindow( "button" , hb_parc(2) ,
  WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON | WS_TABSTOP | WS_GROUP ,
  hb_parni(4), hb_parni(5) , 100, 28,
  hwnd,(HMENU)hb_parni(3) , GetModuleHandle(NULL) , NULL ) ;

  hb_retnl ( (LONG) hbutton );

}

HB_FUNC( INITRADIOBUTTON )
{
  
  HWND hwnd;
  HWND hbutton;

  hwnd = (HWND) hb_parnl (1);
  
  hbutton = CreateWindow( "button" , hb_parc(2) ,
  WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON | WS_TABSTOP ,
  hb_parni(4), hb_parni(5) , 100, 28,
  hwnd,(HMENU)hb_parni(3) , GetModuleHandle(NULL) , NULL ) ;

  hb_retnl ( (LONG) hbutton );

}

HB_FUNC( INITCOMBOBOX )
{
  
  HWND hwnd;
  HWND hbutton;

  hwnd = (HWND) hb_parnl (1);
  
  hbutton = CreateWindow( "COMBOBOX" , "" ,
  WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_TABSTOP ,
  hb_parni(3), hb_parni(4) , hb_parni(5), 150 , 
  hwnd,(HMENU)hb_parni(2) , GetModuleHandle(NULL) , NULL ) ;

  hb_retnl ( (LONG) hbutton );

}

HB_FUNC( INITLISTBOX )
{
  
  HWND hwnd;
  HWND hbutton;

  hwnd = (HWND) hb_parnl (1);
  
  hbutton = CreateWindowEx( WS_EX_CLIENTEDGE, "LISTBOX" , "" ,
  WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | LBS_DISABLENOSCROLL,
  hb_parni(3), hb_parni(4) , hb_parni(5), hb_parni(6) ,  
  hwnd,(HMENU)hb_parni(2) , GetModuleHandle(NULL) , NULL ) ;

  hb_retnl ( (LONG) hbutton );

}

HB_FUNC( INITTEXTBOX )
{
  
  HWND hwnd;
  HWND hbutton;

  hwnd = (HWND) hb_parnl (1);
  
  hbutton = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT" , "" ,
  WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL,
  hb_parni(3), hb_parni(4) , hb_parni(5) , 25 ,  
  hwnd,(HMENU)hb_parni(2) , GetModuleHandle(NULL) , NULL ) ;

  hb_retnl ( (LONG) hbutton );

}

HB_FUNC( INITEDITBOX )
{
  
  HWND hwnd;
  HWND hbutton;

  hwnd = (HWND) hb_parnl (1);
  
  hbutton = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT" , "" ,
  ES_WANTRETURN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_MULTILINE | WS_VSCROLL | WS_HSCROLL | ES_AUTOHSCROLL,
  hb_parni(3), hb_parni(4) , hb_parni(5), hb_parni(6) ,  
  hwnd,(HMENU)hb_parni(2) , GetModuleHandle(NULL) , NULL ) ;

  hb_retnl ( (LONG) hbutton );

}

HB_FUNC( SETACTIVEWINDOW )
{
  
  HWND hwnd;

  hwnd = (HWND) hb_parnl (1);

  SetActiveWindow (hwnd);

}

HB_FUNC (INITLISTVIEW)
{

  HWND hwnd;
  HWND hbutton;

  hwnd = (HWND) hb_parnl (1);

  hbutton = CreateWindowEx(WS_EX_CLIENTEDGE,"SysListView32","",
  LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_CHILD | WS_TABSTOP | WS_VISIBLE | WS_BORDER | LVS_REPORT,
  hb_parni(3), hb_parni(4) , hb_parni(5), hb_parni(6) ,  
  hwnd,(HMENU)hb_parni(2) , GetModuleHandle(NULL) , NULL ) ;

  ImageList_LoadBitmap(GetModuleHandle(NULL),  0, 16, 1, RGB(255,255,255));
  SendMessage(hbutton,LVM_SETEXTENDEDLISTVIEWSTYLE, 0,LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP );

  hb_retnl ( (LONG) hbutton );

}

//-----------------------------------------------------------------------------
// MsgBox ( cText , cTitle )
//-----------------------------------------------------------------------------
HB_FUNC( MSGBOX )
{
   MessageBox( 0, hb_parc( 1 ), hb_parc( 2 ), MB_SYSTEMMODAL );
}

HB_FUNC( POSTQUITMESSAGE )
{
   PostQuitMessage( hb_parnl( 1 ) );
}

HB_FUNC ( INITLISTVIEWCOLUMNS )
  {

  PHB_ITEM wArray;
  PHB_ITEM hArray;
  char *caption;
  HWND hc;
  LV_COLUMN COL;
  int l9;
  int s;
  int vi;

  hc = (HWND) hb_parnl( 1 ) ;

  l9 = hb_parinfa( 2, 0 ) - 1 ;
  hArray = hb_param( 2, HB_IT_ARRAY );
  wArray = hb_param( 3, HB_IT_ARRAY );

  COL.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT |LVCF_SUBITEM;
  COL.fmt=LVCFMT_LEFT;

  for (s = 0 ; s<=l9 ; s=s+1 )
    {

    caption	= hb_itemGetCPtr ( hArray->item.asArray.value->pItems + s );
    vi = hb_itemGetNI   ( wArray->item.asArray.value->pItems + s );		

    COL.cx=vi;
    COL.pszText=caption;
    COL.iSubItem=s;
    ListView_InsertColumn(hc,s,&COL);

    }

  }

HB_FUNC ( ADDLISTVIEWITEMS )
  {

  PHB_ITEM hArray;
  char *caption;
  LV_ITEM LI;
  HWND h;
  int l;
  int s;
  int c;

  h = (HWND) hb_parnl( 1 ) ;
  l = hb_parinfa( 2, 0 ) - 1 ;
  hArray = hb_param( 2, HB_IT_ARRAY );
  c = ListView_GetItemCount (h);
  caption	= hb_itemGetCPtr ( hArray->item.asArray.value->pItems );

  LI.mask=LVIF_TEXT ;
  LI.state=0;
  LI.stateMask=0;
        LI.iImage=0;
        LI.iSubItem=0;
  LI.iItem=c; 
  LI.pszText=caption;
  ListView_InsertItem(h,&LI);

  for (s = 1 ; s<=l ; s=s+1 )
    {

    caption	= hb_itemGetCPtr ( hArray->item.asArray.value->pItems + s );
    ListView_SetItemText(h,c,s,caption);

    }

} 

HB_FUNC( INITTABCONTROL )
{

  PHB_ITEM hArray;	
  HWND hwnd;
  HWND hbutton;
  TC_ITEM tie; 
  int l;
  int i;

  l = hb_parinfa( 7, 0 ) - 1 ;
  hArray = hb_param( 7, HB_IT_ARRAY );

  hwnd = (HWND) hb_parnl (1);
  
  hbutton = CreateWindow( WC_TABCONTROL , NULL ,
  WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP ,
  hb_parni(3), hb_parni(4) , hb_parni(5), hb_parni(6) ,
  hwnd,(HMENU)hb_parni(2) , GetModuleHandle(NULL) , NULL ) ;

  tie.mask = TCIF_TEXT | TCIF_IMAGE; 
  tie.iImage = -1; 

  for (i = l ; i>=0 ; i=i-1 )
    {
    tie.pszText = hb_itemGetCPtr ( hArray->item.asArray.value->pItems + i );
    TabCtrl_InsertItem(hbutton, 0, &tie); 
    }

  TabCtrl_SetCurSel( hbutton , hb_parni(8) - 1 );

  hb_retnl ( (LONG) hbutton );

}

HB_FUNC (TABCTRL_SETCURSEL)
{

  HWND hwnd;
  int s;

  hwnd = (HWND) hb_parnl (1);

  s = hb_parni (2);

  TabCtrl_SetCurSel( hwnd , s-1 );

}

HB_FUNC (TABCTRL_GETCURSEL)
{

  HWND hwnd;
  hwnd = (HWND) hb_parnl (1);
  hb_retni ( TabCtrl_GetCurSel( hwnd ) + 1 ) ;

}

HB_FUNC (INITIMAGE)
{
  HWND  h;
  HBITMAP hBitmap;
  HWND hwnd;

  hwnd = (HWND) hb_parnl (1);

  h = CreateWindowEx(0,"static",NULL,
  WS_CHILD | WS_VISIBLE | SS_BITMAP ,
  hb_parni(3), hb_parni(4), 0, 0,
  hwnd,(HMENU)hb_parni(2) , GetModuleHandle(NULL) , NULL ) ;

  hBitmap=LoadImage(0,hb_parc(5),IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);

  SendMessage(h,(UINT)STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)hBitmap);

  hb_retnl ( (LONG) h );

}

HB_FUNC( HIWORD )
{
   hb_retnl( HIWORD( hb_parnl( 1 ) ) );
}
HB_FUNC( LOWORD )
{
   hb_retnl( LOWORD( hb_parnl( 1 ) ) );
}

HB_FUNC ( DESTROYWINDOW )
{
   DestroyWindow( (HWND) hb_parnl( 1 ) );
}
//-----------------------------------------------------------------------------
// MsgInfo ( cText , cTitle )
//-----------------------------------------------------------------------------
HB_FUNC( MSGINFO )
{
   MessageBox( 0, hb_parc(1) , hb_parc(2) , MB_OK | MB_ICONINFORMATION | MB_SYSTEMMODAL);
}
//-----------------------------------------------------------------------------
// MsgStop ( cText , cTitle )
//-----------------------------------------------------------------------------
HB_FUNC( MSGSTOP )
{
   MessageBox( 0 , hb_parc(1) , hb_parc(2) , MB_OK | MB_ICONSTOP | MB_SYSTEMMODAL);
}
//-----------------------------------------------------------------------------
// MsgExclamation ( cText , cTitle )
//-----------------------------------------------------------------------------
HB_FUNC( MSGEXCLAMATION )
{
      MessageBox(0, hb_parc(1), hb_parc(2),
         MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
      return;
}

HB_FUNC( INITMENU )
{

  PHB_ITEM pMenu;
  HMENU hMenu, hSubMenu;
  int i;
  char *caption;
  char *vc;
  int vi ;
  int l2;
  HWND hwnd;

  hwnd = (HWND) hb_parnl (1);

  l2 = hb_parinfa( 2, 0 ) - 1 ;
  pMenu = hb_param( 2, HB_IT_ARRAY );

  hMenu = CreateMenu();

  hSubMenu = CreatePopupMenu();

  for (i = 0 ; i<=l2 ; i=i+1 )
    {

    caption	= hb_itemGetCPtr ( pMenu->item.asArray.value->pItems + i );

    if ( strcmp ( caption , "!" ) == 0 )
      {
                        
      vc = hb_itemGetCPtr ( pMenu->item.asArray.value->pItems + i + 1);
      vi = hb_itemGetNI   ( pMenu->item.asArray.value->pItems + i + 2 );		

        if ( strcmp ( vc , "-" ) == 0 )
        {
        AppendMenu ( hSubMenu ,MF_SEPARATOR , 0 , NULL ) ;
        }
        else
        {
        AppendMenu ( hSubMenu , MF_STRING, vi , vc ) ;
              }

      }

    if ( strcmp ( caption , "#" ) == 0 )
      {
      vc = hb_itemGetCPtr ( pMenu->item.asArray.value->pItems + i + 1);
      AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, vc );

                	hSubMenu = CreatePopupMenu();
      }
    }

  SetMenu(hwnd, hMenu);

}

HB_FUNC (ENABLEWINDOW)
{
  HWND hwnd;
  hwnd = (HWND) hb_parnl (1);
  EnableWindow( hwnd , TRUE );	 
}
HB_FUNC (DISABLEWINDOW)
{
  HWND hwnd;
  hwnd = (HWND) hb_parnl (1);
  EnableWindow( hwnd , FALSE );	
}
HB_FUNC (SETFOREGROUNDWINDOW)
{
  HWND hwnd;
  hwnd = (HWND) hb_parnl (1);
  SetForegroundWindow( hwnd );	
}

HB_FUNC (GETFOREGROUNDWINDOW)
{
  HWND x;

  x = GetForegroundWindow() ;
  hb_retnl ((LONG) x );
}

HB_FUNC (GETNEXTWINDOW)
{

  HWND hwnd;
  HWND x;

  hwnd = (HWND) hb_parnl (1);

  x = GetWindow( hwnd, GW_HWNDNEXT	 );

  hb_retnl ((LONG) x );

}

HB_FUNC ( CHECKDLGBUTTON )
{
  CheckDlgButton(
  (HWND) hb_parnl (2),	// handle of dialog box
  hb_parni(1),	// identifier of control
  BST_CHECKED );	// value to set
}

HB_FUNC ( UNCHECKDLGBUTTON )
{
  CheckDlgButton(
  (HWND) hb_parnl (2),	// handle of dialog box
  hb_parni(1),	// identifier of control
  BST_UNCHECKED );	// value to set
}
//-----------------------------------------------------------------------------*
//ComboAddString ( nControlHwnd , cString )
//-----------------------------------------------------------------------------*
HB_FUNC ( COMBOADDSTRING )
{
   char *cString = hb_parc( 2 );
   SendMessage( (HWND) hb_parnl( 1 ), CB_ADDSTRING, 0, (LPARAM) cString );
}
//-----------------------------------------------------------------------------
// ComboSetCurSel ( hwnd,row )
//-----------------------------------------------------------------------------
HB_FUNC ( COMBOSETCURSEL )
{
   SendMessage( (HWND) hb_parnl( 1 ), CB_SETCURSEL, (WPARAM) hb_parni(2)-1, 0);
}
//-----------------------------------------------------------------------------
// ListBoxAddString ( nControlHwnd , cString )
//-----------------------------------------------------------------------------
HB_FUNC ( LISTBOXADDSTRING )
{
   char *cString = hb_parc( 2 );
   SendMessage( (HWND) hb_parnl( 1 ), LB_ADDSTRING, 0, (LPARAM) cString );
}
//-----------------------------------------------------------------------------
// ListBoxSetCurSel ( nControlID )
//-----------------------------------------------------------------------------
HB_FUNC ( LISTBOXSETCURSEL )
{
   SendMessage( (HWND) hb_parnl( 1 ), LB_SETCURSEL, (WPARAM) hb_parni(2)-1, 0);
}
HB_FUNC ( SETDLGITEMTEXT )
{
    SetDlgItemText(
       (HWND) hb_parnl (3) ,	// handle of dialog box
       hb_parni( 1 ),	        // identifier of control
       (LPCTSTR) hb_parc( 2 ) 	// text to set
    );
}


HB_FUNC (CENTER) 
{
 RECT rect;
 int width, height, xres, yres;
 GetWindowRect((HWND) hb_parnl (1), &rect);
 width  = rect.right  - rect.left;
 height = rect.bottom - rect.top;
 xres = GetSystemMetrics(SM_CXSCREEN);
 yres = GetSystemMetrics(SM_CYSCREEN);
 SetWindowPos((HWND) hb_parnl (1), HWND_TOP, (xres - width) / 2,
 (yres - height) / 2, 0, 0, SWP_NOSIZE);
}

HB_FUNC (LISTVIEW_SETCURSEL) 
{
  ListView_SetItemState((HWND) hb_parnl (1), (WPARAM) hb_parni(2)-1 ,LVIS_FOCUSED | LVIS_SELECTED , LVIS_FOCUSED | LVIS_SELECTED );
}

HB_FUNC ( C_SETFOCUS )
{
   hb_retnl( (LONG) SetFocus( (HWND) hb_parnl( 1 ) ) );
}

HB_FUNC ( GETDLGITEMTEXT )
{
   USHORT iLen = 32768;
   char *cText = (char*) hb_xgrab( iLen+1 );

  GetDlgItemText(
  (HWND) hb_parnl (2),	// handle of dialog box
  hb_parni(1),		// identifier of control
  (LPTSTR) cText,       	// address of buffer for text
  iLen                   	// maximum size of string
  );	

   hb_retc( cText );
   hb_xfree( cText );
}
//-----------------------------------------------------------------------------
// IsDlgButtonChecked ( nTextBoxID )
//-----------------------------------------------------------------------------
HB_FUNC ( ISDLGBUTTONCHECKED )
{
  UINT nRes = IsDlgButtonChecked(
                  (HWND) hb_parnl (2), // handle of dialog box
                   hb_parni( 1 )      // button identifier
              );
  if( nRes == BST_CHECKED )
     hb_retl( TRUE );
  else
     hb_retl( FALSE );
}

//-----------------------------------------------------------------------------
// ComboGetCurSel ( nControlHandle )
//-----------------------------------------------------------------------------
HB_FUNC ( COMBOGETCURSEL )
{
hb_retni ( SendMessage( (HWND) hb_parnl( 1 ) , CB_GETCURSEL , 0 , 0 )  + 1 );
}	

//-----------------------------------------------------------------------------
// ListBoxGetCurSel ( nControlHandle )
//-----------------------------------------------------------------------------
HB_FUNC ( LISTBOXGETCURSEL )
{
hb_retni ( SendMessage( (HWND) hb_parnl( 1 ) , LB_GETCURSEL , 0 , 0 )  + 1 );
}	
//-----------------------------------------------------------------------------
// ComboBoxDeleteString ( hwnd , Index )
//-----------------------------------------------------------------------------
HB_FUNC (COMBOBOXDELETESTRING )
{
   SendMessage( (HWND) hb_parnl( 1 ), CB_DELETESTRING, (WPARAM) hb_parni(2)-1, 0);
}
//-----------------------------------------------------------------------------
// ListBoxDeleteString ( hwnd , Index )
//-----------------------------------------------------------------------------
HB_FUNC ( LISTBOXDELETESTRING )
{
   SendMessage( (HWND) hb_parnl( 1 ), LB_DELETESTRING, (WPARAM) hb_parni(2)-1, 0);
}
//-----------------------------------------------------------------------------
// ListViewDeleteString ( hwnd , Index )
//-----------------------------------------------------------------------------
HB_FUNC ( LISTVIEWDELETESTRING )
{
   SendMessage( (HWND) hb_parnl( 1 ),LVM_DELETEITEM , (WPARAM) hb_parni(2)-1, 0);
}

//-----------------------------------------------------------------------------
// ListBoxReset ( nControlHwnd )
//-----------------------------------------------------------------------------
HB_FUNC ( LISTBOXRESET )
{
   SendMessage( (HWND) hb_parnl( 1 ), LB_RESETCONTENT, 0, 0 );
}

//-----------------------------------------------------------------------------
// ListViewReset ( nControlHwnd )
//-----------------------------------------------------------------------------
HB_FUNC ( LISTVIEWRESET )
{
   SendMessage( (HWND) hb_parnl( 1 ), LVM_DELETEALLITEMS , 0, 0 );
}

//-----------------------------------------------------------------------------
// ComboBoxReset ( nControlHwnd )
//-----------------------------------------------------------------------------
HB_FUNC ( COMBOBOXRESET )
{
   SendMessage( (HWND) hb_parnl( 1 ), CB_RESETCONTENT, 0, 0 );
}

HB_FUNC ( SENDMESSAGE )
{
  hb_retnl( (LONG) SendMessage( (HWND) hb_parnl( 1 ), (UINT) hb_parni( 2 ), (WPARAM) hb_parnl( 3 ), (LPARAM) hb_parnl( 4 ) ) );
}

#pragma ENDDUMP

Prótesis 3D para personas amputadas sin recursos

La impresionante evolución de las impresoras 3D en los últimos años ha permitido que surjan proyectos solidarios, aplicados a la medicina y a la fabricación de prótesis, en los que se puede participar desde el ámbito educativo. Así lo ha expresado en el marco de la Euskal Encounter 23 Carlos Lizarbe de Luis, jefe del departamento de electrónica del IEFPS Don Bosco y responsable de impresión 3D en Ikaslab.

A partir del proyecto “Robohand”, surgido en 2011 en Sudáfrica con el objetivo de crear manos robóticas impresas en tres dimensiones, han ido proliferando programas de cooperación mundial destinados a la misma causa: la fabricación de manos para personas que han sufrido amputaciones por minas antipersona o conflictos armados (“Project Daniel” en Sudán), por accidentes laborales o malformaciones congénitas. Se trata de extremidades que no precisan de equipamiento eléctrico ni electrónico para que los destinatarios sean capaces de repararlas por sí mismos. Hay que tener en cuenta que la mayoría de ellas van a parar a países africanos o latinoamericanos con pocos recursos, por lo que cuanto más simples son, más prácticas resultan.

Lo que hace que este tipo de cooperación sea especialmente exitosa es la capacidad de enviar el diseño de las piezas por correo electrónico, de manera que las prótesis puedan imprimirse de forma inmediata y muy barata, dado el bajo coste del plástico con el que se fabrican. Actualmente, el proyecto e-Nable, en el que se inscribe el propio Lizarbe junto con algunos de sus alumnos, se dedica precisamente a poner en contacto a gente que necesita manos artificiales, con diseñadores de prótesis y personas que disponen de impresoras 3D. En la mayoría de ocasiones, la comunidad de voluntarios que participan en e-Nable y las personas que solicitan su ayuda se encuentran separados por miles de kilómetros de distancia.

El Proyecto Gutenberg 3D, puesto en marcha por el instituto Don Bosco junto con otros tres centros estatales, se enmarca dentro de e-Nable y, además de colaborar en su labor solidaria, pretende “mejorar el aprendizaje de los alumnos” a la vez que se genera una “ilusión por ayudar”. El laboratorio Ikaslab de impresión 3D dirigido por Lizarbe ya ha conseguido fabricar varias prótesis que han cambiado por completo la vida de sus destinatarios al permitirles realizar labores básicas de las que antes eran incapaces tales como agarrar objetos o alimentarse. De un prototipo muy sencillo que funcionaba a base de un sistema de tensores y de un montaje de hilos que permitía cerrar los dedos al girar la muñeca, se ha pasado a implementar modelos más complejos como el de la “flexi-hand”, más elástica y realista, y con un recubrimiento más elaborado. En el último evento organizado por el laboratorio de investigación, se logró crear diez manos protésicas de este tipo en cuatro horas.

Fuente: DiarioTI

Consejos para visualizar datos

Las empresas medianas confían en Big Data y están implementando con mayor frecuencia proyectos vinculados con la visualización de datos. En una reciente encuesta de Competitive Edge, el 80% de los entrevistados estuvo de acuerdo en que hacer un mejor uso de los datos podría ayudarles a mejorar la calidad del producto, descubrir nuevas oportunidades de negocio y acelerar la toma de decisiones. El 90% tenía proyectos de Big Data, ya sea en operación o por iniciar.

BigData

La razón para este interés creciente es simple: visualizar datos es crucial para darle sentido a la enorme cantidad de información que está circulando en las compañías, independiente de su tamaño. Sin embargo, la piedra de tope en este tipo de empresas es el presupuesto, muchas veces limitado y con recursos TI igualmente restringidos, sin analistas de datos entrenados, lo que provoca que ese tipo de negocios se confundan al momento de aprovechar las bondades que ofrece la analítica.

SAS proporciona siete consejos prácticos para que las empresas medianas sepan sobre cómo iniciar y qué hacer para ser exitosos con la implementación de un proyecto de visualización de datos.

Construir el caso de negocio

Vagas promesas relacionadas con la mejora en la calidad de un producto o un mejor servicio al cliente no son suficientes para justificar una inversión en una solución de visualización de datos. Si lo que quiere es tomar decisiones basadas en datos, es necesario conocer exactamente cuáles serán los beneficios de negocio de un mejor análisis de datos, cuál es el valor de ellos para la empresa y cuánto será su costo.

Colaborar y cooperar

La visualización de datos es un área donde no se puede ir solo. La encuesta citada identificó una colaboración exitosa entre la unidad de negocios y la de TI como uno de los factores más importantes del éxito en los proyectos de analítica de datos, y la falta de cooperación entre las dos como la causa más importante de fracaso.

Democratizar sus datos

Las soluciones de visualización de datos se desarrollaron inicialmente como una herramienta de negocio para las compañías de gran escala que pudieran contratar estadísticos y otros científicos de datos capaces de realizar análisis sofisticados. Este modelo es muy costoso, lento y torpe para las empresas medianas, y debe ser evitado a toda costa. Ésta es un área donde tener la tecnología correcta juega un papel muy importante. Las soluciones de visualización de datos que existen ahora no sólo sirven a las necesidades de los expertos, sino que también pueden ser del uso de los no especialistas. En esencia, estas herramientas guían a los gerentes a través de un proceso analítico de autoservicio.

Pedir ayuda

No permita que una falta de talento técnico lo detenga. Si tiene un objetivo de negocio claro, puede involucrar a los consultores sobre una base limitada para obtener la experiencia técnica necesaria para tener una herramienta de visualización de datos funcional, así como un entrenamiento personalizado para la base de usuarios.

No ignorar la necesidad de velocidad

La velocidad de una solución de visualización de datos no es algo que sólo preocupe al departamento de TI. Una velocidad de sistema tiene una serie de  consecuencias de negocio muy prácticas: los gerentes que están tratando de descifrar un problema necesitan un sistema que funcione en tiempo real. Si cada respuesta requiere una hora de cálculo, es muy difícil para los usuarios mantener la continuidad de pensamiento. Los gerentes tienden a ser hombres y mujeres de acción. Un sistema lento simplemente no puede procesar las grandes cantidades de datos disponibles para las compañías medianas. El valor de la visualización de datos es proporcional al número de personas en una organización que puede trabajar directamente con datos, sin ayuda de expertos. La conclusión aquí es que se necesita un sistema robusto, ya que los sistemas lentos hacen imposible la visualización de datos en empresas medianas.

Mirar más allá de los gráficos deslumbrantes

Las buenas observaciones sólo pueden llevarte lejos. Una variedad de generadores de reportes están disponibles y pueden construir gráficos impresionantes e incluso paneles de instrumentos. Mientras que estos productos hacen un buen trabajo de comunicar de forma más efectiva lo que ya se sabe, no pueden decir lo que no se sabe, a menos que estén respaldados por robustas capacidades analíticas. Como mínimo, buscar la capacidad de examinar los datos fácilmente, para crear gráficos de forma automática, y otorgar capacidades de geolocalización.

Hacer uso de la nube

No tiene que invertir necesariamente en un sistema en sitio para obtener los beneficios de la visualización de datos. Las soluciones on-demand ofrecen tiempo rápido para valorar, sin carga en el departamento de TI para instalar y mantener otro sistema. También tienen un impacto financiero positivo ya que disminuye el costo total de implementación a la empresa.

Fuente: DiarioTI

Ejemplo [blowfish.prg] – Encriptar mensaje

2015-09-03_131543

 

PROCEDURE Main()

   LOCAL cText := "This is my secret message."
   LOCAL cKey := hb_blowfishKey( "Top Secret ;-)" )

   LOCAL cEncrypted

   ? "Original:", hb_StrToExp( cText )

   /* encrypt data */
   ? "Encrypted:", hb_StrToHex( cEncrypted := hb_blowfishEncrypt( cKey, cText ) )

   /* decrypt data */
   ? "Decrypted:", hb_StrToExp( hb_blowfishDecrypt( cKey, cEncrypted ) )

   RETURN