FiveTouch Preguntas frecuentes

Post Reply
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

FiveTouch Preguntas frecuentes

Post by Antonio Linares »

1. Que es FiveTouch
=================

Es un nuevo producto que he desarrollado que te permite hacer aplicaciones para Android y Apple iOS sin tener que aprender a usar las herramientas de Google y de Apple, y sin tener que dedicar tiempo a aprender nuevos lenguajes, puesto que FiveTech usa Harbour y QT, permitiendo crear tu aplicación desde el mismo tablet, ó crearla en un PC y luego enviarte por email el PRG de tu aplicación para ejecutarlo en Android (por ejemplo: copiando el código del PRG desde un email y pegándolo en el editor de FiveTouch).

Gracias a Harbour y a QT podemos usar el mismo código en Windows, Android y iOS, de esta forma, puedes desarrollar una aplicación que funcione en FiveTouch y que el mismo código funcione en todos.

Ofrecemos una versión desarrollador de FiveTouch, por valor de 500 euros, en el que recibes las mismas herramientas que nosotros usamos y entrenamiento para aprender a usarlas por ti mismo, de esta forma puedes crear tus propias aplicaciones APK para Android. FiveTouch cuesta 200 euros, y puedes solicitarlo por PayPal a alinares@fivetechsoft.com. Puedes pasar en cualquier momento de la versión básica de 200 euros a la versión desarrollador de 500 euros, abonando la diferencia. La idea es que subas a ese nivel cuando ya quieras usar el código que tienes funcionando en FiveTouch pero desees publicar una aplicación en el market ó no desees incluir FiveTouch en tu aplicación final.

FiveTouch es una especie de dBase moderno para Android e iOS. Tu construyes tus PRGs y FiveTouch los ejecuta. Igual que como se hacia en dBase. Pronto permitirá encriptar tus PRGs para que así puedas proteger tu código fuente.

Además si nombras tu PRG como init.prg este se ejecutará antes que FiveTouch, no viéndose FiveTouch para nada, por lo que solo tu aplicación se ejecutará al pulsar el icono de FiveTouch desde tu tablet ó teléfono.

En mi opinión FiveTouch es la forma más rápida que existe de crear una aplicación para Android e iOS, ahorrando el mayor tiempo posible y aumentando mucho la productividad, para que tu aplicación para tablets y teléfonos esté lista cuanto antes :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: FiveTouch Preguntas frecuentes

Post by Xevi »

El demo de Fivetouch, instalado en el Android,
¿no se pueden abrir prgs más que los que estan en el demo???
Si pongo un prg en la SD del android, no lo puedo ejecutar???
Como asocio al prg que se abra con Fivetouch ???
Si le pongo el nombre init.prg, no se inicia al iniciar Fivetouch
Es una limitación de la demo???

De mo mento todo tiene buena pinta... falta hacerlo correr bien!!!

Un Saludo,
Xevi.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: FiveTouch Preguntas frecuentes

Post by Antonio Linares »

Xevi,

> ¿no se pueden abrir prgs más que los que estan en el demo???

Por supuesto que puedes abrir todos los que desees. Crea un nuevo PRG desde FiveTouch y pega el código en él (cópialo desde un email, web, etc.) y finalmente sálvalo a disco (opción "Save" desde FiveTouch) y ya lo puedes
abrir y ejecutar.

> Si pongo un prg en la SD del android, no lo puedo ejecutar???

Para ejecutarlo tienes que copiar el PRG a la carpeta indicada por la función DataLocation(). Lo más sencillo es hacerlo como te acabo de indicar en la pregunta anterior, aunque tambien
puedes escribir un simple PRG desde FiveTouch que lo haga por ti:

Code: Select all

#include "FiveTouch.ch"
      
function Main()
      
   local cFileName := QSelFile( ,, "/sdcard/*.prg" )

   MemoWrit( cFileName, MemoRead( cFileName ) )

return nil
> Como asocio al prg que se abra con Fivetouch ???

https://www.guidingtech.com/13517/chang ... type-open/

> Si le pongo el nombre init.prg, no se inicia al iniciar Fivetouch

Vamos a comprobarlo
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: FiveTouch Preguntas frecuentes

Post by Antonio Linares »

Hay un pequeño error en el código anterior. Este seria un ejemplo completo:

Tenemos un PRG en esta dirección:
https://bitbucket.org/fivetech/fivetouc ... s/test.prg

1. Lo descargamos desde nuestro dispositivo Android

2. Ejecutamos este código desde FiveTouch:

Code: Select all

#include "FiveTouch.ch"
      
function Main()
      
   local cFileName := QSelFile( ,, "/sdcard/*.prg" )

   MsgInfo( cFileName )

   MemoWrit( "test.prg", MemoRead( cFileName ) )

return nil  
3. test.prg ya aparece en los PRGs disponibles al pulsar "Open" desde FiveTouch :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: FiveTouch Preguntas frecuentes

Post by Antonio Linares »

Aqui tenemos otra forma, aún más sencilla, de ejecutar cualquier PRG que hayamos descargado:

Code: Select all

#include "FiveTouch.ch"

function Test()

   local cCode := MemoRead( QSelFile( ,, "/sdcard/*.prg" ) )

   RunScript( cCode )

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: FiveTouch Preguntas frecuentes

Post by Antonio Linares »

Aún más simple :-)

Code: Select all

#include "FiveTouch.ch"

function Test()

   OpenFile( QSelFile( ,, "/sdcard/*.prg" ) )

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: FiveTouch Preguntas frecuentes

Post by Antonio Linares »

E incluso directamente desde la carpeta de descargas

Las posibilidades de FiveTouch son enormes! :-)

Code: Select all

#include "FiveTouch.ch"
      
function Main()
      
   OpenFile( QSelFile( ,, DownloadLocation() + "/*.prg" ) )

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: FiveTouch Preguntas frecuentes

Post by Antonio Linares »

Está muy bueno el demo. Despúes de ejecutarlo pude oibervar en el dispositivo que es muy difícil leer el texto de los botones, debido a su tamaño muy reducido.

Me surgieron las sigueintes Preguntas acerca de lo que actualmente podría alcanzar con
FiveTouch DEVELOPER EDITION:

Modificar propiedades como el tamaño y/o color de los siguientes controles:
- botones
- tree view ?

- FiveTouch DEVELOPER EDITION Incluye todos los componentes necesarios para generar la aplicación?

Qué tipo de soporte se incluye para lograr todo lo necesario:
- MANIFIESTO: Properties, AndroidManifiest.xml, etc
- REFERENCES (System, System.Xml)
- ASSETS
- RESOURCES
FiveTouch usa QT y QT admite hojas de estilo (CSS) de la web. De hecho el color negro y naranja que usa es un estilo CSS que se puede modificar a voluntad:

QApplication():SetStyleSheet( DarkOrangeStyle() )

DarkOrangeStyle() es una función propia de FiveTouch, pero puedes usar cualquier otra definida por ti :-) (por ejemplo, MiNuevoEstilo() )

Prueba a modificarla (aqui te envío el código fuente), dale otro nombre a la función y llama a QApplication():SetStyleSheet( MiNuevoEstilo() )

FiveTouch Developers Edition es más un conjunto de instrucciones y componentes para poder crear tu propia aplicación usando QT Creator. Es más caro
porque requiere más soporte técnico por nuestra parte para poder ayudarte a configurar todo y a solucionar los problemas que se te puedan presentar. No es
un producto cerrado como FiveTouch estandard que precisa poca ayuda por nuestra parte :-)

saludos,

#xcommand TEXT INTO <v> => #pragma __cstream|<v>:=%s

function DarkOrangeStyle()

local cCSS

TEXT INTO cCSS
QToolTip
{
border: 1px solid black;
background-color: #ffa02f;
padding: 1px;
border-radius: 3px;
opacity: 100;
}

QWidget
{
color: #b1b1b1;
background-color: #323232;
}

QWidget:item:hover
{
background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #ca0619);
color: #000000;
}

QWidget:item:selected
{
background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a);
}

QMenuBar::item
{
background: transparent;
}

QMenuBar::item:selected
{
background: transparent;
border: 1px solid #ffaa00;
}

QMenuBar::item:pressed
{
background: #444;
border: 1px solid #000;
background-color: QLinearGradient(
x1:0, y1:0,
x2:0, y2:1,
stop:1 #212121,
stop:0.4 #343434/*,
stop:0.2 #343434,
stop:0.1 #ffaa00*/
);
margin-bottom:-1px;
padding-bottom:1px;
}

QMenu
{
border: 1px solid #000;
}

QMenu::item
{
padding: 2px 20px 2px 20px;
}

QMenu::item:selected
{
color: #000000;
}

QWidget:disabled
{
color: #404040;
background-color: #323232;
}

QAbstractItemView
{
background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #4d4d4d, stop: 0.1 #646464, stop: 1 #5d5d5d);
}

QWidget:focus
{
/*border: 2px solid QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a);*/
}

QLineEdit
{
background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #4d4d4d, stop: 0 #646464, stop: 1 #5d5d5d);
padding: 1px;
border-style: solid;
border: 1px solid #1e1e1e;
border-radius: 5;
}

QPushButton
{
color: #b1b1b1;
background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #565656, stop: 0.1 #525252, stop: 0.5 #4e4e4e, stop: 0.9 #4a4a4a, stop: 1 #464646);
border-width: 1px;
border-color: #1e1e1e;
border-style: solid;
border-radius: 6;
padding: 3px;
font-size: 12px;
padding-left: 5px;
padding-right: 5px;
height: 25px;
min-width: 60px;
}

QPushButton:pressed
{
background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #2d2d2d, stop: 0.1 #2b2b2b, stop: 0.5 #292929, stop: 0.9 #282828, stop: 1 #252525);
}

QComboBox
{
selection-background-color: #ffaa00;
background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #565656, stop: 0.1 #525252, stop: 0.5 #4e4e4e, stop: 0.9 #4a4a4a, stop: 1 #464646);
border-style: solid;
border: 1px solid #1e1e1e;
border-radius: 5;
}

QComboBox:hover,QPushButton:hover
{
border: 2px solid QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a);
}


QComboBox:on
{
padding-top: 3px;
padding-left: 4px;
background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #2d2d2d, stop: 0.1 #2b2b2b, stop: 0.5 #292929, stop: 0.9 #282828, stop: 1 #252525);
selection-background-color: #ffaa00;
}

QComboBox QAbstractItemView
{
border: 2px solid darkgray;
selection-background-color: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a);
}

QComboBox::drop-down
{
subcontrol-origin: padding;
subcontrol-position: top right;
width: 15px;

border-left-width: 0px;
border-left-color: darkgray;
border-left-style: solid; /* just a single line */
border-top-right-radius: 3px; /* same radius as the QComboBox */
border-bottom-right-radius: 3px;
}

QComboBox::down-arrow
{
image: url(:/down_arrow.png);
}

QGroupBox:focus
{
border: 2px solid QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a);
}

QTextEdit:focus
{
border: 2px solid QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a);
}

QScrollBar:horizontal {
border: 1px solid #222222;
background: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0.0 #121212, stop: 0.2 #282828, stop: 1 #484848);
height: 40px;
margin: 0px 16px 0 16px;
}

QScrollBar::handle:horizontal
{
background: QLinearGradient( x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #ffa02f, stop: 0.5 #d7801a, stop: 1 #ffa02f);
min-height: 20px;
border-radius: 2px;
}

QScrollBar::add-line:horizontal {
border: 1px solid #1b1b19;
border-radius: 2px;
background: QLinearGradient( x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #ffa02f, stop: 1 #d7801a);
width: 14px;
subcontrol-position: right;
subcontrol-origin: margin;
}

QScrollBar::sub-line:horizontal {
border: 1px solid #1b1b19;
border-radius: 2px;
background: QLinearGradient( x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #ffa02f, stop: 1 #d7801a);
width: 14px;
subcontrol-position: left;
subcontrol-origin: margin;
}

QScrollBar::right-arrow:horizontal, QScrollBar::left-arrow:horizontal
{
border: 1px solid black;
width: 1px;
height: 1px;
background: white;
}

QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal
{
background: none;
}

QScrollBar:vertical
{
background: QLinearGradient( x1: 0, y1: 0, x2: 1, y2: 0, stop: 0.0 #121212, stop: 0.2 #282828, stop: 1 #484848);
width: 24px;
margin: 16px 0 16px 0;
border: 1px solid #222222;
}

QScrollBar::handle:vertical
{
background: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 0.5 #d7801a, stop: 1 #ffa02f);
min-height: 20px;
border-radius: 2px;
}

QScrollBar::add-line:vertical
{
border: 1px solid #1b1b19;
border-radius: 2px;
background: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #ffa02f, stop: 1 #d7801a);
height: 14px;
subcontrol-position: bottom;
subcontrol-origin: margin;
}

QScrollBar::sub-line:vertical
{
border: 1px solid #1b1b19;
border-radius: 2px;
background: QLinearGradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #d7801a, stop: 1 #ffa02f);
height: 14px;
subcontrol-position: top;
subcontrol-origin: margin;
}

QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical
{
border: 1px solid black;
width: 1px;
height: 1px;
background: white;
}


QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical
{
background: none;
}

QTextEdit
{
background-color: #242424;
}

QPlainTextEdit
{
background-color: #242424;
}

QHeaderView::section
{
background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #616161, stop: 0.5 #505050, stop: 0.6 #434343, stop:1 #656565);
color: white;
padding-left: 4px;
border: 1px solid #6c6c6c;
}

QCheckBox:disabled
{
color: #414141;
}

QDockWidget::title
{
text-align: center;
spacing: 3px; /* spacing between items in the tool bar */
background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #323232, stop: 0.5 #242424, stop:1 #323232);
}

QDockWidget::close-button, QDockWidget::float-button
{
text-align: center;
spacing: 1px; /* spacing between items in the tool bar */
background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #323232, stop: 0.5 #242424, stop:1 #323232);
}

QDockWidget::close-button:hover, QDockWidget::float-button:hover
{
background: #242424;
}

QDockWidget::close-button:pressed, QDockWidget::float-button:pressed
{
padding: 1px -1px -1px 1px;
}

QMainWindow::separator
{
background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #161616, stop: 0.5 #151515, stop: 0.6 #212121, stop:1 #343434);
color: white;
padding-left: 4px;
border: 1px solid #4c4c4c;
spacing: 3px; /* spacing between items in the tool bar */
}

QMainWindow::separator:hover
{

background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #d7801a, stop:0.5 #b56c17 stop:1 #ffa02f);
color: white;
padding-left: 4px;
border: 1px solid #6c6c6c;
spacing: 3px; /* spacing between items in the tool bar */
}

QToolBar::handle
{
spacing: 3px; /* spacing between items in the tool bar */
background: url(:/images/handle.png);
}

QMenu::separator
{
height: 2px;
background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:0 #161616, stop: 0.5 #151515, stop: 0.6 #212121, stop:1 #343434);
color: white;
padding-left: 4px;
margin-left: 10px;
margin-right: 5px;
}

QProgressBar
{
border: 2px solid grey;
border-radius: 5px;
text-align: center;
}

QProgressBar::chunk
{
background-color: #d7801a;
width: 2.15px;
margin: 0.5px;
}

QTabBar::tab {
color: #b1b1b1;
border: 1px solid #444;
border-bottom-style: none;
background-color: #323232;
padding-left: 10px;
padding-right: 10px;
padding-top: 3px;
padding-bottom: 2px;
margin-right: -1px;
}

QTabWidget::pane {
border: 1px solid #444;
top: 1px;
}

QTabBar::tab:last
{
margin-right: 0; /* the last selected tab has nothing to overlap with on the right */
border-top-right-radius: 3px;
}

QTabBar::tab:first:!selected
{
margin-left: 0px; /* the last selected tab has nothing to overlap with on the right */


border-top-left-radius: 3px;
}

QTabBar::tab:!selected
{
color: #b1b1b1;
border-bottom-style: solid;
margin-top: 3px;
background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:1 #212121, stop:.4 #343434);
}

QTabBar::tab:selected
{
border-top-left-radius: 3px;
border-top-right-radius: 3px;
margin-bottom: 0px;
}

QTabBar::tab:!selected:hover
{
/*border-top: 2px solid #ffaa00;
padding-bottom: 3px;*/
border-top-left-radius: 3px;
border-top-right-radius: 3px;
background-color: QLinearGradient(x1:0, y1:0, x2:0, y2:1, stop:1 #212121, stop:0.4 #343434, stop:0.2 #343434, stop:0.1 #ffaa00);
}

QRadioButton::indicator:checked, QRadioButton::indicator:unchecked{
color: #b1b1b1;
background-color: #323232;
border: 1px solid #b1b1b1;
border-radius: 6px;
}

QRadioButton::indicator:checked
{
background-color: qradialgradient(
cx: 0.5, cy: 0.5,
fx: 0.5, fy: 0.5,
radius: 1.0,
stop: 0.25 #ffaa00,
stop: 0.3 #323232
);
}

QCheckBox::indicator{
color: #b1b1b1;
background-color: #323232;
border: 1px solid #b1b1b1;
width: 12px;
height: 12px;
}

QRadioButton::indicator
{
border-radius: 6px;
}

QRadioButton::indicator:hover, QCheckBox::indicator:hover
{
border: 1px solid #ffaa00;
}

QCheckBox::indicator:checked
{
image:url(:\images\checkbox.png);
}

QCheckBox::indicator:disabled, QRadioButton::indicator:disabled
{
border: 1px solid #444;
}

ENDTEXT

return cCSS
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: FiveTouch Preguntas frecuentes

Post by Xevi »

En FiveTouch... es posible utilizar la clase TSocket para enviar/recibir datos entre mobile y ordenador/Server???

Lo digo, porque tengo una aplicación que abastece datos a una petición via web y aprovechando, pues igual me tiro al rio y ataco los datos por ahí, no???

Gracias.

Un Saludo,
Xevi.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: FiveTouch Preguntas frecuentes

Post by Antonio Linares »

Xevi,

Lo más sencillo es que uses web services usando este ejemplo:

http://forums.fivetechsupport.com/viewt ... webservice
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply