Anteriormente hemos visto como hacer que una función se ejecute varias veces respetando un intervalo de tiempo (aquí), también sabemos como identificar una aplicacion que se está ejecutando (aquí).
Ahora vamos a buscar por titulo de la ventana, para saber si el usuario está realizando algo especifico.
Lo ideal es que el siguiente fragmento de código pertenezca a una clase que se ejecute de forma automática cronometrizada (ya dejé los links arriba).
01 void aMethod()
02 {
03 int64 hWnd;
04 str 150 cad;
05
06 ;
07 hWnd= WinApi::findWindow("MozillaWindowClass","");
08 if (hWnd)
09 cad = winApi::getWindowText(hWnd);
10
11 if (cad!='')
12 {
13 if ( strscan(cad,"MercadoLibre",1,strlen(cad))!=0)
14 {
15 info ("Ya deja de comprar!!!");
16 }
17 }
18 }
De esta manera, cuando el usuario use Mozilla Firefox para navegar y el título de la ventana tenga la palabra 'MercadoLibre', Ax hará una sugerencia muy sutil con respecto a sus compras compulsivas de fin de año.
:)
Tuesday, December 16, 2014
Monday, December 15, 2014
Nuestra propia barra de Favoritos
Para complementar el post anterior vamos a crear una barra de herramientas (Se requiere crear controles dinámicos y leer el menú Favoritos del usuario).
Creamos un formulario llamado TestBar, luego vamos a fijar las siguientes propiedades a su diseño:

Ahora vamos al código.
01 public void run()
02 {
03
04 TreeNode treeNode;
05 TreeNodeIterator iterator;
06 FormButtonControl button;
07 ;
08
09 super();
10 treeNode = infolog.userNode();
11 iterator = treeNode.AOTiterator();
12 treeNode = iterator.next();
13
14 treeNode = treeNode.AOTfindChild('Mis Favoritos');
15 iterator = treeNode.AOTiterator();
16
17 while (iterator)
18 {
19
20 treeNode = iterator.next();
21 if (treeNode)
22 {
23 button = element.design().addControl(FormControlType::Button,'Dynamic');
24 button.text(treenode.treeNodeName());
25
26
27 button.border(4);
28 this.controlMethodOverload(true);
29
30
31 }
32 else
33 break;
34 }
35
36}
En la línea 23 agregamos un botón "coqueto", al cúal se le llamará Dynamic, todo lo demás se explicó en post anteriores (Controles Dinámicos en Ax y Leyendo el menú favoritos desde código).
01 void Dynamic_Clicked()
02{
03 TreeNode treeNode;
04 TreeNodeIterator iterator;
05 #AOT
06 ;
07
08 treeNode = infolog.userNode();
09 iterator = treeNode.AOTiterator();
10 treeNode = iterator.next();
11
12 treeNode = treeNode.AOTfindChild('Mis Favoritos');
13 iterator = treeNode.AOTiterator();
14 while (iterator)
15 {
16 treeNode = iterator.next();
17 if (!treeNode)
18 break;
19
20 if (treeNode.treeNodeName()==element.controlCallingMethod().labelText())
21 {
22 treeNode.AOTrun();
23 break;
24 }
25
26 }
27
28 }
Bueno, en este caso se busca el menú y se compara en la línea 20 para saber cuál de todos los botones creados fue el que llamó el método, y en la línea 22 se ejecuta la opción.
Así queda la barra, ya ustedes le darán un mejor formato.
:)

Creamos un formulario llamado TestBar, luego vamos a fijar las siguientes propiedades a su diseño:
Ahora vamos al código.
01 public void run()
02 {
03
04 TreeNode treeNode;
05 TreeNodeIterator iterator;
06 FormButtonControl button;
07 ;
08
09 super();
10 treeNode = infolog.userNode();
11 iterator = treeNode.AOTiterator();
12 treeNode = iterator.next();
13
14 treeNode = treeNode.AOTfindChild('Mis Favoritos');
15 iterator = treeNode.AOTiterator();
16
17 while (iterator)
18 {
19
20 treeNode = iterator.next();
21 if (treeNode)
22 {
23 button = element.design().addControl(FormControlType::Button,'Dynamic');
24 button.text(treenode.treeNodeName());
25
26
27 button.border(4);
28 this.controlMethodOverload(true);
29
30
31 }
32 else
33 break;
34 }
35
36}
En la línea 23 agregamos un botón "coqueto", al cúal se le llamará Dynamic, todo lo demás se explicó en post anteriores (Controles Dinámicos en Ax y Leyendo el menú favoritos desde código).
01 void Dynamic_Clicked()
02{
03 TreeNode treeNode;
04 TreeNodeIterator iterator;
05 #AOT
06 ;
07
08 treeNode = infolog.userNode();
09 iterator = treeNode.AOTiterator();
10 treeNode = iterator.next();
11
12 treeNode = treeNode.AOTfindChild('Mis Favoritos');
13 iterator = treeNode.AOTiterator();
14 while (iterator)
15 {
16 treeNode = iterator.next();
17 if (!treeNode)
18 break;
19
20 if (treeNode.treeNodeName()==element.controlCallingMethod().labelText())
21 {
22 treeNode.AOTrun();
23 break;
24 }
25
26 }
27
28 }
Bueno, en este caso se busca el menú y se compara en la línea 20 para saber cuál de todos los botones creados fue el que llamó el método, y en la línea 22 se ejecuta la opción.
Así queda la barra, ya ustedes le darán un mejor formato.
:)
Tuesday, December 9, 2014
Leyendo el menú Favoritos desde código
En esta ocasión vamos a leer el menú Favoritos que el usuario ha configurado previamente.
01 static void FAV(Args _args)
02 {
03
04 TreeNode treeNode;
05 TreeNodeIterator iterator;
06 ;
07
08 treeNode = infolog.userNode();
09 iterator = treeNode.AOTiterator();
10 treeNode = iterator.next();
11
12 treeNode = treeNode.AOTfindChild('Mis Favoritos');
13 iterator = treeNode.AOTiterator();
14
15 while (iterator)
16 {
17
18 treeNode = iterator.next();
19 if (treeNode)
20 {
21
22 info(treeNode.treeNodeName());
23
24 }
25 else
26 break;
27 }
28 }
A partir de la línea 15 recorremos el nodo resultante y enviamos un info con el nombre de dicho nodo.

Ahi están mis favoritos y abajo la comprobación ;)
Si quisieramos abrir el menú solo bastaria con incluir esta línea de código en la posición 23
treeNode.AOTrun();
Este post y el anterior nos servirán más adelante para crear una barra de herramientas.
01 static void FAV(Args _args)
02 {
03
04 TreeNode treeNode;
05 TreeNodeIterator iterator;
06 ;
07
08 treeNode = infolog.userNode();
09 iterator = treeNode.AOTiterator();
10 treeNode = iterator.next();
11
12 treeNode = treeNode.AOTfindChild('Mis Favoritos');
13 iterator = treeNode.AOTiterator();
14
15 while (iterator)
16 {
17
18 treeNode = iterator.next();
19 if (treeNode)
20 {
21
22 info(treeNode.treeNodeName());
23
24 }
25 else
26 break;
27 }
28 }
A partir de la línea 15 recorremos el nodo resultante y enviamos un info con el nombre de dicho nodo.
Ahi están mis favoritos y abajo la comprobación ;)
Si quisieramos abrir el menú solo bastaria con incluir esta línea de código en la posición 23
treeNode.AOTrun();
Este post y el anterior nos servirán más adelante para crear una barra de herramientas.
Wednesday, December 3, 2014
Controles Dinámicos en Ax
Aqui les dejo ésto por si necesitan crear controles dinámicos en un formulario de Ax.
Primero vamos a crear un formulario con un Tab y un TabPage.

Luego, en su método run vamos a agregar el control, en este caso es de tipó FormButtonControl
01 public void run()
02 {
03 FormButtonControl button;
04 super();
05 button = element.design().addControl(FormControlType::Button,'DynamicButton');
06 button.name("Original");
07 button.text("Duplícame plz!!");
08 Total=1;
09 this.controlMethodOverload(true);
10 }
En la línea 05 lo agregamos al diseño del formulario y lo llamamos 'DynamicButton', en la línea 07 incremento mi variable para saber cuantos botones llevo agregados.
La línea 08 nos permitirá escribir métodos para este control.
01 void DynamicButton_Clicked()
02 {
03
04 FormButtonControl button;
05
06 button = element.design().addControl(FormControlType::Button,'DynamicButton');
07 Total++;
08 button.text("Duplícame plz!!(" + int642str(Total)+")");
09
10 }
Bueno, un poco redundante pero se duplica a sí mismo pero ahora con el contador y sin nombre.

Cualquie botón, genera uno nuevo con el consecutivo correspondiente, pero ahora vamos a identificar el botón original para que el sea el único capaz de ejecutar la acción.
el código queda así:
01 void DynamicButton_Clicked()
02 {
03
04 FormButtonControl button;
05 ;
06
07 if (element.controlCallingMethod().name()=="Original")
08 {
09 button = element.design().addControl(FormControlType::Button,'DynamicButton');
10 Total++;
11 button.text("Duplícame plz!!(" + int642str(Total)+")");
12 }
13
14 }
Ya cuando lo implementen usen menos cadenas para comparar, es decir ya lo hacen bien.
Saludos =)
Primero vamos a crear un formulario con un Tab y un TabPage.
Luego, en su método run vamos a agregar el control, en este caso es de tipó FormButtonControl
01 public void run()
02 {
03 FormButtonControl button;
04 super();
05 button = element.design().addControl(FormControlType::Button,'DynamicButton');
06 button.name("Original");
07 button.text("Duplícame plz!!");
08 Total=1;
09 this.controlMethodOverload(true);
10 }
En la línea 05 lo agregamos al diseño del formulario y lo llamamos 'DynamicButton', en la línea 07 incremento mi variable para saber cuantos botones llevo agregados.
La línea 08 nos permitirá escribir métodos para este control.
01 void DynamicButton_Clicked()
02 {
03
04 FormButtonControl button;
05
06 button = element.design().addControl(FormControlType::Button,'DynamicButton');
07 Total++;
08 button.text("Duplícame plz!!(" + int642str(Total)+")");
09
10 }
Bueno, un poco redundante pero se duplica a sí mismo pero ahora con el contador y sin nombre.
Cualquie botón, genera uno nuevo con el consecutivo correspondiente, pero ahora vamos a identificar el botón original para que el sea el único capaz de ejecutar la acción.
el código queda así:
01 void DynamicButton_Clicked()
02 {
03
04 FormButtonControl button;
05 ;
06
07 if (element.controlCallingMethod().name()=="Original")
08 {
09 button = element.design().addControl(FormControlType::Button,'DynamicButton');
10 Total++;
11 button.text("Duplícame plz!!(" + int642str(Total)+")");
12 }
13
14 }
Ya cuando lo implementen usen menos cadenas para comparar, es decir ya lo hacen bien.
Saludos =)
Subscribe to:
Comments (Atom)