<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0EDQnc9fSp7ImA9WhRbEEk.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422</id><updated>2012-01-31T17:27:53.965-03:00</updated><category term="Tab Buttons" /><category term="ALIAS" /><category term="Abrir y Cerrar unidad de CD/DVD" /><category term="Harbour Minigui" /><category term="Contraseña" /><category term="Manipular tablas de datos" /><category term="USE" /><category term="SELECT" /><category term="Informes" /><category term="Instalador RPV Printing System" /><category term="Migrar desde dBFast" /><category term="Control de acceso" /><category term="RPV Printing System 2.2" /><category term="Cambiar opciones de pantalla" /><category term="Configuración Regional" /><category term="Verificar resolución de pantalla" /><category term="Migrar de DOS a Windows" /><category term="Anuario" /><category term="Validación de usuarios" /><category term="RPV" /><category term="Cambiar fecha y Hora" /><category term="dBFast y Windows 64 bits" /><category term="No2Imp" /><category term="Pestañas o Solapas" /><title>dBFast - Chile</title><subtitle type="html">Porque la mejor herramienta de programación es el ingenio del programador, dBFast aún existe...</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://dbfastchile.blogspot.com/" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/jPjup" /><feedburner:info uri="blogspot/jpjup" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>blogspot/jPjup</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;D0IBQ3g_fSp7ImA9WhdbGEs.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-3646779200370593635</id><published>2011-10-17T12:27:00.001-03:00</published><updated>2011-10-17T12:32:32.645-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-17T12:32:32.645-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SELECT" /><category scheme="http://www.blogger.com/atom/ns#" term="USE" /><category scheme="http://www.blogger.com/atom/ns#" term="ALIAS" /><category scheme="http://www.blogger.com/atom/ns#" term="Manipular tablas de datos" /><title>¿Quién es el Alias?</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-YzoHGF0iYE4/TpxJQLQrhpI/AAAAAAAAANM/egLJ43Gl1MU/s1600/Fuente_xBase.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-YzoHGF0iYE4/TpxJQLQrhpI/AAAAAAAAANM/egLJ43Gl1MU/s1600/Fuente_xBase.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para todos quienes programamos en algún lenguaje xBase, sin duda son indispensables las cláusulas &lt;b&gt;SELECT&lt;/b&gt; a la hora de &amp;nbsp;cambiarnos de área de trabajo al manipular varios archivos (o tablas) de datos. &amp;nbsp;Es así como cada archivo que utilizamos en una aplicación tiene su &lt;b&gt;SELECT&lt;/b&gt; o área de trabajo asignada y que utilizaremos cuando debemos realizar alguna operación sobre la tabla (&lt;b&gt;APPEND BLANK, REPLACE, LIST, DELETE&lt;/b&gt;, etc.).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Sin embargo, y en especial ahora que estoy abordando el tema de la migración hacia Harbour Minigui, quiero compartir este excelente artículo de &lt;b&gt;René Flores&lt;/b&gt;, creador de "&lt;b&gt;Objeto Persistente&lt;/b&gt;", al cual he dedicado un enlace en dBFast Chile desde que inicié este Blog.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;René es un antiguo desarrollador de Clipper en Mexico, y a través de su empresa &lt;b&gt;CiberTec&lt;/b&gt;, se ha especializado en la consultoría, enseñanza y desarrollo de aplicaciones con Fivewin, Harbour, xHarbour y otras tecnologías xBase, centrándose en la actualidad en Xailer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El artículo titulado "&lt;b&gt;¿Quién es al Alias?&lt;/b&gt;" rompe algunos mitos y paradigmas con respecto al uso de los SELECT en la administración de áreas de trabajo y nos entrega una nueva visión que sin duda nos ayudará a optimizar el uso de tablas de datos en nuestras aplicaciones, y aunque no le he pedido permiso a René para transcribir el artículo en este Blog, estoy seguro de que no se &amp;nbsp;molestará.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Acá les dejo la transcripción,:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;"&gt;Tengo 20 años programando en Clipper, y mas o menos 15 dando clases de programación y análisis y diseño de sistemas, de los cuales 5 estuve dando clases en la Universidad La Salle de México, como catedrático de la Escuela de Ingeniería en la carrera de Ingeniería en Cibernética y Ciencias de la Computación.&lt;br /&gt;
&lt;br /&gt;
He dirigido algunos trabajos de tesis sobre bases de datos, 2 de ellos específicamente sobre lenguajes Xbase y hasta una tesis sobre programación orientada al Objeto con FiveWin, sí sí, aunque ustedes no lo crean FiveWin fue en su momento (hace como 8 años) el tema de un trabajo de titulación profesional de 2 de mis alumnos.&lt;br /&gt;
&lt;br /&gt;
El caso es que en todos estos años pegándole a la tecla con Clipper y ahora con (x)Harbour, me he encontrado con que casi nadie saber manejar los archivos DBF en condiciones.&lt;br /&gt;
&lt;br /&gt;
Actualmente la idea es ir mas por el tema del SQL, pero hay muchas personas que todavía manejan archivos DBF y que conociendo un poco mas sobre ellos se pueden hacer cosas muy interesantes.&lt;br /&gt;
&lt;br /&gt;
Pero vamos a ver..... ¿ como que nadie sabe usar los DBFs ?, si cientos de programadores del mundo los han usado durante años..... de acuerdo, pero de todos esos cientos de programadores, que levanten la mano aquellos que consideren que saben manejar los DBF BIEN.&lt;br /&gt;
&lt;br /&gt;
Si levantaste la mano, continúa leyendo, espero poder enseñarte algo nuevo, si no la levantaste, también continúa leyendo, seguro vas a aprender algo nuevo.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;El mito de las 256 "áreas" de trabajo.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Los que venimos del dBase III recordamos que en los libros ponían,&amp;nbsp;&lt;span style="font-style: italic;"&gt;dBase puede abrir hasta 256 "areas" de trabajo&lt;/span&gt;, entendiendo por "areas de trabjo" un espacio de memoria en donde se "abría" la tabla DBF (está mal llamarla "base de datos"), lo que en el SQL moderno de hoy se llama "cursor".&lt;br /&gt;
&lt;br /&gt;
Estas "areas" estaban numeradas, de tal forma que cuando queríamos abrir una tabla, todos hacíamos (y algunos siguen haciendo) la forma erronea de abrir la tabla:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;SELECT 1 // para seleccionar el "area" donde vamos a abrir la tabla&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE archivo.dbf&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Esto quería decir que la tabla ARCHIVO.DBF estaría abierta en el "área" 1, así pues siempre que quisiéramos hacer referencia a los campos o a alguna operación sobre ARCHIVO.DBF, antes que nada tendríamos que hacer primeramente un salto al "área" donde está abierta dicha tabla, algo como esto:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;SELECT 1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;GO TOP&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;DO WHILE ! EOF()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;? Recno()&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;SKIP&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;ENDDO&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
La cosa comienza a ponerse interesante cuando requieres usar mas tablas simultáneamente, digamos unas 5 tablas, entonces erroneamente haces:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;SELECT 1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE archivo1.dbf&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;SELECT 2&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE archivo2.dbf&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;......&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;SELECT 5&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE archivo5.dbf&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Mal, mal, mal, esto te lleva a hacer lo que yo he llamado "código ping-pong", es decir selección de área, operación, selección de otra área, otra operación, selección de otra area mas, otra operación mas, y luego vamos de vuelta al área original, lo cual nos lleva a un código lleno de SELECTs por todos sitios, que es complicado de mantener.&lt;br /&gt;
&lt;br /&gt;
Si a esto aunamos que a 16 bits el número de áreas de trabajo estaba limitado por la memoria (las 256 áreas de trabajo que prometía dBase nunca fueron ciertas), entonces nuestro código se volvía un maremagnum de saltos entre áreas, de tener que cerrar tablas para abrir otras en las mismas "áreas" de tener que acordarte en que número de área quedaba tal o cual tabla DBF de tal o cual proceso, vamos, un rollo.&lt;br /&gt;
&lt;br /&gt;
Y todo por no utilizar el "alias" de los archivos DBF.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;¿ Y quien o qué es ALIAS ?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
En todos los lenguajes de programación no orientados a datos, como Pascal, "C" o el mismo Basic, cuando se manejan archivos de datos, siempre se les asignan 2 nombres, el nombre&amp;nbsp;&lt;span style="font-style: italic;"&gt;"físico"&lt;/span&gt;&amp;nbsp;que es el nombre del archivo tal cual se almacena en el disco, y el nombre&amp;nbsp;&lt;span style="font-style: italic;"&gt;"lógico"&lt;/span&gt;, que es el nombre con el cual haremos referencia dentro del código de nuestro programa.&lt;br /&gt;
&lt;br /&gt;
Clipper/(x)Harbour no es una excepción a esta regla, porque en realidad, SIEMPRE estas manejando 2 nombres cuando abres una tabla DBF para trabajar sobre ella, es decir, cuando haces algo como esto :&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE archivo.dbf&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
En realidad estas generando un "ALIAS", es decir, un "apodo" para hacer referencia al archivo abierto durante la ejecución de tu programa.&lt;br /&gt;
&lt;br /&gt;
Si revisas la sintaxis del comando USE, te encontrarás varias cosas interesantes:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE [&lt;cdatabase&gt;&amp;nbsp;;&amp;nbsp;&lt;/cdatabase&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;[INDEX&amp;nbsp;&lt;cindexfiles,...&gt;] ;&lt;/cindexfiles,...&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new'; font-size: 17px;"&gt;&lt;span style="font-weight: bold;"&gt;[ALIAS&amp;nbsp;&lt;calias&gt;] ;&lt;/calias&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;[EXCLUSIVE | SHARED] ;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;[NEW] ;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;[READONLY] ;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;[VIA&amp;nbsp;&lt;crdd&gt;]&amp;nbsp;&lt;/crdd&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
El comando USE tiene una clausula ALIAS, que si no fuera importante, creeme, no la pondrían como parte de la sintaxis.&lt;br /&gt;
&lt;br /&gt;
Esta clausula ALIAS se utiliza para darle un "nombre lógico" a tu tabla para que puedas manejarla en memoria, si tu omites este nombre, se asigna automáticamente como "alias" el mismo nombre de la tabla, sin extensión.&lt;br /&gt;
&lt;br /&gt;
El ALIAS de una tabla es una pieza muy importante de la programación de datos porque si sabes como utilizarlo, te ahorrarás lineas y líneas de SELECTS inútiles.&lt;br /&gt;
&lt;br /&gt;
Existe un "operador ALIAS", representado por un "&lt;span style="font-size: 17px;"&gt;&lt;span style="font-weight: bold;"&gt;-&amp;gt;&lt;/span&gt;&lt;/span&gt;" signo de menos + signo de mayor que, este operador nos servirá para hacer referencia al área de trabajo que deseamos usar sin necesidad de tener que hacer un SELECT&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE archivo1.dbf&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;archivo1-&amp;gt;(dbgotop())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;DO WHILE ! archivo1-&amp;gt;(EOF())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;? archivo1-&amp;gt;(RECNO())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;archivo1-&amp;gt;(DBSKIP())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;ENDDO&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
En este ejemplo asumimos que no hemos usado la cáusula ALIAS, luego entonces el ALIAS asignado por omisión será "archivo1" (sin extensión), luego usaremos el operador "alias" (-&amp;gt;) para indicar que operaciones deben realizarse sobre él.&lt;br /&gt;
&lt;br /&gt;
Nota por favor que todas las operaciones sobre la tabla son funciones NO COMANDOS y que todas las operaciones van encerradas entre paréntesis.&lt;br /&gt;
&lt;br /&gt;
Otra cláusula importante del comando USE es la claúsula NEW, esta clausula te ahorrará miles de lineas de SELECTS ya que esta clausula abre la tabla DBF en la primer área que se encuentre disponible, es decir, no tienes que hacer un SELECT previo a abrir un DBF, simplemente le pones NEW al momento de abrir, y dejas que Clipper/(x)Harbour se haga cargo del resto.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE archivo1.dbf NEW&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE archivo2.dbf NEW&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
No tienes que hacer ningun SELECT para abrir las tablas, ahora, para hacer referencia a los campos de cada archivos, o bien realizar operaciones sobre las tablas, tampoco hay necesidad de hacer SELECT, el ALIAS nos soluciona la vida:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE archivo1.dbf NEW&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE archivo2.dbf NEW&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;archivo1-&amp;gt;(DBGOTOP())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;archivo2-&amp;gt;(DBGOBOTTOM())&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;DO WHILE ! archivo2-&amp;gt;(BOF())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;? archivo2-&amp;gt;(fieldget(1))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;? archivo1-&amp;gt;(fieldget(5))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;IF ! archivo1-&amp;gt;(EOF())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;archivo1-&amp;gt;(DBSKIP())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;ENDIF&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;archivo2-&amp;gt;(DBSKIP(-1))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;ENDDO&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
El manejo de los campos es muy simple, funciona igual, basta con que pongas el nombre del campo despues del operador alias SIN PARENTESIS:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;? archivo1-&amp;gt;nombre&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;? archivo2-&amp;gt;iva&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Los campos también son asignables usando el operador alias, tanto para leer sus valores, como para actualizar o agregar valores, sustituyendo con esto al comando REPLACE:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;cNombre := archivo1-&amp;gt;nombre&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;archivo2-&amp;gt;(DBAPPEND()) // el comando APPEND BLANK se sustituye pro su función&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;archivo2-&amp;gt;nombre := cNombre // no hay REPLACE, el valor se asinga directamente&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Esto de los alias puede ser tan complejo como quieras, un ejemplo típico es buscar en una segunda tabla el valor de un campo contenido en la primera:&lt;br /&gt;
&lt;br /&gt;
CON SELECTS:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;SELECT 1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;cNombre := field-&amp;gt;nombre&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;SELECT 2&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;SEEK cNombre&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
CON ALIAS:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;archivo2-&amp;gt;(DBSEEK(archivo1-&amp;gt;nombre))&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Efectivamente, con la línea anterior, basta con que hagas referencia a los alias y en vez de usar 4 líneas de código en una sola solucionas el problema y haces exactamente lo mismo.&lt;br /&gt;
&lt;br /&gt;
Ahora esto del alias es mas versátil porque tu puedes dar TU PROPIO ALIAS&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE archivo1.dbf ALIAS&amp;nbsp;&lt;span style="font-weight: bold;"&gt;MiAlias&lt;/span&gt;&amp;nbsp;NEW&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;MiAlias-&amp;gt;(DBGOTOP())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;? MiAlias-&amp;gt;nombre&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Usando tu propio ALIAS puedes darle un nombre mas identificativo al manejo de tus tablas DBFs.&lt;br /&gt;
&lt;br /&gt;
Veamos otro ejemplo mas complejo pero sin duda mucho mas útil:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE archivo.dbf ALIAS ArchPant SHARED NEW&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE archivo.dbf ALIAS ArchRep SHARED NEW&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE archivo.dbf ALIAS ArchMovs SHARED NEW&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
NO, No hay ningún error, estoy abriendo LA MISMA TABLA (archivo.dbf) 3 veces AL MISMO TIEMPO..... ¿ que no causa esto un error del tipo ALIAS already in use ?.... pues va a ser que no.... y esto es algo de lo mas alucinante y útil de los archivos DBFs.&lt;br /&gt;
&lt;br /&gt;
Una de las cosas que casi nadie usa es esta poderosa característica de los DBFs, poder abrir la misma tabla 2, 3, 4, o "n" veces al mismo tiempo, esto se logra CAMBIANDO EL ALIAS y abriendo la tabla como compartida (SHARED) como si fuesemos a programar para red.&lt;br /&gt;
&lt;br /&gt;
Lo interesante de esta forma de usar los DBFs es que cada "alias" mantiene su puntero independiente, es decir puedes hacer algo tan loco como esto:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;ArchPant-&amp;gt;(DBGOTOP())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;ArchMovs-&amp;gt;(DBGOTO(5))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;ArchRep-&amp;gt;(DBGOBOTTOM())&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
El puntero de cada "alias" se moverá a distintas posiciones, sin importar que estemos hablando del mismo archivo DBF (recuerda, una cosa es el nombre físico y otra es el nombre lógico) Y si tu preguntas los valores de los campos :&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;ArchPant-&amp;gt;nombre&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;ArchMovs-&amp;gt;nombre&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;ArchRep-&amp;gt;nombre&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente obtendrás valores distintos en cada oportunidad, esto porque sin importar que sea el mismo archivo, para efectos prácticos en la memoria de la computadora esta "abierto" 3 veces bajo 3 alias distintos y cada alias guarda y mantiene su propio estado. Solo como comentario, Xailer a través de los DataSets facilita aun mas el manejo de los alias.&lt;br /&gt;
&lt;br /&gt;
Pero volviendo al tema, para los que no tienen Xailer o tienen la versión personal, aun así podemos seguir haciendo cosas interesantes a base de usar solo los alias:&lt;br /&gt;
&lt;br /&gt;
Si yo hago:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;ArchMovs-&amp;gt;(DbAppend())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;ArchMovs-&amp;gt;nombre := "Juan Perez"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;ArchMovs-&amp;gt;direccion := "Da igual donde viva, Viva El "&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;ArchMovs-&amp;gt;(DBCommit())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;ArchMovs-&amp;gt;(DBUnlock())&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
El registro añadido será visible EN TODOS LOS ALIAS QUE APUNTEN AL MISMO ARCHIVO&lt;br /&gt;
FISICO, esto es maravilloso, porque es como dar de alta al mismo tiempo en 3 tablas distintas.&lt;br /&gt;
&lt;br /&gt;
La pregunta que puede surgir en este momento es .... ¿ y esto como para que me serviría en la vida real ?.... pues para facilitarte la existencia:&lt;br /&gt;
&lt;br /&gt;
Supongamos que tu quieres mostrar en pantalla un browse del archivo de clientes, donde tienes además 2 índices, uno por clave y otro por nombre, y que además quieres hacer operaciones de mantenimiento como altas bajas y cambios y para rematar quieres hacer reportes que pueden ir ordenados por clave o por nombre, entonces haríamos algo como esto:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE clientes ALIAS CliBrow SHARED NEW&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliBrow-&amp;gt;(OrdSetFocus("nombre")) // arrancamos ordenado por nombre del cliente&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliBrow-&amp;gt;(DBGOTOP())&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE clientes ALIAS CliMovs SHARED NEW&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliMovs-&amp;gt;(OrdSetFocus("clave")) // esta segunda instacia del archivo va ordenado por clave&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;USE clientes ALIAS CliReps SHARED NEW&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliRep-&amp;gt;(OrdSetFocus("clave") // idem anterior.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Si yo quiero meter la primer instancia del archivo de clientes a un browse, basta con hacer:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliBrow-&amp;gt;(Browse())&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
¡¡¡Así de simple !!!!! El usuario podrá moverse sobre el browse y podrá cambiar los criterios de ordenación sin afectar a los otros 2 alias que apuntan a la misma tabla.&lt;br /&gt;
&lt;br /&gt;
Ahora viene lo bueno, si yo quiero hacer un reporte o hacer un ABM sobre la tabla clientes NO LO HAGO SOBRE EL ALIAS DEL BROWSE, lo hago ya sea sobre el alias CliMovs o sobre el alias CliReps para no molestar al alias del browse.&lt;br /&gt;
&lt;br /&gt;
Cuando trabajas con un solo alias, y quieres dar un mantenimiento a una tabla mostrada en un browse, entonces tienes que "guardar" el estado del área de trabajo que muestras en el browse, es decir, en que registro estás, sobre que indice estas trabajando, etc. y luego hacer las operaciones de mantenimiento sobre ese mismo alias que pueden vincular, mover el puntero sobre la tabla, agregar un registro nuevo, cambiar el orden del índice actual, realizar búsquedas, etc, y luego de la operación, debes regresar todo a como estaba antes. Esta técnica te evita eso precisamente.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, si tu quieres agregar un registro el código sería algo como esto:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliMovs-&amp;gt;(RLOCK())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliMovs-&amp;gt;(DBGOBOTTOM())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;nSiguienteClave := CliMovs-&amp;gt;clave+1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliMovs-&amp;gt;(DbAppend())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliMovs-&amp;gt;clave := nSiguienteClave&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliMovs-&amp;gt;nombre:= cVariableConElNuevoNombre&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliMovs-&amp;gt;(DbCommit())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliMovs-&amp;gt;(DBUnlock())&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Nota que toda la operación de mantenimiento la hacemos sobre el Alias CliMovs, no sobre el Alias CliBrow, de esta manera no tenemos que guardar posiciones ni estados, porque CliBrow no se va a mover su puntero y su índice se quedan como están, en cambio CliMovs hará toda la labor de mantenimiento y el cambio se verá reflejado automáticamente en CliBrow y en CliRep en cuanto haya terminado la actualización CliMovs, el Browse ni si quiera se va a mover, a menos claro, que la operación de mantenimiento afecte al registro en el cual estaba el puntero del alias CliBrow.&lt;br /&gt;
&lt;br /&gt;
Lo mismo pasa para los reportes, si yo quiero un reporte, usualmente ese reporte abarca un rango de datos, para no molestar al Browse ni a su alias, pues el reporte lo emitimos sobre el alias CliRep:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliRep-&amp;gt;(OrdSetFocus("nombre"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliRep-&amp;gt;(OrdScope(0,"A")) // reporte de todos los clientes cuyo nombre empiece con "A"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliRep-&amp;gt;(OrdScope(1,"A"))&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliRep-&amp;gt;(DBGOTOP())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;DO WHILE ! CliRep-&amp;gt;(EOF())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;... aqui val el codigo del reporte...&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;CliRep-&amp;gt;(DBSKIP())&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: 'courier new';"&gt;ENDDO&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Y el CliBrow ni se va a enterar que hay un alias llamado CliRep con un Scope sobre la tabla moviendo el puntero para generar un informe.&lt;br /&gt;
&lt;br /&gt;
Esta técnica de programación es ideal para Windows, sobre todo si estás trabajando en entornos MDI porque puedes asignar a cada ventana hija los alias que vaya a necesitar para trabajar, en los entornos MDI una de las cosas mas complicadas de manejar es precisamente esa, evitar que el puntero en la ventana "A" se mueva cuando en la ventana "B" se está realizando otra operación sobre la misma tabla DBF.&lt;br /&gt;
&lt;br /&gt;
Puedes incluso abrir todas las tablas al momento de arrancar tu programa, porque en (x)Harbour no existe la limitación de las 256 "areas" de dBase, en (x)Harbour prácticamente no hay limite en la cantidad de archivos que puedas abrir simultáneamente.&lt;br /&gt;
&lt;br /&gt;
En Xailer Pro y Enterprise no tienes los problemas de Alias cuando trabajas en entornos MDI porque Xailer te provee de los DataSets que usualmente ya van "atados" a cada formulario y como expliqué antes, te ahorran el tema de tener que lidiar con alias, en FiveWin o en la versión Personal de Xailer, el uso de esta técnica es indispensable para trabajar con entornos MDI, en (x)Harbour modo consola, esta ténica te puede ayudar a eliminar muchos vicios de programación y a ahorrar muchas líneas de código.&lt;br /&gt;
&lt;br /&gt;
Cabe señalar que esto mismo es aplicable a Advantage DataBase Server, de hecho el manual de ADS recomienda que todas las tablas estén abiertas desde que arranca la aplicación, esto es aplicable tanto a archivos DBF con NTX o CDX o bien a tablas ADT con índices ADI.&lt;br /&gt;
&lt;br /&gt;
En un próximo artículo discutiremos otra técnica relacionada con esta llamada "alias dinámicos" que hará que no tengas que preocuparte prácticamente por nada que tenga que ver con el acomodo de las tablas en memoria.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;"&gt;___________________________________________________________________________________&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;"&gt;Espero les haya gustado y les sirva para replantear el diseño de sus aplicaciones a la hora de utilizar sus tablas DBF.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;"&gt;Les dejo el enlace al artículo original de René Flores en Objeto persistente: &amp;nbsp;&lt;/span&gt;&lt;a href="http://objetopersistente.blogspot.com/2008/02/quien-es-alias.html"&gt;http://objetopersistente.blogspot.com/2008/02/quien-es-alias.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;"&gt;Saludos,&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-3646779200370593635?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/K7-hnpMXaXh3Q677MsDna_T9muE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K7-hnpMXaXh3Q677MsDna_T9muE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/K7-hnpMXaXh3Q677MsDna_T9muE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K7-hnpMXaXh3Q677MsDna_T9muE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/alcWe1PmZi4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/3646779200370593635/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2011/10/quien-es-el-alias.html#comment-form" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/3646779200370593635?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/3646779200370593635?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/alcWe1PmZi4/quien-es-el-alias.html" title="¿Quién es el Alias?" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-YzoHGF0iYE4/TpxJQLQrhpI/AAAAAAAAANM/egLJ43Gl1MU/s72-c/Fuente_xBase.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2011/10/quien-es-el-alias.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4GRn0_fCp7ImA9WhdVFk0.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-8046654361728734947</id><published>2011-09-19T18:58:00.001-03:00</published><updated>2011-09-21T09:08:47.344-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-21T09:08:47.344-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Harbour Minigui" /><category scheme="http://www.blogger.com/atom/ns#" term="Migrar desde dBFast" /><title>Migrando desde dBFast a Harbour Minigui</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-7Z7peYiL98o/TnQUrz8uYpI/AAAAAAAAALo/zt9fx6H8ssw/s1600/copying-database.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="165" src="http://3.bp.blogspot.com/-7Z7peYiL98o/TnQUrz8uYpI/AAAAAAAAALo/zt9fx6H8ssw/s320/copying-database.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Como ya hemos visto en artículos anteriores, nuestro fiel dBFast, que ha sobrevivido por&amp;nbsp;alrededor de 20 años&amp;nbsp;prácticamente sin cambios, desde Windows 3.1 a Windows 7, no logrará sobrevivir a la nueva generación de tecnologías basadas en 64 bits que, en forma lenta pero constante, se han ido consolidando en el mercado tanto de la informática personal como en la informática de negocios. &amp;nbsp;Ante esta disyuntiva, nos hemos visto obligados a buscar un nuevo lenguaje de programación que nos permita desarrollar aplicaciones o migrar las que ya tenemos con una curva mínima de aprendizaje, y con la menor cantidad de cambios posibles. ¿Será pedir mucho?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En mi opinión, y según lo manifiesto en el artículo que escribí el 4 de mayo de 2011 (&lt;a href="http://dbfastchile.blogspot.com/2011/05/programa-en-dbfast-modificado-para.html"&gt;Ver artículo&lt;/a&gt;), la herramienta que&amp;nbsp;reúne&amp;nbsp;las condiciones mencionadas en el párrafo anterior es Harbour Minigui. &amp;nbsp;Como dije en ese artículo, Harbour es un compilador Open Source, 100% compatible con Clipper. &amp;nbsp;Minigui en tanto, es una librería desarrollada en xHarbour y C nativo por Roberto López (Argentina) que proporciona una interfaz gráfica a los programas escritos en (x)Harbour. &amp;nbsp;Minigui además proporciona un IDE que facilita el desarrollo de aplicaciones y la organización de nuestros proyectos (&lt;a href="http://www.harbourminigui.com/"&gt;Sitio Oficial de Harbour Minigui&lt;/a&gt;).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;Similitudes entre dBFast y Harbour Minigui&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-FEamBHkcBKY/TnQU54dq0-I/AAAAAAAAALs/28J8VnUweZo/s1600/programamcion.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-FEamBHkcBKY/TnQU54dq0-I/AAAAAAAAALs/28J8VnUweZo/s320/programamcion.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Afortunadamente, y aunque cueste creerlo, hay bastantes similitudes entre dBFast y Harbour Minigui. &amp;nbsp;Esto gracias a que Harbour = Clipper (100% compatibles), y Clipper es descendiente directo de dBase al igual que dBFast, por lo cual existe un gran porcentaje de compatibilidad entre las sintaxis de los dos lenguajes. &amp;nbsp;No debemos olvidar que tanto Clipper como dBFast son concebidos en sus inicios como compiladores para dBase. &amp;nbsp;Ambos lenguajes mantienen los comandos básicos para la apertura y administración de tablas, los comandos de red, tratamiento de variables y tipos de datos, estructuras de control, etc.; de modo que los cambios que veremos serán más bien de forma que de fondo.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;De acuerdo a lo anterior, la principal dificultad que deberemos sortear al migrar desde dBFast a Harbour Minigui, está en la forma de programar.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En dBFast los programas tienen invariablemente la misma estructura, esto es:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Comenzamos con las sentencias del preprocesador #define e #include,&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Establecemos los parámetros de funcionamiento mediante el uso de los comandos SET&lt;/li&gt;
&lt;li&gt;Abrimos las tablas de datos&lt;/li&gt;
&lt;li&gt;Definimos Constantes y Variables&lt;/li&gt;
&lt;li&gt;Creamos Ventanas y Controles (incluidos los comandos SAY y GET)&lt;/li&gt;
&lt;li&gt;Creamos el ciclo dentro del cual se ejecutará el programa (DO WHILE - ENDDO) dentro del cual...&lt;/li&gt;
&lt;li&gt;Chequeamos los eventos, en qué control se producen y dependiendo de eso, llamamos los programas y/o funciones que deben ejecutarse,&lt;/li&gt;
&lt;li&gt;Cerramos las tablas de datos.&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;Veamos el siguiente ejemplo:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;******************************************&lt;br /&gt;
* Programa: Ej_01.prg&lt;br /&gt;
******************************************&lt;br /&gt;
#DEFINE bOk "Aceptar"&lt;br /&gt;
#DEFINE bCancel "Cancelar"&lt;br /&gt;
&lt;br /&gt;
SET DATE FRENCH&lt;br /&gt;
SET DELETED ON&lt;br /&gt;
SET CONFIRM ON&lt;br /&gt;
&lt;br /&gt;
USE Personas.dbf&lt;br /&gt;
&lt;br /&gt;
cNombre = SPACE(30)&lt;br /&gt;
nEdad = 0&lt;br /&gt;
&lt;br /&gt;
CREATE WINDOW "Personas" FROM 10,10 TO 20,50&lt;br /&gt;
&lt;br /&gt;
@01,02 SAY "Nombre:" GET cNombre PICTURE "@!" VALID .NOT. EMPTY(cName)&lt;br /&gt;
@03,02 SAY "Edad:" &amp;nbsp; &amp;nbsp; &amp;nbsp;GET nEdad PICTURE "99"&lt;br /&gt;
CREATE BUTTON bOk &amp;nbsp; &amp;nbsp; &amp;nbsp; AT 5,15 SIZE 1,10&lt;br /&gt;
CREATE BUTTON bCancel &amp;nbsp;AT 5 30 SIZE 1,10&lt;br /&gt;
&lt;br /&gt;
SET EXIT BUTTON TO bCancel&lt;br /&gt;
&lt;br /&gt;
DO WHILE .T.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; READ SAVE MODAL&lt;br /&gt;
&amp;nbsp; &amp;nbsp; nEvent = EVENT()&lt;br /&gt;
&amp;nbsp; &amp;nbsp; DO CASE&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CASE nEvent = 1&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IF LASTKEY() = 27&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EXIT&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ENDIF&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CASE nEvent = 1&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IF BUTTON() = bOk&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;APPEND BLANK&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;REPLACE NOMBPERS WITH cNombre&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;REPLACE EDADPERS &amp;nbsp;WITH nEdad&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;COMMIT&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cNombre = SPACE(20)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;nEdad = 0&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ELSE&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EXIT&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ENDIF&lt;br /&gt;
&amp;nbsp; &amp;nbsp; ENDCASE&lt;br /&gt;
&lt;br /&gt;
ENDDO&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;CLOSE WINDOW "Personas"&lt;/div&gt;&lt;div&gt;CLOSE DATABASES&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;RETURN&lt;/div&gt;&lt;div&gt;******************************************&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Si ponemos atención, veremos que a diferencia de la programación para DOS, en que la ventana y los controles debieran estar dentro de un ciclo para redibujar la pantalla cada vez que se requiera, en dBFast estos objetos permanecen invariables durante la ejecución del programa y no necesitan ser redibujados. &amp;nbsp;Por su parte, el ciclo solo evalúa los eventos (clic, doble clic, pulsación de teclas, etc.) y dependiendo del evento y del control en el cual se produce, realizamos una determinada acción a través de una llamada a función o procedimiento.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Por otra parte Harbour Minigui permite definir los objetos (controles en dBFast)&amp;nbsp;en modo estándar o xBase y en modo alternativo. &amp;nbsp;El modo alternativo permite utilizar definiciones similares a la de otros lenguajes visuales como Visual dBase 7.5. &amp;nbsp;Veamos por ejemplo las dos maneras posibles de definir un Botón (Button):&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Sintaxis Estándar:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; @ &amp;lt;nRow&amp;gt; ,&amp;lt;nCol&amp;gt;  &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BUTTON &amp;lt;ControlName&amp;gt;  &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ OF | PARENT  &amp;lt;ParentWindowName&amp;gt; ]&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAPTION &amp;lt;cCaption&amp;gt;&amp;nbsp;  &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PICTURE &amp;lt;cPictureName&amp;gt;  [ TOP | BOTTOM | LEFT | RIGHT ]&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ACTION | ONCLICK | ON CLICK  &amp;lt;ActionProcedureName&amp;gt; | &amp;lt;bBlock&amp;gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ WIDTH &amp;lt;nWidth&amp;gt; HEIGHT  &amp;lt;nHeight&amp;gt; ] &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ FONT &amp;lt;cFontName&amp;gt; SIZE  &amp;lt;nFontSize&amp;gt; ]&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ BOLD ] [ ITALIC ] [  UNDERLINE ] [ STRIKEOUT ]&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ TOOLTIP  &amp;lt;cToolTipText&amp;gt; ] &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ FLAT ] &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ NOTRANSPARENT ]&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ ON GOTFOCUS  &amp;lt;OnGotFocusProcedur&amp;gt; | &amp;lt;bBlock&amp;gt; ]&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ ON LOSTFOCUS  &amp;lt;OnLostFocusProcedure&amp;gt; | &amp;lt;bBlock&amp;gt; ]&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ NOTABSTOP ]&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ HELPID &amp;lt;nHelpId&amp;gt;  ]&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ INVISIBLE ] &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ MULTILINE ] &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;b&gt;Sintaxis alternativa:&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DEFINE BUTTON  &amp;lt;ButtonName&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PARENT  &amp;lt;ParentWindowName&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROW &amp;lt;nValue&amp;gt;&amp;nbsp;  &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; COL  &amp;lt;nValue&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CAPTION &amp;lt;cValue&amp;gt;&amp;nbsp;  &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PICTURE  &amp;lt;cValue&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PICTALIGNMENT &lt;span lang="EN-US"&gt;Top | Left | Right | Bottom&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ONCLICK  &amp;lt;ActionProcedure&amp;gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WIDTH &amp;lt;nValue&amp;gt;  &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HEIGHT  &amp;lt;nValue&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText11"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FONTNAME  &amp;lt;cValue&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText11"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FONTSIZE  &amp;lt;nValue&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText11"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FONTBOLD  &lt;/span&gt;&amp;lt;lValue&amp;gt;&lt;/div&gt;&lt;div class="MsoPlainText11"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FONTITALIC &amp;lt;lValue&amp;gt;  &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText11"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FONTUNDERLINE  &amp;lt;lValue&amp;gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText11"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FONTSTRIKEOUT&lt;/span&gt;  &amp;lt;lValue&amp;gt; &lt;/div&gt;&lt;div class="MsoPlainText11"&gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  TOOLTIP &amp;lt;cValue&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FLAT &amp;lt;lValue&amp;gt;  &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TRANSPARENT &amp;lt;lValue&amp;gt;  &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ONGOTFOCUS  &amp;lt;ActionProcedure&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ONLOSTFOCUS  &amp;lt;ActionProcedure&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TABSTOP &amp;lt;lValue&amp;gt;  &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HELPID  &amp;lt;nValue&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VISIBLE &amp;lt;lValue&amp;gt;  &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText1"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MULTILINE &amp;lt;lValue&amp;gt;  &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;span lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END BUTTON&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Veamos el siguiente ejemplo de un programa desarrollado en Harbour Minigui:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;************************************&lt;/div&gt;&lt;div&gt;#include "hmg.ch"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Function Main&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; DEFINE WINDOW Win_1 ;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AT 0,0 ;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WIDTH 400 ;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HEIGHT 300 ;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TITLE 'Tutor 04 TextBox Test' ;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MAIN&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DEFINE MAIN MENU&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;POPUP "First Popup"&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ITEM 'Change TextBox Content' ACTION &amp;nbsp;Win_1.Text_1.Value := 'New TextBox Value'&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ITEM 'Retrieve TextBox Content' ACTION &amp;nbsp;MsgInfo ( Win_1.Text_1.Value)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SEPARATOR&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ITEM 'Change Numeric TextBox Content' ACTION &amp;nbsp;Win_1.Text_2.Value := 100&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ITEM 'Retrieve Numeric TextBox Content' ACTION &amp;nbsp;MsgInfo ( Str(Win_1.Text_2.Value))&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SEPARATOR&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ITEM 'Change Numeric (InputMask) TextBox Content' ACTION &amp;nbsp;Win_1.Text_3.Value := 1234.12&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ITEM 'Retrieve Numeric (InputMask) TextBox Content' ACTION &amp;nbsp;MsgInfo ( Str(Win_1.Text_3.Value))&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;END POPUP&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; END MENU&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @ 40 , 120 TEXTBOX Text_1&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @ 80 , 120 TEXTBOX Text_2 NUMERIC&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @ 120 , 120 TEXTBOX Text_3 NUMERIC INPUTMASK '9999.99'&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; END WINDOW&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; ACTIVATE WINDOW Win_1&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Return&lt;/div&gt;&lt;div&gt;************************************&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Al ver el programa de ejemplo, algún programador de dBFast no familiarizado con los lenguajes visuales me preguntará ¿y aquí dónde está el ciclo DO WHILE - ENDDO? ¿en qué parte puedo chequear los eventos para llamar a mis funciones o procedimientos?&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;La verdad es que el programa está completo y no necesitamos ningún ciclo para chequear eventos. &amp;nbsp;Ocurre que&amp;nbsp;&lt;b&gt;lo que para dBFast eran Controles, para Harbour Minigui son Objetos&lt;/b&gt;, y los objetos tienen ciertas particularidades. &amp;nbsp;Por ejemplo, si definimos un botón utilizando la sintaxis alternativa (Todos los objetos creados con el IDE se definen utilizando la sintaxis alternativa) veremos que este posee &lt;b&gt;Propiedades&lt;/b&gt;, responde a ciertos &lt;b&gt;Eventos &lt;/b&gt;específicos, y posee ciertos &lt;b&gt;Métodos &lt;/b&gt;equivalentes a "reacciones"&lt;b&gt;&amp;nbsp;&lt;/b&gt;que permiten modificar el objeto en cuestión. &amp;nbsp;En el fondo, basta con definir los controles, establecer sus propiedades y asignar una procedure o función a alguno de los eventos que genera el objeto.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Un botón específicamente posee las siguientes propiedades:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;- Enabled&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- Visible&amp;nbsp;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- Row&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- Col&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- Width&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- Height&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- Caption&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- FontName&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- FontSize&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- FontBold&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- FontItalic&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- FontUnderline&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- FontStrikeout&amp;nbsp;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- ToolTip&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- Picture&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- Name (R)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- Parent (D)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- Flat (D)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- TabStop (D)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- HelpId (D)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- Transparent (D)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- PictAlignment (D)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;- MultiLine (D)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;i&gt;D: Disponible solo en tiempo de diseño&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;R: Reservado, no modificable. Elemento esencial para la definición del objeto&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Un botón responde solo a los siguientes eventos:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;div&gt;- &lt;i&gt;OnGotFocus (Cuando obtiene el foco)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;- &lt;i&gt;OnLostFocus (Cuando pierde el foco)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;- &lt;i&gt;OnClick &lt;/i&gt;o &lt;i&gt;Action (Cuando hacemos clic sobre él. &amp;nbsp;Es en este evento en donde asignamos un procedimiento)&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Un botón también posee los siguientes métodos (o reacciones)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;div&gt;- &lt;i&gt;Show (Hacer visible el botón, el equivalente en dBFast es &lt;b&gt;SHOW CONTROL&lt;/b&gt;)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;- &lt;i&gt;Hide&lt;/i&gt; &lt;i&gt;(Ocultar el botón, el equivalente en dBFast es &lt;b&gt;HIDE CONTROL&lt;/b&gt;)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;- &lt;i&gt;SetFocus (Llevar el foco hasta el botón, el equivalente en dBFast es &lt;b&gt;SELECT CONTROL&lt;/b&gt;)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;- &lt;i&gt;Release (Eliminar el objeto botón, el equivalente en dBFast es&amp;nbsp;&lt;b&gt;CLOSE CONTROL&lt;/b&gt;)&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Cuando queremos hacer referencia a un deterrminado objeto, por ejemplo el botón del cual hablamos, debemos utilizar la sintaxis de los lenguajes visuales, es decir:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;NombreVentana&lt;/span&gt;.&lt;span class="Apple-style-span" style="color: #38761d;"&gt;NombreControl&lt;/span&gt;.&lt;span class="Apple-style-span" style="color: red;"&gt;Método&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;o bien&lt;b&gt;,&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;NombreVentana&lt;/span&gt;.&lt;span class="Apple-style-span" style="color: #38761d;"&gt;NombreControl&lt;/span&gt;.&lt;span class="Apple-style-span" style="color: red;"&gt;Propiedad &lt;/span&gt;:= Valor&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Otra cosa importante que debemos tener en cuenta es que si utilizamos objetos para el ingreso de datos como por ejemplo, un control Textbox, no necesitamos una variable para recibir esos datos pues los objetos utilizan una de sus propiedades, por lo general la propiedad &lt;b&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;Value&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;, para almacenar los datos.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por ejemplo, si queremos ingresar un nombre en dBFast , primero debemos definir la variable (&lt;b&gt;&amp;nbsp;&lt;span class="Apple-style-span" style="color: red;"&gt;cNombre &lt;/span&gt;= SPACE(30)&lt;/b&gt;&amp;nbsp;) y luego ingresar el nombre utilizando cualquiera de las formas que se muestran a continuación:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;- @01,02 SAY "Nombre:" GET &lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;cNombre&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;- CREATE CONTROL TEXT "&lt;b&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;Text_Nombre&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;" AT 2,10 SIZE &amp;nbsp;1,30 SAVE TO &lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;cNombre&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Si posteriormente queremos guardar el nombre ingresado en el campo &lt;b&gt;NOMPERS &lt;/b&gt;de la tabla PERSONAS.DBF, solo debemos hacer referencia a la variable en el comando REPLACE, es decir:&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b&gt;REPLACE &lt;span class="Apple-style-span" style="color: blue;"&gt;NOMPERS &lt;/span&gt;WITH &lt;span class="Apple-style-span" style="color: red;"&gt;cNombre&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
Para hacer la misma operación con Minigui primero debemos definir el control de la siguiente forma (por cierto, es el IDE el que genera el código):&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; DEFINE TEXTBOX &lt;b&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;Text_Nombre&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ROW &amp;nbsp; &amp;nbsp;10&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; COL &amp;nbsp; &amp;nbsp;90&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WIDTH &amp;nbsp;300&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HEIGHT 24&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FONTNAME "Arial"&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FONTSIZE 9&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TOOLTIP ""&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ONCHANGE Nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ONGOTFOCUS Nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ONLOSTFOCUS Nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FONTBOLD .F.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FONTITALIC .F.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FONTUNDERLINE .F.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FONTSTRIKEOUT .F.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ONENTER Nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; HELPID Nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TABSTOP .T.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; VISIBLE .T.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; READONLY .F.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; RIGHTALIGN .F.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DISABLEDBACKCOLOR Nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DISABLEDFONTCOLOR Nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BACKCOLOR NIL&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FONTCOLOR NIL&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; INPUTMASK Nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FORMAT Nil&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt; &lt;span class="Apple-style-span" style="color: red;"&gt;VALUE &lt;/span&gt;""&lt;/b&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; END TEXTBOX&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Parece más complicado que en dBFast, pero en el fondo, en la definición del objeto solo se especifican las propiedades y lo que debe hacerse ante cada evento. &amp;nbsp;Esta tarea se facilita enormemente utilizando el &lt;b&gt;&lt;i&gt;Inspector de Objeto&lt;/i&gt;&lt;/b&gt; incorporado en el&lt;b&gt;&lt;i&gt; IDE de Minigui&lt;/i&gt;&lt;/b&gt;. &amp;nbsp;Ahora, si queremos almacenar el valor ingresado en el Textbox en el campo &lt;b&gt;&lt;i&gt;NOMPERS &lt;/i&gt;&lt;/b&gt;de la tabla &lt;b&gt;PERSONAS.DBF&lt;/b&gt;, debemos hacer lo siguiente:&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b&gt;REPLACE &lt;span class="Apple-style-span" style="color: blue;"&gt;NOMPERS &lt;/span&gt;WITH &lt;span class="Apple-style-span" style="color: blue;"&gt;NombreVentana&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;.&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;Text_Nombre&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;.&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #cc0000;"&gt;Value&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Se me olvidaba un detalle importante, &lt;b style="font-style: italic;"&gt;cuando utilizamos un objeto BROWSE y desplazamos el puntero por los registros del control, la propiedad Value devuelve el número de registro seleccionado en el objeto,&amp;nbsp;&lt;/b&gt;pero a diferencia de dBFast, &lt;b&gt;&lt;i&gt;NO mueve el puntero en la tabla&lt;/i&gt;&lt;/b&gt;. &amp;nbsp;Para actualizar la posición del puntero en la tabla debemos utilizar el comando GO de la siguiente forma:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;GO &lt;span class="Apple-style-span" style="background-color: white; color: blue;"&gt;NombreVentana&lt;/span&gt;.&lt;span class="Apple-style-span" style="color: #6aa84f;"&gt;NombreBrowse&lt;/span&gt;.&lt;span class="Apple-style-span" style="color: #cc0000;"&gt;Value&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Otra opción es agregar esta instrucción en el evento &lt;b&gt;ONCHANGE &lt;/b&gt;del objeto Browse. &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A continuación les dejo una pequeña aplicación para administrar un archivo de Personas (Personas.Dbf) con dos tablas de índices, un cuadro de búsqueda incremental y codificación automática. &amp;nbsp;Este ejemplo utiliza una interfaz similar a los ejemplos anteriores desarrollados en dBFast y ha sido desarrollado íntegramente en Harbour Minigui versión 3.0.35. &amp;nbsp;El ejemplo contiene todos los archivos necesarios para ejecutar la aplicación, he tratado de documentar las funciones y he simplificado el código para una mejor comprensión de la lógica de programación. &amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;b&gt;Capturas del ejemplo:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-zoicP3YJJHQ/TnHveTOiXyI/AAAAAAAAALU/OTRjped5aMA/s1600/Ejemplo_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="319" src="http://4.bp.blogspot.com/-zoicP3YJJHQ/TnHveTOiXyI/AAAAAAAAALU/OTRjped5aMA/s320/Ejemplo_01.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-_LiWEEkIhfQ/TnHvlau1ytI/AAAAAAAAALY/CYkqXBUrf8Q/s1600/Ejemplo_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="319" src="http://2.bp.blogspot.com/-_LiWEEkIhfQ/TnHvlau1ytI/AAAAAAAAALY/CYkqXBUrf8Q/s320/Ejemplo_02.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-oPvKPptwU-I/TnHvqYYRx_I/AAAAAAAAALc/LSeJNKMFCkI/s1600/Ejemplo_03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-oPvKPptwU-I/TnHvqYYRx_I/AAAAAAAAALc/LSeJNKMFCkI/s320/Ejemplo_03.png" width="319" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-wPAGSQiJ3UU/TnHvypC6RmI/AAAAAAAAALg/ruhZjLE2nUU/s1600/Ejemplo_04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="318" src="http://4.bp.blogspot.com/-wPAGSQiJ3UU/TnHvypC6RmI/AAAAAAAAALg/ruhZjLE2nUU/s320/Ejemplo_04.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-YVAnLuSDiYY/TnHv4V4feII/AAAAAAAAALk/Ji6Di8cnGNo/s1600/Ejemplo_05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="319" src="http://1.bp.blogspot.com/-YVAnLuSDiYY/TnHv4V4feII/AAAAAAAAALk/Ji6Di8cnGNo/s320/Ejemplo_05.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Descargar el programa de ejemplo desde &lt;a href="http://www.megaupload.com/?d=PAMFJ4BD"&gt;&lt;b&gt;MEGAUPLOAD&lt;/b&gt;&lt;/a&gt;:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Enlace de descarga:&amp;nbsp;&lt;b&gt;&lt;a href="http://www.megaupload.com/?d=PAMFJ4BD"&gt;http://www.megaupload.com/?d=PAMFJ4BD&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;El ejemplo contiene los siguientes archivos:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;b&gt;Ejemplo_1.hbp&lt;/b&gt;&lt;i&gt; (Archivo contenedor de proyecto)&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;b&gt;Main.Prg&lt;/b&gt;&lt;i&gt; (Módulo o programa principal de la aplicación)&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;b&gt;Main.Fmg&lt;i&gt; &lt;/i&gt;&lt;/b&gt;&lt;i&gt;(Formulario principal de la aplicación)&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;b&gt;Add_Record.Fmg&lt;/b&gt;&lt;i&gt; (Formulario para agregar/modificar registros)&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;b&gt;Personas.Dbf&lt;/b&gt; (Tabla para el almacenamiento de personas)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;i&gt;Se incluye también la carpeta "BMP" que contiene una gran cantidad de íconos en formato BMP para utilizarlos en botones y objetos que soporten imágenes.&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El proyecto contiene dos formularios: Main (Ventana principal de la aplicación) y Add_Record (Ventana utilizada para agregar y modificar registros). &amp;nbsp;Estos formularios contienen los objetos desde los cuales se hacen las llamadas a las distintas funciones y procedimientos. &amp;nbsp;Todas las funciones y procedimientos asignadas a los distintos eventos de cada objeto están contenidas en el módulo Main.prg, y se detallan a continuación:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Formulario "Main":&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Función &lt;b&gt;OpenData&lt;/b&gt;() : evento &lt;b&gt;ONINIT &lt;/b&gt;del formulario&lt;br /&gt;
Función &lt;b&gt;CloseData&lt;/b&gt;() : evento &lt;b&gt;ONRELEASE &lt;/b&gt;del formulario&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Objeto Textbox "Text_Buscar"&lt;/b&gt; (Casilla de búsqueda incremental):&lt;br /&gt;
Función &lt;b&gt;FindRecord&lt;/b&gt;() : evento &lt;b&gt;ONCHANGE &lt;/b&gt;del objeto&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Objeto RadioGroup "Radio_SetIndex"&lt;/b&gt; (Selector de índice activo):&lt;br /&gt;
Función &lt;b&gt;SetNewIndex&lt;/b&gt;() : evento &lt;b&gt;ONCHANGE &lt;/b&gt;del objeto&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Objeto Button "B_New"&lt;/b&gt; (Botón "Nuevo")&lt;br /&gt;
Función &lt;b&gt;AddRecord&lt;/b&gt;() : evento ACTION del objeto&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Objeto Button "B_Edit"&lt;/b&gt; (Botón "Editar")&lt;br /&gt;
Función &lt;b&gt;EditRecord&lt;/b&gt;() : evento &lt;b&gt;ACTION &lt;/b&gt;del objeto&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Objeto Button "B_Delete"&lt;/b&gt; (Botón "Eliminar")&lt;br /&gt;
Función &lt;b&gt;DeleteRecord&lt;/b&gt;() : evento &lt;b&gt;ACTION &lt;/b&gt;del objeto&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Objeto Button "B_Close"&lt;/b&gt; (Botón "Cerrar")&lt;br /&gt;
Método &lt;b&gt;Release &lt;/b&gt;del formulario "Main" (Main.Release) asociado al evento &lt;b&gt;ACTION &lt;/b&gt;del objeto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;Formulario Add_Record:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;En este formulario, no se han asignado funciones para los eventos de los objetos Textbox que reciben los datos. &amp;nbsp;Solo se han asignado eventos a los botones del formulario.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;b&gt;Objeto Button "B_Save"&lt;/b&gt;&amp;nbsp;(Botón "Aceptar")&lt;br /&gt;
Función&amp;nbsp;&lt;b&gt;SaveRecord&lt;/b&gt;() : evento ACTION del objeto&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Objeto Button "B_Cancel"&lt;/b&gt;&amp;nbsp;(Botón "Cancelar")&lt;br /&gt;
Método&amp;nbsp;&lt;b&gt;Release&amp;nbsp;&lt;/b&gt;del formulario "Add_Record" (Add_Record.Release)&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Adicionalmente se utilizan las funciones:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;SetCtrlState&lt;/b&gt;() : Activa/desactiva los controles del formulario "Main" en caso de que la tabla "Personas.dbf" no tenga registros. &amp;nbsp;Esta función es invocada desde las funciones OpenData(), SaveRecord() y DeleteRecord().&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;GetNewId&lt;/b&gt;() : Obtiene el nuevo ID automáticamente a partir del último ID ingresado. &amp;nbsp;Esta función es invocada desde la función AddRecord().&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Espero que la información y el ejemplo les sean de utilidad, cualquier consulta pueden hacerla a través de los comentarios del Blog, o bien directamente a mi correo electrónico. &amp;nbsp;Les comento que estoy creando un pequeño tutorial con breves videos en HD que grafican los pasos a seguir en la construcción de aplicaciones con Harbour Minigui.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Saludos,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;Rodrigo Dinamarca M.&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-8046654361728734947?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1E2fUAri1t55Xe6YsCT6utDke18/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1E2fUAri1t55Xe6YsCT6utDke18/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1E2fUAri1t55Xe6YsCT6utDke18/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1E2fUAri1t55Xe6YsCT6utDke18/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/8DGy0MYCPCI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/8046654361728734947/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2011/09/migrando-desde-dbfast-harbour-minigui.html#comment-form" title="3 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/8046654361728734947?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/8046654361728734947?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/8DGy0MYCPCI/migrando-desde-dbfast-harbour-minigui.html" title="Migrando desde dBFast a Harbour Minigui" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-7Z7peYiL98o/TnQUrz8uYpI/AAAAAAAAALo/zt9fx6H8ssw/s72-c/copying-database.jpg" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2011/09/migrando-desde-dbfast-harbour-minigui.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0INQH05fSp7ImA9WhZUGU4.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-5886722718980477065</id><published>2011-06-13T00:30:00.002-04:00</published><updated>2011-06-13T00:33:11.325-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-13T00:33:11.325-04:00</app:edited><title>RPV Printing System: Solucionar error SYSTRAY.OCX no está correctamente registrado</title><content type="html">&lt;div style="text-align: justify;"&gt;He recibido un par de consultas de personas que utilizan Windows Vista y Windows 7, que tienen problemas para trabajar con las versiones de RPV Printing System disponibles para descarga en este Blog.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Al abrir el visualizador de informes no hay problemas, pero cuando intentan abrir el servidor de impresión de RPV, el cual es fundamental para administrar la impresión de informes, aparece un mensaje de error indicando que el componente "&lt;b&gt;systray.ocx&lt;/b&gt;" no está correctamente registrado.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La solución para este problema es instalar los runtimes de Visual Basic 5, los cuales están disponibles para descarga en la sección "Recursos" del Blog.&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;b&gt;&lt;a href="http://dbfastchile.blogspot.com/p/recursos.html"&gt;Ir a la sección Recursos &amp;gt;&amp;gt;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-5886722718980477065?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zutbjt5mVbqrC_F8KWk-hQF7HOA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zutbjt5mVbqrC_F8KWk-hQF7HOA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zutbjt5mVbqrC_F8KWk-hQF7HOA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zutbjt5mVbqrC_F8KWk-hQF7HOA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/NepDVTGcHkE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/5886722718980477065/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2011/06/rpv-printing-system-solucionar-error.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/5886722718980477065?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/5886722718980477065?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/NepDVTGcHkE/rpv-printing-system-solucionar-error.html" title="RPV Printing System: Solucionar error SYSTRAY.OCX no está correctamente registrado" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2011/06/rpv-printing-system-solucionar-error.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QESXc8eCp7ImA9WhZXFUw.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-1577370867298575013</id><published>2011-05-04T10:47:00.004-03:00</published><updated>2011-05-04T11:28:28.970-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-04T11:28:28.970-03:00</app:edited><title>Programa en dBFast modificado para Harbour + Minigui</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-KS1LEuLrLqc/TcFJpXmdxKI/AAAAAAAAAK8/of7I3RWViXw/s1600/CA_dbFast.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-KS1LEuLrLqc/TcFJpXmdxKI/AAAAAAAAAK8/of7I3RWViXw/s200/CA_dbFast.jpg" width="155" /&gt;&lt;/a&gt;&lt;/div&gt;Hace unos días, Ramón Denuc me reenvió un email de Jorge López (más conocido como Mustafa), antiguo desarrollador en dBFast que cansado de las limitaciones impuestas por la falta de soporte a raíz del abandono del proyecto por parte de sus creadores, sumadas a la consiguiente falta de actualizaciones que lo hicieran compatible con las tecnologías de 32 bits, y por la amenaza en ciernes que suponen los sistemas operativos de 64 bits para este viejo y fiel lenguaje, en marzo de 2010&amp;nbsp;anunció a la comunidad dBFast a través de su foro en "La web del Programador" que abandonaba el desarrollo de aplicaciones en dBFast.&lt;br /&gt;
&lt;br /&gt;
Actualmente Jorge utiliza el compilador Harbour, totalmente compatible con Clipper,&amp;nbsp;más la librería gráfica Minigui.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-r8srARLV1yM/TcFJwbe8qlI/AAAAAAAAALA/xDrGU5oAmNI/s1600/hmg.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-r8srARLV1yM/TcFJwbe8qlI/AAAAAAAAALA/xDrGU5oAmNI/s1600/hmg.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;Jorge revisó un artículo que publiqué en este blog el día 13 de octubre de 2010, titulado:&amp;nbsp;"&lt;b&gt;&lt;i&gt;&lt;a href="http://dbfastchile.blogspot.com/2010/10/uso-de-solapas-para-administrar.html"&gt;Uso de solapas para administrar archivos de datos en una interfaz basada en CONTROL BROWSE y PICTURE BUTTONS&lt;/a&gt;&lt;/i&gt;&lt;/b&gt;", y modíficó el código dBFast del ejemplo para adaptarlo a Harbour + Minigui. &amp;nbsp; Para clarificar un poco más la idea, comparto con ustedes texto que Jorge le envió a Ramón:&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-cq0ptoqv5p8/TcFLqvta1zI/AAAAAAAAALE/CzTibiEXbhA/s1600/harbour-logo.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="120" src="http://4.bp.blogspot.com/-cq0ptoqv5p8/TcFLqvta1zI/AAAAAAAAALE/CzTibiEXbhA/s200/harbour-logo.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;i&gt;&lt;b&gt;"Hola Ramon&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;i&gt;&lt;b&gt;Como estas ? como sigue dBfast ?&amp;nbsp; &lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;i&gt;&lt;b&gt;He visto la Web que tiene el compañero RODRIGO DINAMARCA &lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;i&gt;&lt;b&gt;y tiene un Sample que me gusto mucho de un Tab_Browse con &lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;i&gt;&lt;b&gt;dos Bases de datos y un Buscador comun y los Botones conjuntos&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;i&gt;&lt;b&gt;Me gustaria que le hicieras llegar la version que yo he modificado&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;i&gt;&lt;b&gt;para HMG que al estar compilada en C pero siendo Clipper si es&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;i&gt;&lt;b&gt;de 32 Bits. que veo que es el tema que esta preocupando a los&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;i&gt;&lt;b&gt;usuarios de dBfast.&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;i&gt;&lt;b&gt;Tienes que renombrar los ficheros con extension b_&amp;nbsp; a--&amp;gt; bat si&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;i&gt;&lt;b&gt;tiens que compilar y&amp;nbsp; e_&amp;nbsp; a --&amp;gt; exe que es el ejecutable.&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;i&gt;&lt;b&gt;Sin otro particular un abrazo&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;i&gt;&lt;b&gt;Jorge"&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La verdad es que me impresionó bastante el resultado obtenido por Jorge al compilar su aplicación con Harbour+Minigui.&lt;br /&gt;
&lt;br /&gt;
Este es el ejemplo original desarrollado en dBFast:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-kdp_YM9C2bY/TcFChkxF6gI/AAAAAAAAAKo/Ex-ROjEFfgQ/s1600/Tabs02_05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="279" src="http://2.bp.blogspot.com/-kdp_YM9C2bY/TcFChkxF6gI/AAAAAAAAAKo/Ex-ROjEFfgQ/s320/Tabs02_05.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-2re3tHi1Vt4/TcFCwy4IhBI/AAAAAAAAAKs/cHorVPhL5Do/s1600/Tabs02_03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="279" src="http://4.bp.blogspot.com/-2re3tHi1Vt4/TcFCwy4IhBI/AAAAAAAAAKs/cHorVPhL5Do/s320/Tabs02_03.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Pueden ver el artículo y el ejemplo completo haciendo clic &lt;a href="http://dbfastchile.blogspot.com/2010/10/uso-de-solapas-para-administrar.html"&gt;&lt;b&gt;aquí&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;Este es el ejemplo modificado por Jorge López y compilado con Harbour Minigui:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-FwlrFJ-ZE68/TcFEoFb2kkI/AAAAAAAAAKw/_NCgwSABfgE/s1600/Harbour_Tabs_01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="304" src="http://2.bp.blogspot.com/-FwlrFJ-ZE68/TcFEoFb2kkI/AAAAAAAAAKw/_NCgwSABfgE/s320/Harbour_Tabs_01.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-WSj_6wQXmuI/TcFE_aG8xgI/AAAAAAAAAK0/LXd-M-6vuAM/s1600/Harbour_Tabs_02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="304" src="http://3.bp.blogspot.com/-WSj_6wQXmuI/TcFE_aG8xgI/AAAAAAAAAK0/LXd-M-6vuAM/s320/Harbour_Tabs_02.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-GR2Gb6it8J8/TcFFIFHT32I/AAAAAAAAAK4/jw_KNZuF0q8/s1600/Harbour_Tabs_03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="304" src="http://3.bp.blogspot.com/-GR2Gb6it8J8/TcFFIFHT32I/AAAAAAAAAK4/jw_KNZuF0q8/s320/Harbour_Tabs_03.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;Como siempre, pueden descargar el ejemplo modificado por Jorge desde &lt;a href="http://www.megaupload.com/?d=MM7PVVGY"&gt;Megaupload&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b&gt;Enlace de Descarga:&amp;nbsp;&lt;a href="http://www.megaupload.com/?d=MM7PVVGY"&gt;http://www.megaupload.com/?d=MM7PVVGY&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Algunos datos interesantes sobre Harbour y Minigui:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Harbour Minigui es un proyecto Open Source (gratuito) iniciado originalmente por Roberto López (Argentina). &amp;nbsp;Minigui es una librería escrita en lenguaje xHarbour y C nativo que proporciona una interfaz gráfica a los programas escritos en xHarbour, actualmente se incorpora el compilador de C, MinGW que también es Open Source. &amp;nbsp;Para más información acerca de Minigui, pueden revisar su página web oficial en:&amp;nbsp;&amp;nbsp;http:&lt;a href="http://www.harbourminigui.com/"&gt;//www.harbourminigui.com&lt;/a&gt;&amp;nbsp;y pueden encontrar una definicion simple pero bastante completa en los &amp;nbsp;siguientes enlaces:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.embalajesterra.com/misdoc/programas/minigui_doc1.html"&gt;http://www.embalajesterra.com/misdoc/programas/minigui_doc1.html&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.carozodequilmes.com.ar/Projects/QAC/QAC_9.htm"&gt;http://www.carozodequilmes.com.ar/Projects/QAC/QAC_9.htm&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Un aspecto interesante a considerar es que a diferencia de Clipper, en el cual compilábamos nuestros PRG para generar un módulo OBJ, que luego enlazábamos para crear un EXE, Harbour genera un código C que es compilado y posteriormente enlazado a las librerías para generar el EXE. &amp;nbsp;También es posible, dependiendo del compilador que utilicemos, generar aplicaciones para Pocket PC o para Linux, e incluso aplicaciones para 64 bits.&lt;br /&gt;
&lt;br /&gt;
En lo personal, y a raíz del trabajo de Jorge López, descargué Harbour Minigui, y en los tiempos libres (que no son muchos porque cuando se tiene familia la cosa cambia), me he entretenido bastante probando a hacer pequeños programillas, y la verdad es me ha gustado mucho, el lenguaje es bastante sencillo y semi orientado a objetos, por su parte, el IDE es una gran ayuda a la hora de crear las interfaces, aunque si lo desean, pueden programar directamente el código sin utilizar el IDE.&lt;br /&gt;
&lt;br /&gt;
Creo que Harbour Minigui es una excelente opción para aquellos que buscan una alternativa de migración con una curva de aprendizaje mínimo, para cuando dBFast haya cumplido su vida útil, de hecho, me han solicitado actualizar un sistema de gestión comercial y estoy pensando seriamente hacerlo con Harbour Minigui, pero tranquilos, eso no quiere decir que abandonaré dBFast o este Blog.&lt;br /&gt;
&lt;br /&gt;
Saludos,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;RODRIGO DINAMARCA M &amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-1577370867298575013?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-zgQjQiZA5uUsJh0kOWlNN2KRwQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-zgQjQiZA5uUsJh0kOWlNN2KRwQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-zgQjQiZA5uUsJh0kOWlNN2KRwQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-zgQjQiZA5uUsJh0kOWlNN2KRwQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/5a4Hhf8SjRI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/1577370867298575013/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2011/05/programa-en-dbfast-modificado-para.html#comment-form" title="4 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/1577370867298575013?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/1577370867298575013?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/5a4Hhf8SjRI/programa-en-dbfast-modificado-para.html" title="Programa en dBFast modificado para Harbour + Minigui" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-KS1LEuLrLqc/TcFJpXmdxKI/AAAAAAAAAK8/of7I3RWViXw/s72-c/CA_dbFast.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2011/05/programa-en-dbfast-modificado-para.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cMQn87eyp7ImA9WhZRF0k.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-1681052717213091587</id><published>2011-04-11T17:32:00.043-03:00</published><updated>2011-04-13T21:31:23.103-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-13T21:31:23.103-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Contraseña" /><category scheme="http://www.blogger.com/atom/ns#" term="Control de acceso" /><category scheme="http://www.blogger.com/atom/ns#" term="Validación de usuarios" /><title>Validación de usuarios con dBFast</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-VRVa237uJfk/TaNezRge-hI/AAAAAAAAAKA/eUSeA9oiFeI/s1600/copiadeseguridad_chiste.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="308" src="http://3.bp.blogspot.com/-VRVa237uJfk/TaNezRge-hI/AAAAAAAAAKA/eUSeA9oiFeI/s320/copiadeseguridad_chiste.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Uno de los aspectos importantes a considerar durante el desarrollo de una aplicación es la seguridad de la misma. &amp;nbsp;La seguridad de una aplicación abarca diferentes aspectos entre los cuales podemos destacar los siguientes: &amp;nbsp;1) Aspectos relacionados con la prevención de errores de ejecución y "cuelgues" inesperados. &amp;nbsp;2) Aspectos relacionados con evitar la pérdida de información y errores en el proceso de entrada y salida de datos. &amp;nbsp;3) Aspectos relacionados con el control de acceso a los usuarios según su jerarquía o función dentro de la organización.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;El ejemplo que hoy&amp;nbsp;pongo a su disposición tiene que ver con los aspectos relacionados al control de acceso para los usuarios, y presenta una forma bastante simplificada de crear una función que muestre un cuadro de diálogo para ingresar un nombre de usuario y una contraseña. &amp;nbsp;La función también &amp;nbsp;busca el usuario en un archivo de datos y verifica que la contraseña ingresada coincida con la que está almacenada en el sistema.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-5aRtTOTS0Fo/TaNfZkWS08I/AAAAAAAAAKE/O7vSNSwJw_o/s1600/Acceso_Usuarios.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-5aRtTOTS0Fo/TaNfZkWS08I/AAAAAAAAAKE/O7vSNSwJw_o/s200/Acceso_Usuarios.jpg" width="188" /&gt;&lt;/a&gt;&lt;/div&gt;La función &lt;b&gt;ChkUser( ),&lt;/b&gt;&amp;nbsp;encargada del control de acceso a los usuarios devuelve el valor .T. (Verdadero) si el usuario existe y la contraseña es correcta, y devuelve el valor .F. (Falso) si el usuario y/o la contraseña son incorrectos.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;En el caso del ejemplo, la función &lt;b&gt;ChkUser( )&lt;/b&gt; impide al acceso al sistema mientras no se ingrese un nombre de usuario válido y/o una contraseña correcta; si salimos del cuadro de diálogo sin ingresar la información requerida, la función devuelve un valor falso (.F.) y se detiene la ejecución del programa. &amp;nbsp;En cambio, si el valor devuelto es verdadero (.T.), se continúa la ejecución del programa y se muestra la ventana principal de la aplicación maximizada, con su correspondiente menú, fondo verde y con una imagen &amp;nbsp;centrada en la ventana&amp;nbsp;(que puede ser el logo de la empresa).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La aplicación utiliza tres funciones API de Windows que son:&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-eKlkIoO8CSM/TaNf4GKKPxI/AAAAAAAAAKI/YMNAMhktX7I/s1600/api-banner-left.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="144" src="http://3.bp.blogspot.com/-eKlkIoO8CSM/TaNf4GKKPxI/AAAAAAAAAKI/YMNAMhktX7I/s200/api-banner-left.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;FINDWINDOW( )&lt;/b&gt;: Permite buscar una ventana específica y obtener el manejador interno que le asigna Windows, almacenándolo en una variable&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;SHOWWINDOW( )&lt;/b&gt;: Permite mostrar una ventana de diferentes formas utilizando el manejador que obtuvimos mediante la función FINDWINDOW( ). &amp;nbsp;El programa utiliza esta función para maximizar la ventana principal de la aplicación.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;SENDMESSAGE( )&lt;/b&gt;: &amp;nbsp;Esta función se utiliza para indicar a Windows que debe utilizar asteriscos cuando ingresemos datos en un CONTROL EDITBOX específico.&lt;br /&gt;
&lt;br /&gt;
Es posible desplazarse entre los controles utilizando las teclas de dirección o la tecla "TAB".&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A continuación les dejo algunas capturas de la aplicación:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-V2itDZd8lAA/TaNhWmtb47I/AAAAAAAAAKM/xzyVlFuOuS8/s1600/PW_01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="316" src="http://4.bp.blogspot.com/-V2itDZd8lAA/TaNhWmtb47I/AAAAAAAAAKM/xzyVlFuOuS8/s320/PW_01.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-nmMliHJPZlk/TaNhcCB78jI/AAAAAAAAAKQ/vSwS5DU8NkU/s1600/PW_02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="316" src="http://4.bp.blogspot.com/-nmMliHJPZlk/TaNhcCB78jI/AAAAAAAAAKQ/vSwS5DU8NkU/s320/PW_02.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-lAfFdcvKASQ/TaNhidb03QI/AAAAAAAAAKY/6Oz9Qp3-pc8/s1600/PW_03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="316" src="http://2.bp.blogspot.com/-lAfFdcvKASQ/TaNhidb03QI/AAAAAAAAAKY/6Oz9Qp3-pc8/s320/PW_03.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-TLsqLYhBhqE/TaNhgLCB2lI/AAAAAAAAAKU/Hp1qijXI6vk/s1600/PW_04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="316" src="http://2.bp.blogspot.com/-TLsqLYhBhqE/TaNhgLCB2lI/AAAAAAAAAKU/Hp1qijXI6vk/s320/PW_04.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-0fzzcGidvyM/TaNhsEW2cVI/AAAAAAAAAKc/lOgVDtN6-8s/s1600/PW_05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://1.bp.blogspot.com/-0fzzcGidvyM/TaNhsEW2cVI/AAAAAAAAAKc/lOgVDtN6-8s/s400/PW_05.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-hmslwLJuPNk/TaNhx46Af0I/AAAAAAAAAKg/PnsL4iZtKJA/s1600/PW_06.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-hmslwLJuPNk/TaNhx46Af0I/AAAAAAAAAKg/PnsL4iZtKJA/s400/PW_06.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;En lo personal, al crear una aplicación que inicia solicitando un nombre de usuario y una clave de acceso, modifico el archivo "&lt;b&gt;miaplicacion.ini&lt;/b&gt;" que debe ir en la carpeta "&lt;b&gt;Windows&lt;/b&gt;", y en los parámetros relacionados con la ubicación de la ventana, establezco la posición de la ventana principal en las coordenadas (1,1), y los parámetros que manejan el alto y el ancho de la ventana, también los establezco en 1, de tal modo que la ventana principal de la aplicación queda oculta y solo se ve la ventana que solicita el usuario y la password. &amp;nbsp;Si no se ingresan datos de un usuario válido y se finaliza la aplicación, la ventana principal nunca llega a mostrarse en la pantalla, por el contrario, si ingresamos un usuario válido, la ventana principal que se ha mantenido oculta se muestra maximizada. &amp;nbsp;A modo de ejemplo les dejo el archivo WINSGCOM.INI correspondiente a un sistema de gestión comercial que desarrollé con dBFast.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-tl_HihL793s/TaY-GmTim0I/AAAAAAAAAKk/jQZ3AMBCDAE/s1600/miapp_ini.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-tl_HihL793s/TaY-GmTim0I/AAAAAAAAAKk/jQZ3AMBCDAE/s1600/miapp_ini.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;Los parámetros "&lt;b&gt;windowx&lt;/b&gt;" y "&lt;b&gt;windowy&lt;/b&gt;" permiten establecer la posición inicial de la ventana, y los parámetros&amp;nbsp;"&lt;b&gt;windowcx&lt;/b&gt;" y "&lt;b&gt;windowcy&lt;/b&gt;", el alto y el ancho de la ventana respectivamente.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pueden descargar el ejemplo directamente desde &lt;a href="http://www.megaupload.com/?d=DTRT5SO9"&gt;MEGAUPLOAD&lt;/a&gt;:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Enlace de Descarga:&amp;nbsp;&lt;a href="http://www.megaupload.com/?d=DTRT5SO9"&gt;http://www.megaupload.com/?d=DTRT5SO9&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OBS: &amp;nbsp;Tanto el nombre de usuario como la clave son "&lt;b&gt;admin&lt;/b&gt;", todo en minúsculas y por supuesto, sin comillas.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-1681052717213091587?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zJdj-WeZnBYe5L5dKoaUdQi5lOw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zJdj-WeZnBYe5L5dKoaUdQi5lOw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zJdj-WeZnBYe5L5dKoaUdQi5lOw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zJdj-WeZnBYe5L5dKoaUdQi5lOw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/7hoQGVuVMPk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/1681052717213091587/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2011/04/validacion-de-usuarios-con-dbfast.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/1681052717213091587?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/1681052717213091587?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/7hoQGVuVMPk/validacion-de-usuarios-con-dbfast.html" title="Validación de usuarios con dBFast" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-VRVa237uJfk/TaNezRge-hI/AAAAAAAAAKA/eUSeA9oiFeI/s72-c/copiadeseguridad_chiste.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2011/04/validacion-de-usuarios-con-dbfast.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcFR308eyp7ImA9Wx9aF0Q.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-9126067830240471946</id><published>2011-03-09T22:18:00.004-03:00</published><updated>2011-03-10T18:36:56.373-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-10T18:36:56.373-03:00</app:edited><title>Imágenes JPG, GIF, PNG y otros en dBFast</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-3Wrncv9qHnA/TXgUlqm3CUI/AAAAAAAAAJM/MTC_e1vE3pw/s1600/dBFast_Imagenes.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="https://lh6.googleusercontent.com/-3Wrncv9qHnA/TXgUlqm3CUI/AAAAAAAAAJM/MTC_e1vE3pw/s200/dBFast_Imagenes.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; line-height: 16px;"&gt;En el artículo anterior quedó claro que una de las grandes limitaciones de dBFast radica en la escasa posibilidad de manipular imágenes y que solo reconoce archivos en formato BMP. &amp;nbsp;También quedó claro que dBFast solo dispone de un set de instrucciones muy básicas para el manejo de imágenes, lo cual es una limitante a la hora de desarrollar aplicaciones que requieren un manejo gráfico más sofisticado.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; line-height: 16px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Entonces las dos preguntas más recurrentes que nos hemos hecho todos en algún momento con respecto al tratamiento de imágenes son las siguientes:&lt;/span&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;¿Será posible alguna vez manipular imágenes JPG, GIF, PNG u otros formatos desde dBFast?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;¿Podremos algún día manipular el tamaño de una imagen para adaptarla a una ventana?.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Hasta ahora la respuesta a estas dos preguntas ha sido un &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;rotundo &lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;¡&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;NO&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;!. &amp;nbsp;Es un hecho que dBFast no puede ni podrá manipular otro formato gráfico que no sea el tradicional BMP y esa es la triste y cruda realidad.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-70BZFM0ywz0/TXgVEDXatyI/AAAAAAAAAJQ/GIbmvFuMYy0/s1600/pensar.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="158" src="https://lh3.googleusercontent.com/-70BZFM0ywz0/TXgVEDXatyI/AAAAAAAAAJQ/GIbmvFuMYy0/s200/pensar.jpg" width="200" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Sin embargo, en mis años de programador he aprendido que lo que no se puede hacer, se puede emular, y si el lenguaje de programación que utilizamos no posee la herramienta adecuada para realizar un determinado trabajo, debemos buscar una herramienta externa que nos permita hacerlo sin que el usuario lo note. &amp;nbsp;No por nada el lema de este Blog dice que "&lt;b&gt;la mejor herramienta de programación es el ingenio del programador&lt;/b&gt;", y el segundo lema sería "&lt;b&gt;no importa como se haga la implementación de una aplicación, siempre y cuando su funcionamiento sea transparente para el usuario&lt;/b&gt;", Y cuando no tenemos alternativas podemos utilizar este otro: "&lt;b&gt;si no podemos alcanzar la eficiencia, debemos apostar por la eficacia&lt;/b&gt;".&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Bajo estas premisas, me veo en la obligación de decirles que &lt;b&gt;SI es posible manipular imágenes JPG, GIF, PNG, PCX, TIFF y muchos otros formatos desde dBFast&lt;/b&gt;. &amp;nbsp;No, no estoy borracho ni drogado, para ser más exacto debería decir que podemos "&lt;b&gt;hacer como&lt;/b&gt;&amp;nbsp;&lt;b&gt;que&lt;/b&gt;" dBfast puede trabajar con otros formatos gráficos, o como mencionaba más arriba, podemos "&lt;b&gt;emular&lt;/b&gt;" el tratamiento de otros formatos gráficos desde dBFast.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;¿Y cómo hacemos semejante acto de magia?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Tal como explicaba antes, buscando una aplicación externa que haga el trabajo por dBFast sin que el usuario lo note.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;¿Y cual es entonces el ingrediente mágico?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;El ingrediente mágico es el programa &lt;a href="http://www.irfanview.com/"&gt;&lt;b&gt;IRFANVIEW&lt;/b&gt;&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;IRFANVIEW &lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;es un potente, rápido, pequeño e innovador programa de edición gráfica que lleva ya varios años en el mercado, y que tiene tres grandes atributos para los programadores que trabajan en dBFast.&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-gkskVm-grD8/TXgVaEryqHI/AAAAAAAAAJU/DOnc0IMgAA8/s1600/IrfanView_caja.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="200" src="https://lh3.googleusercontent.com/-gkskVm-grD8/TXgVaEryqHI/AAAAAAAAAJU/DOnc0IMgAA8/s200/IrfanView_caja.jpg" width="123" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;ol&gt;&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Primero que todo, al igual que dBFast, IrfanView funciona con Windows 9x, ME, 2000, 2003, 2008, Vista y Windows 7.&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;En segundo lugar y no menos importante para nosotros, &lt;b&gt;es gratuito&lt;/b&gt;, aunque creo que el creador se merece con creces nuestro aporte.&lt;/span&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;En tercer lugar, y lo más importante para el tema que nos interesa, es que lo podemos utilizar en modalidad de &lt;b&gt;línea de comandos&lt;/b&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;span class="Apple-style-span" style="background-color: black; color: #666666; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Como ven, estas tres características convierten a &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;IRFANVIEW &lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;en el complemento ideal para delegarle el trabajo que dBFast no puede hacer.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Utilizando &lt;b&gt;IRFANVIEW &lt;/b&gt;en modo de línea de comandos, podemos redimensionar una imagen, cambiar su formato, imprimirla, mostrar una presentación de fotografías, obtener imágenes desde un scanner y muchas cosas más que pueden ver en &amp;nbsp;la excelente página argentina dedicada a IRFANVIEW:&amp;nbsp;&lt;a href="http://iv.atspace.org/pages/hlp_command_line.html"&gt;http://iv.atspace.org/pages/hlp_command_line.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;El truco entonces resulta bastante sencillo. &amp;nbsp;Al igual que en el ejemplo del artículo anterior, podemos explorar las imágenes de una carpeta usando un arreglo y la función ADIR(), luego utilizamos IRFANVIEW para convertir la imagen seleccionada desde su formato original (JPG, GIF, PNG, etc.) en un archivo BMP temporal, y lo redimensionamos para que se ajuste al tamaño de la ventana de previsualización. &amp;nbsp;Para finalizar cargamos el BMP temporal en una variable, lo desplegamos, y ya tenemos una vista previa de un archivo que no es BMP.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Acá les dejo algunas capturas de la implementación:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-zpiBz63N2gk/TXgf0oSFtqI/AAAAAAAAAJY/IFtBRDMgMQc/s1600/Ejemplo_Imagenes_01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="211" src="https://lh4.googleusercontent.com/-zpiBz63N2gk/TXgf0oSFtqI/AAAAAAAAAJY/IFtBRDMgMQc/s320/Ejemplo_Imagenes_01.jpg" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-ce_fmydotTc/TXgf8VCig_I/AAAAAAAAAJc/EYZcGaC5sTc/s1600/Ejemplo_Imagenes_02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="266" src="https://lh4.googleusercontent.com/-ce_fmydotTc/TXgf8VCig_I/AAAAAAAAAJc/EYZcGaC5sTc/s320/Ejemplo_Imagenes_02.jpg" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-Z42hsrY7M70/TXggJu3FcSI/AAAAAAAAAJg/xAA-gr6t0n4/s1600/Ejemplo_Imagenes_03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="223" src="https://lh4.googleusercontent.com/-Z42hsrY7M70/TXggJu3FcSI/AAAAAAAAAJg/xAA-gr6t0n4/s320/Ejemplo_Imagenes_03.jpg" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-PFM0gg7Pu6Y/TXggS5xi4VI/AAAAAAAAAJk/QqtBgNOlsA8/s1600/Ejemplo_Imagenes_04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="265" src="https://lh6.googleusercontent.com/-PFM0gg7Pu6Y/TXggS5xi4VI/AAAAAAAAAJk/QqtBgNOlsA8/s320/Ejemplo_Imagenes_04.jpg" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-xYRB3_a6Z_4/TXggfO3Zs2I/AAAAAAAAAJo/JdzH2uLYIrQ/s1600/Ejemplo_Imagenes_07.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="206" src="https://lh6.googleusercontent.com/-xYRB3_a6Z_4/TXggfO3Zs2I/AAAAAAAAAJo/JdzH2uLYIrQ/s320/Ejemplo_Imagenes_07.jpg" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-bu9M5X4G7NI/TXghuMJk5DI/AAAAAAAAAJs/MoZlQoGjscc/s1600/Ejemplo_Imagenes_05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="266" src="https://lh5.googleusercontent.com/-bu9M5X4G7NI/TXghuMJk5DI/AAAAAAAAAJs/MoZlQoGjscc/s320/Ejemplo_Imagenes_05.jpg" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-71GuD70-pj4/TXgiE-8wzjI/AAAAAAAAAJw/Vs9iI3cLs34/s1600/Ejemplo_Imagenes_06.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="200" src="https://lh4.googleusercontent.com/-71GuD70-pj4/TXgiE-8wzjI/AAAAAAAAAJw/Vs9iI3cLs34/s320/Ejemplo_Imagenes_06.jpg" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-MyLj7WMDhRU/TXgiL0p3_MI/AAAAAAAAAJ0/8s1wGK4YKlE/s1600/Ejemplo_Imagenes_08.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="266" src="https://lh3.googleusercontent.com/-MyLj7WMDhRU/TXgiL0p3_MI/AAAAAAAAAJ0/8s1wGK4YKlE/s320/Ejemplo_Imagenes_08.jpg" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-871kV1xOGoI/TXgiTTcZASI/AAAAAAAAAJ4/TEgYIxnK8uk/s1600/Ejemplo_Imagenes_09.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="266" src="https://lh3.googleusercontent.com/-871kV1xOGoI/TXgiTTcZASI/AAAAAAAAAJ4/TEgYIxnK8uk/s320/Ejemplo_Imagenes_09.jpg" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-a66LR4WVD3U/TXgiYX97ddI/AAAAAAAAAJ8/NitP6V3KPlg/s1600/Ejemplo_Imagenes_10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;img border="0" height="266" src="https://lh5.googleusercontent.com/-a66LR4WVD3U/TXgiYX97ddI/AAAAAAAAAJ8/NitP6V3KPlg/s320/Ejemplo_Imagenes_10.jpg" width="320" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;A pesar de que creo que varios de ustedes ya deben conocer las bondades de IRFANVIEW, les dejo un ejemplo de su uso con dBFast. &amp;nbsp;También añado un par de opciones que permiten apreciar parte de lo que IRFANVIEW puede hacer por nosotros, y les aseguro que es difícil darse cuenta de que se está utilizando una aplicación externa para manipular las imágenes.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;OBS&lt;/b&gt;:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;El ejemplo contiene la última versión de IRFANVIEW en español más un PDF con todas las opciones y ejemplos para su uso mediante línea de comandos, &amp;nbsp;IRFANVIEW es portable por naturaleza.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Las carpetas: BMP, GIF, JPG y PNG contienen las imágenes usadas en el ejemplo, la carpeta TMP contiene el archivo temporal que se genera para la vista previa. &amp;nbsp;Todas las demás carpetas pertenecen a IRFANVIEW.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Los Archivos PREIVIEW.PRG,&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;PREIVIEW.OVR, SCRLIB.PRG y DESCRIP.TXT pertenecen al ejemplo, los archivos restantes pertenecen a IRFANVIEW.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Pueden descargar el ejemplo directamente desde &lt;b&gt;&lt;a href="http://www.megaupload.com/?d=SFPS3IHW"&gt;Megaupload&lt;/a&gt;&lt;/b&gt;:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;Enlace de descarga:&amp;nbsp;&lt;a href="http://www.megaupload.com/?d=SFPS3IHW"&gt;http://www.megaupload.com/?d=SFPS3IHW&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Revísenlo y comenten.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;b&gt;PD&lt;/b&gt;:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Se ha corregido un error en la función IMGEXPLORE() detectado en el ejemplo del artículo anterior. &amp;nbsp;En dicho ejemplo, al utilizar la función IMGEXPLORE() no se mostraba la primera imagen por un error en la definición del arreglo:&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: #990000; font-size: large;"&gt;Código del ejemplo anterior:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;***************************************************************************************&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;FUNCTION IMGEXPLORE()&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;PARAMETERS pPath&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;pPath = UPPER(ALLTRIM(pPath))&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;**********************************************&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;* Traspaso de nombres de archivo a un arreglo&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;*&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;DECLARE aImages[ADIR(pPath)+1]&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;ADIR(pPath,@aImages)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;aImages[1] = "" &amp;nbsp;// Esta instrucción reemplaza el primer elemento del arreglo que contiene el nombre de la primera imagen por una cadena vacía &amp;nbsp;///&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;...&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #990000; font-family: Arial, Helvetica, sans-serif; font-size: large;"&gt;Código corregido:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;***************************************************************************************&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;FUNCTION IMGEXPLORE()&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;PARAMETERS pPath&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;pPath = UPPER(ALLTRIM(pPath))&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;nPath = ADIR(pPath)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;**********************************************&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;* Traspaso de nombres de archivo a un arreglo&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;*&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;DECLARE aRecoverFiles[ADIR(pPath)]&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;ADIR(pPath,@aRecoverFiles)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;**********************************************&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;* Traspaso de Nombres de archivo al arreglo&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;* que se usará para la visualización de&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;* longitud nElementos + 1&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;*&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;DECLARE aImages[ADIR(pPath)+1]&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;aImages[1] = ""&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;ACOPY(@aRecoverFiles,@aImages,1,nPath,2)&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;...&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-9126067830240471946?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/buWYy-JTX7o_L8T9DbsNq-XyubY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/buWYy-JTX7o_L8T9DbsNq-XyubY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/buWYy-JTX7o_L8T9DbsNq-XyubY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/buWYy-JTX7o_L8T9DbsNq-XyubY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/voLilIv3-Vw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/9126067830240471946/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2011/03/imagenes-jpg-gif-png-y-otros-en-dbfast.html#comment-form" title="4 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/9126067830240471946?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/9126067830240471946?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/voLilIv3-Vw/imagenes-jpg-gif-png-y-otros-en-dbfast.html" title="Imágenes JPG, GIF, PNG y otros en dBFast" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh6.googleusercontent.com/-3Wrncv9qHnA/TXgUlqm3CUI/AAAAAAAAAJM/MTC_e1vE3pw/s72-c/dBFast_Imagenes.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2011/03/imagenes-jpg-gif-png-y-otros-en-dbfast.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAGRX88fyp7ImA9Wx9aE00.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-4817577155990331902</id><published>2011-03-05T01:35:00.003-03:00</published><updated>2011-03-05T01:52:04.177-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-05T01:52:04.177-03:00</app:edited><title>Exploradores de Imágenes con Vista Previa</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-qsiFGz1iTeA/TXG7lGQG6MI/AAAAAAAAAI8/3s2hhlrnNoU/s1600/Blog_000.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="128" src="https://lh4.googleusercontent.com/-qsiFGz1iTeA/TXG7lGQG6MI/AAAAAAAAAI8/3s2hhlrnNoU/s200/Blog_000.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Después de casi 4 meses sin dedicarle tiempo al Blog, decidí echar un vistazo para ver que tal iba la cosa, pues a pesar de que de tanto en tanto miraba para ver si había algún nuevo comentario, que para mi sorpresa los hubo, o revisaba el foro de dBFast en la web del programador, no había vuelto a entrar como administrador, y si lo había hecho, había sido de manera rápida solo como para alivianar un poco la conciencia.&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;a href="https://lh4.googleusercontent.com/-DHIADvY-2ms/TXG754vfkRI/AAAAAAAAAJA/jKeASET3ahA/s1600/Blog_001.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="https://lh4.googleusercontent.com/-DHIADvY-2ms/TXG754vfkRI/AAAAAAAAAJA/jKeASET3ahA/s1600/Blog_001.jpg" /&gt;&lt;/a&gt;Hoy sin embargo, decidí ver qué pasaba en realidad y me encontré con dos gratas sorpresas.&amp;nbsp; La primera es que a pesar de los largos periodos de inactividad, el Blog, a la hora que escribo esto, registra 4.123 visitas de lugares tan diversos como España (gracias amigo Ramón), Mexico, Perú, Argentina, Colombia, Ecuador, Costa Rica, Brasil, Italia, etc. etc. etc.&amp;nbsp; Es decir,&amp;nbsp; nada mal para un Blog&amp;nbsp; orientado a una comunidad pequeña y dedicado a un lenguaje de programación que muchos consideran descontinuado y obsoleto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="https://lh6.googleusercontent.com/-09zO3BOBLL8/TXG8uk_2T4I/AAAAAAAAAJI/wcXXA_zD3BU/s1600/Blog_003.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="208" src="https://lh6.googleusercontent.com/-09zO3BOBLL8/TXG8uk_2T4I/AAAAAAAAAJI/wcXXA_zD3BU/s400/Blog_003.jpg" width="400" /&gt;&lt;/a&gt;La otra sorpresa que me llevé, es que por lo menos en Chile, al escribir "dbfast" en la casilla de búsqueda de Google, "&lt;b&gt;dBFast - Chile&lt;/b&gt;" aparece en el primer lugar, y esto, sin dedicar ningún esfuerzo a ello ni habérmelo propuesto en ningún momento como meta.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
En virtud de estos acontecimientos, y a pesar de que la intensa carga laboral que impone lidiar con Visual Studio.Net (si amigos, en eso estoy), con VB.Net, ASPX y ORACLE, siento que vale la pena sacrificar un par de horas de sueño para retribuir la atención y el interés que ustedes me han brindado, y quien sabe, tal vez convertir el Blog en un espacio para que cada programador pueda internacionalizar sus programas, compartiendo también parte de sus conocimientos en beneficio de todos.&amp;nbsp; Espero también poder conocer de manera más cercana, aunque sea digitalmente a quienes han tenido la gentileza de apuntarse como seguidores (7 a la fecha), pues la vida pasa rápido y tendemos a no prestarle mucha atención a las personas que se cruzan en nuestras vidas.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-lxXTeWvL8hU/TXG8IAprATI/AAAAAAAAAJE/B2h0-ZLwaiw/s1600/Blog_002.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="312" src="https://lh5.googleusercontent.com/-lxXTeWvL8hU/TXG8IAprATI/AAAAAAAAAJE/B2h0-ZLwaiw/s400/Blog_002.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Exploradores de imágenes con Vista Previa&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Bueno, por ahora basta de&amp;nbsp; reflexiones y divagaciones, y como dijo el dermatólogo, vamos al grano.&amp;nbsp; Creo que en algún momento les ofrecí un par de rutinas para manipular imágenes y eso es lo que traigo hoy.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Como ya saben todos quienes han trabajado en dBFast, una de las grandes limitaciones de esta herramienta es la escasa posibilidad de manipular imágenes.&amp;nbsp; dBFast solo reconoce archivos BMP (mapas de bit), que por cierto no se caracterizan por ser los más pequeños, y tampoco dispone de instrucciones o funciones que nos permitan manejar sus propiedades.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Sin embargo, y como una aplicación para Windows no puede preciarse de tal sin incluir imágenes, quiero compartir con ustedes dos funciones que creé buscando la forma de que los usuarios de mis programas pudieran incorporar sus logos o imágenes propias para personalizar la interfaz de trabajo de sus respectivas aplicaciones.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;El primer problema que tuve que enfrentar, era que muchas veces el el usuario o el cliente no recordaba el nombre de la imagen que quería utilizar, y me planteaban la posibilidad de tener una vista previa de las imágenes sin tener que utilizar herramientas externas.&amp;nbsp; Pero ¿y qué hacer con aquellas imágenes que eran muy grandes para acomodarlas a la interfaz de trabajo? ¿cómo haría la vista previa si no contaba con las herramientas para confinar la imagen solo a una porción la pantalla, a un objeto o para reducir sus dimensiones?.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Finalmente, encontré la solución de la misma manera en que la encontré para la creación de solapas (TAB BUTTONS), pues a quienes nos formamos programando aplicaciones para DOS se nos olvida que la base del funcionamiento de Windows son la ventanas. En ambos ejemplos creé una ventana principal para la aplicación, dentro de ella creé el o los objetos que permiten buscar y listar las imágenes, e incorporé una ventana anidada (hija) o CHILD WINDOW en la cual mostraría la imagen, de esa manera, para ver las diferentes imágenes solo debía limpiar y actualizar la ventana hija.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Pero ¿como mostraría aquellas imágenes que fueran más grandes que la ventana destinada a la vista previa si dBFast no me permite manipular las dimensiones de salida de una imagen para adaptarlas a un objeto o contenedor?&amp;nbsp; La solución era más fácil de lo que pensaba, puse dos barras de desplazamiento o SCROLL BARS, una vertical y otra horizontal junto a la ventana de la vista previa, de modo que al desplazarse sobre ellas se fuera desplazando la imagen dentro de la ventana, quizás no es lo óptimo, pero el resultado es aceptable.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;A continuación les dejo algunas capturas de la ejecución del programa "PREVIEW.PRG" para que puedan apreciar de qué hablo:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-SXeWNIfAaSE/TXGuXgSSYmI/AAAAAAAAAIo/wIAemUv_5Qo/s1600/Img_001.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="251" src="https://lh6.googleusercontent.com/-SXeWNIfAaSE/TXGuXgSSYmI/AAAAAAAAAIo/wIAemUv_5Qo/s400/Img_001.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Ventana principal de la aplicación&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-qUeQB5Byfrg/TXGvmyHGxvI/AAAAAAAAAIs/ma8ARoEB0Dk/s1600/Img_002.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="230" src="https://lh3.googleusercontent.com/-qUeQB5Byfrg/TXGvmyHGxvI/AAAAAAAAAIs/ma8ARoEB0Dk/s400/Img_002.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Imagen seleccionada - Ejemplo1&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-hqNYJMmHA-A/TXGv2ad1DcI/AAAAAAAAAIw/vkGhZ5XRjuM/s1600/Img_003.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="230" src="https://lh4.googleusercontent.com/-hqNYJMmHA-A/TXGv2ad1DcI/AAAAAAAAAIw/vkGhZ5XRjuM/s400/Img_003.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Imagen seleccionada y uso de barras de desplazamiento para ver la parte oculta de la imagen - Ejemplo 1&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-oDAcA_5M6wI/TXGxKmQJP6I/AAAAAAAAAI0/x6j5e2ffbZ0/s1600/Img_004.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="245" src="https://lh5.googleusercontent.com/-oDAcA_5M6wI/TXGxKmQJP6I/AAAAAAAAAI0/x6j5e2ffbZ0/s400/Img_004.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Imagen seleccionada - Ejemplo 2&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-c7fLV73b7dA/TXGxXxNcKSI/AAAAAAAAAI4/lyr5rpQGBRI/s1600/Img_005.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="245" src="https://lh5.googleusercontent.com/-c7fLV73b7dA/TXGxXxNcKSI/AAAAAAAAAI4/lyr5rpQGBRI/s400/Img_005.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Imagen seleccionada en carpeta "Fotos" y uso de barras de desplazamiento para ver la parte oculta de la imagen - Ejemplo 2&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
Archivos incluidos en la descarga:&amp;nbsp; &lt;b&gt;PREVIEW.PRG&lt;/b&gt; (Programa principal), &lt;b&gt;SCRLIB.PRG&lt;/b&gt; (Biblioteca de funciones), &lt;b&gt;EVENTS.INC&lt;/b&gt; (Archivo con definiciones de eventos), &lt;b&gt;DESCRIP.TXT&lt;/b&gt; (Texto con descripción de la aplicación para mostrar en ventana principal del programa), y varios archivos de imagen .BMP &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;Pueden descargar el programa directamente desde &lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.megaupload.com/?d=A6X6TBS0"&gt;Megaupload&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Enlace de descarga: &lt;a href="http://www.megaupload.com/?d=A6X6TBS0"&gt;http://www.megaupload.com/?d=A6X6TBS0&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-4817577155990331902?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZmCGJkUTVF2c2YvImJ18CsavfhA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZmCGJkUTVF2c2YvImJ18CsavfhA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZmCGJkUTVF2c2YvImJ18CsavfhA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZmCGJkUTVF2c2YvImJ18CsavfhA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/t2HcDvpCja8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/4817577155990331902/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2011/03/exploradores-de-imagenes-con-vista.html#comment-form" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/4817577155990331902?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/4817577155990331902?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/t2HcDvpCja8/exploradores-de-imagenes-con-vista.html" title="Exploradores de Imágenes con Vista Previa" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh4.googleusercontent.com/-qsiFGz1iTeA/TXG7lGQG6MI/AAAAAAAAAI8/3s2hhlrnNoU/s72-c/Blog_000.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2011/03/exploradores-de-imagenes-con-vista.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEARH88cCp7ImA9Wx5aEUU.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-3285606901589329781</id><published>2010-11-08T00:41:00.003-03:00</published><updated>2010-11-08T00:57:25.178-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-08T00:57:25.178-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Instalador RPV Printing System" /><category scheme="http://www.blogger.com/atom/ns#" term="RPV Printing System 2.2" /><title>Instalador RPV Printing System 2.2 en español</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_PMQWqZl1K78/TNd0YmG5XvI/AAAAAAAAAIc/JgePaogARM0/s1600/rpv-printing-system-pro-s.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_PMQWqZl1K78/TNd0YmG5XvI/AAAAAAAAAIc/JgePaogARM0/s1600/rpv-printing-system-pro-s.gif" /&gt;&lt;/a&gt;&lt;/div&gt;Buscando otra cosa, encontré casualmente en &lt;a href="http://www.archivospc.com/"&gt;http://www.archivospc.com&lt;/a&gt;, el instalador de RPV Printing 2.2 también en versión FREE.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A pesar de que el generador de informes incluido con dBFast, CA-RET es bastante potente y versátil, no está demás echarle un vistazo a RPV, pues esta mezcla de lenguaje y aplicación para la generación de informes tiene algunas características bien interesantes.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como dato les puedo decir que tuve algunos problemas para que RPV funcionara correctamente en Windows Vista y Windows 7, pero actualmente y con las actualizaciones de Windws 7, me funciona a la perfección. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pueden descargar esta aplicación desde la sección "&lt;a href="http://dbfastchile.blogspot.com/p/recursos.html"&gt;Recursos&lt;/a&gt;" del Blog.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Saludos,&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;b&gt;RODRIGO DINAMARCA&lt;/b&gt;&lt;b&gt; M.&lt;/b&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-3285606901589329781?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/L6OfQf2opwul_IUZAGjz5NPSnTo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L6OfQf2opwul_IUZAGjz5NPSnTo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/L6OfQf2opwul_IUZAGjz5NPSnTo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L6OfQf2opwul_IUZAGjz5NPSnTo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/95TrpDJmjkc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/3285606901589329781/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2010/11/instalador-rpv-printing-system-22.html#comment-form" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/3285606901589329781?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/3285606901589329781?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/95TrpDJmjkc/instalador-rpv-printing-system-22.html" title="Instalador RPV Printing System 2.2 en español" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_PMQWqZl1K78/TNd0YmG5XvI/AAAAAAAAAIc/JgePaogARM0/s72-c/rpv-printing-system-pro-s.gif" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2010/11/instalador-rpv-printing-system-22.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IBQ3o-eip7ImA9Wx5aEUU.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-8961754242244369145</id><published>2010-11-07T20:28:00.002-03:00</published><updated>2010-11-08T01:12:32.452-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-08T01:12:32.452-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dBFast y Windows 64 bits" /><title>El Futuro de dBFast  en las tecnologías de 64 bits</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMQWqZl1K78/TNcyvbgylDI/AAAAAAAAAII/7gduhM0WCUs/s1600/CA_dbFast.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/_PMQWqZl1K78/TNcyvbgylDI/AAAAAAAAAII/7gduhM0WCUs/s200/CA_dbFast.jpg" width="155" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Hola a todos, ha pasado bastante tiempo desde el último post, que para colmo era una corrección del post anterior. &amp;nbsp; La verdad es que he tenido bastante trabajo y no he podido dedicarme al Blog, por eso, y porque me siento un poco en deuda, quiero exponer algunas reflexiones respecto al futuro de dBFast, y no solo de dBFast, sino también de las herramientas de desarrollo que permiten a aquellos que comenzamos programando aplicaciones para DOS, generar aplicaciones para Windows en herramientas de 16 bits.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Hace un tiempo, Ramón Denuc, uno de los desarrolladores emblemáticos de dBFast en España, y que siempre ha estado dispuesto a compartir sus experiencias y conocimientos con el resto de nosotros a través del foro de dBFast en la web del programador, me preguntaba si había intentado ejecutar alguna aplicación hecha con dBFast en algún Windows de 64 bits.&amp;nbsp; La verdad es que, a pesar tener equipos con procesadores de 64 bits, utilizo Windows 7 Ultimate de 32 bits, y siempre he utilizado Sistemas Operativos de 32 bits.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Como la pregunta de Ramón me pareció bastante lógica, pues encierra una preocupación que deberíamos tener todos los que utilizamos alguna herramienta de 16 bits, me puse a investigar y la respuesta más coherente la encontré en un foro de consulta de Microsoft del cual les dejo el enlace:&amp;nbsp; &lt;a href="http://social.technet.microsoft.com/Forums/es-ES/wcvistaes/thread/a5fc4e7d-e369-43e4-9fa3-034ee007cee8"&gt;http://social.technet.microsoft.com/Forums/es-ES/wcvistaes/thread/a5fc4e7d-e369-43e4-9fa3-034ee007cee8&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PMQWqZl1K78/TNczWvp2IUI/AAAAAAAAAIM/1wIm8Owqrjk/s1600/amd-athlon-64bits.bmp" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/_PMQWqZl1K78/TNczWvp2IUI/AAAAAAAAAIM/1wIm8Owqrjk/s200/amd-athlon-64bits.bmp" width="192" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En este foro se indica que un Windows de 64 bits, bajo un procesador de 64 bits, no puede ejecutar aplicaciones de 16 bits porque la arquitectura del procesador no se lo permite.&amp;nbsp; Sin embargo, esto dependerá del modo en el cual trabaja el procesador, entendiéndose que al instalar un S.O. de 64 bits, el procesador en forma automática usará el "Long Mode", el cual, aunque se utilice en modo de compatibilidad, ejecutará aplicaciones de 32 bits pero nunca de16 bits.&amp;nbsp; Por otra parte, si instalamos un S.O. de 32 bits en el procesador de 64 bits, este funcionará en "Legacy Mode", lo cual será igual a tener un procesador de 32 bits aunque con mejoras en el rendimiento y nos permitirá ejecutar aplicaciones de 16 bits.&amp;nbsp; &lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: left;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMQWqZl1K78/TNcziPP5RWI/AAAAAAAAAIQ/m4lUvkFAqc8/s1600/windows7-logotipo-2009020313063111.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="173" src="http://1.bp.blogspot.com/_PMQWqZl1K78/TNcziPP5RWI/AAAAAAAAAIQ/m4lUvkFAqc8/s200/windows7-logotipo-2009020313063111.jpg" width="200" /&gt;&lt;/a&gt;Pero, ¿y que se espera de Windows en el Futuro?&amp;nbsp;&amp;nbsp; A pesar de que el fracaso de Windows Vista nos hizo pensar que las cosas se mantendrían estables durante un buen tiempo, el éxito que ha logrado Windows 7, sobre el cual funcionan sin problema nuestras aplicaciones hechas en dBFast si debería preocuparnos un poco,&amp;nbsp; pues existen rumores de que Windows 7 será el último S.O. de Microsoft que soportará arquitecturas de 32 bits y por lo tanto, el último en ser compatible con aplicaciones de 16 bits de forma nativa.&amp;nbsp; Si a esto le sumamos los rumores que plantean que Microsoft también abandonará Foxpro, que hasta hoy ha sido su herramienta de desarrollo xBase emblemática, podemos deducir que con la salida de Bill Gates, la compañía ha decidido dar un brusco vuelco en su estrategia de negocios, apostando fuertemente por las herramientas de desarrollo .NET y por las tecnologías WEB.&lt;/div&gt;&lt;br /&gt;
Pero no podemos culpar a Microsoft por este tipo de decisiones pues están enfocando su apuesta hacia las tendencias que marca el avance de la tecnología.&amp;nbsp; Por su parte, el extraordinario avance en el desarrollo de microprocesadores logrado por INTEL y AMD avalan esta lógica.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMQWqZl1K78/TNc0vzvg2rI/AAAAAAAAAIU/pAggvxNz5j8/s1600/64-bits.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="198" src="http://1.bp.blogspot.com/_PMQWqZl1K78/TNc0vzvg2rI/AAAAAAAAAIU/pAggvxNz5j8/s200/64-bits.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En lo personal creo que el próximo S.O. de Microsoft tendrá versiones de 32 y 64 bits al igual que Windows 7, principalmente porque la capacidad de aprovechamiento que los usuarios tienen de las nuevas tecnologías no va a la par de sus avances, y que por lo tanto, a nuestras aplicaciones aún les queda vida por delante.&amp;nbsp; No obstante, debemos ser conscientes de que somos los dinosaurios de la programación, y que hasta ahora hemos logrado sortear con éxito los riesgos de la extinción, y aunque existan alternativas como las máquinas virtuales y los emuladores que nos permitirán prolongar la existencia de nuestros programas, solo estamos retrasando el proceso creando una isla jurásica en el mar de la modernidad. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;bueno amigos, en todo caso, mientras eso no ocurra, seguiré desarrollando aplicaciones en dBFast, y en una de esas, siguen funcionando en tecnologías de 64, 128, y chorrocientos mil bits.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/TNc2J3MEGII/AAAAAAAAAIY/SkIC_D_ZT9c/s1600/pleobigiy8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="172" src="http://2.bp.blogspot.com/_PMQWqZl1K78/TNc2J3MEGII/AAAAAAAAAIY/SkIC_D_ZT9c/s320/pleobigiy8.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Les dejo también el siguiente artículo para que lo revisen: &lt;a href="http://culturacion.com/etiqueta/64-bits/"&gt;http://culturacion.com/etiqueta/64-bits&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Saludos,&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;RODRIGO DINAMARCA M.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-8961754242244369145?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0SfY3e2u4fT5V6U9KFWkx2Ap7T0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0SfY3e2u4fT5V6U9KFWkx2Ap7T0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0SfY3e2u4fT5V6U9KFWkx2Ap7T0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0SfY3e2u4fT5V6U9KFWkx2Ap7T0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/g4sZ8zuC7oQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/8961754242244369145/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2010/11/el-futuro-de-dbfast-en-las-tecnologias.html#comment-form" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/8961754242244369145?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/8961754242244369145?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/g4sZ8zuC7oQ/el-futuro-de-dbfast-en-las-tecnologias.html" title="El Futuro de dBFast  en las tecnologías de 64 bits" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_PMQWqZl1K78/TNcyvbgylDI/AAAAAAAAAII/7gduhM0WCUs/s72-c/CA_dbFast.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2010/11/el-futuro-de-dbfast-en-las-tecnologias.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAFSHc4eyp7ImA9Wx5UFEg.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-1788185407641155627</id><published>2010-10-18T23:48:00.001-03:00</published><updated>2010-10-18T23:51:59.933-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-18T23:51:59.933-03:00</app:edited><title>Error detectado en Artículo: Uso de solapas para administrar archivos de datos en una interfaz basada en CONTROL BROWSE y PICTURE BUTTONS</title><content type="html">&lt;div style="text-align: justify;"&gt;Hola a todos, para aquellos que hayan descargado la aplicación de ejemplo incluida en el artículo: "&lt;b&gt;Uso de solapas para administrar varios archivos de datos en una interfaz basada  en CONTROL BROWSE y PICTURE BUTTON&lt;/b&gt;", les informo que existe un error en la función &lt;b&gt;ADDMODIFY( )&lt;/b&gt;, la cual controla la creación de nuevos registros y la modificación de los ya existentes.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;El error está en las líneas de código encargadas de desplegar los botones "&lt;b&gt;Aceptar&lt;/b&gt;" y "&lt;b&gt;Cancelar&lt;/b&gt;", pues donde dice:&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: x-small;"&gt;CREATE PICTURE BUTTON "Aceptar"&amp;nbsp; AT nWAMAlto-1,nWAMAncho-24 FROM FILE &lt;span style="color: red;"&gt;\BYP\GUI\&lt;/span&gt;&lt;span style="color: blue;"&gt;ACEPTAR.BMP&lt;/span&gt;&lt;br /&gt;
CREATE PICTURE BUTTON "Cancelar" AT nWAMAlto-1,nWAMAncho-12 FROM FILE &lt;/span&gt;&lt;/b&gt;&lt;b style="color: red;"&gt;&lt;span style="font-size: x-small;"&gt;\BYP\GUI\&lt;/span&gt;&lt;/b&gt;&lt;b style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;CANCELAR.BMP&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Debería decir solamente:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: x-small;"&gt;CREATE PICTURE BUTTON "Aceptar"&amp;nbsp; AT nWAMAlto-1,nWAMAncho-24 FROM FILE &lt;span style="color: blue;"&gt;ACEPTAR.BMP&lt;/span&gt;&lt;br /&gt;
CREATE PICTURE BUTTON "Cancelar" AT nWAMAlto-1,nWAMAncho-12 FROM FILE &lt;/span&gt;&lt;/b&gt;&lt;b style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;CANCELAR.BMP&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;La ruta especificada &lt;b&gt;&lt;span style="color: red;"&gt;"\BYP\GUI\"&lt;/span&gt;&lt;/b&gt;, corresponde a la ubicación de los archivos de imagen utilizados como botones en la aplicación original desde la cual se extrajo el ejemplo, &lt;b style="color: red;"&gt;y no existe en la carpeta del ejemplo&lt;/b&gt;, lo cual provocará un error al compilar, o bien, al tratar de añadir o modificar registros.&lt;/div&gt;&lt;br /&gt;
Un saludo y disculpen el despiste.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;RODRIGO DINAMARCA M.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-1788185407641155627?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/y_ddK5QI88ZmjfoJxVDLZEhxMxY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y_ddK5QI88ZmjfoJxVDLZEhxMxY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/y_ddK5QI88ZmjfoJxVDLZEhxMxY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y_ddK5QI88ZmjfoJxVDLZEhxMxY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/_ne13zFRFQg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/1788185407641155627/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2010/10/error-detectado-en-articulo-uso-de.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/1788185407641155627?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/1788185407641155627?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/_ne13zFRFQg/error-detectado-en-articulo-uso-de.html" title="Error detectado en Artículo: Uso de solapas para administrar archivos de datos en una interfaz basada en CONTROL BROWSE y PICTURE BUTTONS" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2010/10/error-detectado-en-articulo-uso-de.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUNQHozcSp7ImA9Wx5UEEw.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-3141083809657854518</id><published>2010-10-13T20:58:00.000-03:00</published><updated>2010-10-13T20:58:11.489-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-13T20:58:11.489-03:00</app:edited><title>Uso de solapas para administrar archivos de datos en una interfaz basada en CONTROL BROWSE y PICTURE BUTTONS.</title><content type="html">&lt;div style="text-align: justify;"&gt;Después de un buen tiempo sin dedicarme al Blog, me he logrado hacer de tiempo para publicar algo nuevo, pero como me dijo Ramón Denuc y con justa razón, "primero las obligaciones y luego las devociones".&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Bueno, el tema pendiente era utilizar solapas para gestionar más de un archivo a la vez, y como casi siempre nos encontramos con que al desarrollar una aplicación, necesitamos utilizar dentro de la categoría de los Archivos Maestros, plantillas que delimitarán las opciones o parámetros bajo los cuales funcionará nuestro sistema como por ejemplo: un archivo de colores, un archivo de marcas o modelos de artículos, o categorías (también llamadas "familias") de artículos, formas de pago o cosas por el estilo, hay que reconocer que es una tortura china para el usuario tener que entrar a una opción distinta cada vez que debe ingresar los datos de cada uno de estos archivos, porque más encima, si no los ingresa, el sistema dará tumbos.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;La verdad es que para el desarrollador también es una soberana joda implementar las utilidades para la mantención de cada uno de estos archivos, y por esa razón, les dejo un ejemplo bastante simplificado para manejar estas plantillas desde una única interfaz utilizando solapas.&amp;nbsp; El ejemplo está basado en el mismo diseño que la utilidad para la mantención de usuarios, y como lo que haremos será mostrar listados de datos con la instrucción CREATE CONTROL BROWSE, no necesitaremos utilizar distintas ventanas para mostrar los archivos, sino que bastará con mostrar u ocultar el CONTROL BROWSE correspondiente con SHOW CONTROL y HIDE CONTROL, lo que queda es realizar las evaluaciones y verificaciones dependiendo de la solapa que se encuentre activa.&lt;/div&gt;&lt;br /&gt;
A continuación les dejo algunas capturas de la aplicación:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PMQWqZl1K78/TLZEB4C5NHI/AAAAAAAAAHw/wigIMP8TNv0/s1600/Tabs02_01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="348" src="http://3.bp.blogspot.com/_PMQWqZl1K78/TLZEB4C5NHI/AAAAAAAAAHw/wigIMP8TNv0/s400/Tabs02_01.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_PMQWqZl1K78/TLZEXCx53kI/AAAAAAAAAH0/jzzv1AKPAvY/s1600/Tabs02_02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="348" src="http://4.bp.blogspot.com/_PMQWqZl1K78/TLZEXCx53kI/AAAAAAAAAH0/jzzv1AKPAvY/s400/Tabs02_02.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PMQWqZl1K78/TLZEfSr_FSI/AAAAAAAAAH4/OoM1sxELSEM/s1600/Tabs02_03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="348" src="http://3.bp.blogspot.com/_PMQWqZl1K78/TLZEfSr_FSI/AAAAAAAAAH4/OoM1sxELSEM/s400/Tabs02_03.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMQWqZl1K78/TLZEnjyBmhI/AAAAAAAAAH8/Y-las_4maQY/s1600/Tabs02_05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="348" src="http://1.bp.blogspot.com/_PMQWqZl1K78/TLZEnjyBmhI/AAAAAAAAAH8/Y-las_4maQY/s400/Tabs02_05.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/TLZEumnd4UI/AAAAAAAAAIA/_w-mq2CWN6s/s1600/Tabs02_06.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="348" src="http://2.bp.blogspot.com/_PMQWqZl1K78/TLZEumnd4UI/AAAAAAAAAIA/_w-mq2CWN6s/s400/Tabs02_06.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/TLZE2k8OE5I/AAAAAAAAAIE/pdKOCD0sUcY/s1600/Tabs02_07.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="188" src="http://2.bp.blogspot.com/_PMQWqZl1K78/TLZE2k8OE5I/AAAAAAAAAIE/pdKOCD0sUcY/s320/Tabs02_07.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Pueden descargar el programa de ejemplo directamente dede &lt;a href="http://www.megaupload.com/?d=22TUEO66"&gt;&lt;b&gt;MEGAUPLOAD&lt;/b&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Enlace de descarga: &lt;a href="http://www.megaupload.com/?d=22TUEO66"&gt;http://www.megaupload.com/?d=22TUEO66&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b&gt;Tema del próximo artículo:&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Explorador de imágenes (.BMP) con vista previa. &lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;u&gt;&lt;b&gt;OBS&lt;/b&gt;&lt;/u&gt;:&lt;/span&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Para  seguir publicando artículos, es  necesario el apoyo de los lectores  mediante comentarios, o registrándose como  seguidores del Blog. También  se puede cooperar proponiendo o solicitando temas y/o recursos de  programación.&amp;nbsp; Toda iniciativa tendrá fuerza en la medida de que los   interesados participen activamente.&amp;nbsp; Saludos y agradecido desde ya.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-3141083809657854518?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GkcOtk2aN050GhWr_7GrccumLa0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GkcOtk2aN050GhWr_7GrccumLa0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GkcOtk2aN050GhWr_7GrccumLa0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GkcOtk2aN050GhWr_7GrccumLa0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/YURfWnQvryc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/3141083809657854518/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2010/10/uso-de-solapas-para-administrar.html#comment-form" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/3141083809657854518?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/3141083809657854518?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/YURfWnQvryc/uso-de-solapas-para-administrar.html" title="Uso de solapas para administrar archivos de datos en una interfaz basada en CONTROL BROWSE y PICTURE BUTTONS." /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_PMQWqZl1K78/TLZEB4C5NHI/AAAAAAAAAHw/wigIMP8TNv0/s72-c/Tabs02_01.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2010/10/uso-de-solapas-para-administrar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4DQHgycSp7ImA9Wx5XEEo.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-6690936662152169443</id><published>2010-09-09T19:59:00.003-04:00</published><updated>2010-09-09T20:19:31.699-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-09T20:19:31.699-04:00</app:edited><title>Gestión de Archivos Maestros con interfaz basada en CONTROL BROWSE e IMAGE BUTTONS</title><content type="html">&lt;div style="text-align: justify;"&gt;Retomando el Blog después de casi dos semanas de no publicar nada (mi casa parecía hospital, estábamos todos enfermos) y esperando también que en estas dos semanas hayan podido digerir los distintos ejemplos y recursos publicados, pongo a su disposición un programa que tal vez no representa una novedad, pero que puede resultar útil a la hora de manipular archivos maestros en sus aplicaciones, con una interfaz sencilla y un pequeño toque visual.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;El programa permite manipular (gestionar y mantener) un archivo maestro de usuarios,y su interfaz está basada en un &lt;b&gt;CONTROL BROWSE&lt;/b&gt;, &lt;b&gt;PICTURE BUTTONS&lt;/b&gt;, un &lt;b&gt;CONTROL EDITBOX&lt;/b&gt; para la búsqueda de registros y un &lt;b&gt;CONTROL RADIOBUTTON&lt;/b&gt; para seleccionar el índice activo.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;A continuación les dejo algunas capturas de la ejecución del programa:&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/TIluYW_RNjI/AAAAAAAAAHI/dRk74A9LIXM/s1600/Users_00.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="296" src="http://2.bp.blogspot.com/_PMQWqZl1K78/TIluYW_RNjI/AAAAAAAAAHI/dRk74A9LIXM/s400/Users_00.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PMQWqZl1K78/TIlukbtCgII/AAAAAAAAAHQ/pCSFtw2ydNA/s1600/Users_02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_PMQWqZl1K78/TIlukbtCgII/AAAAAAAAAHQ/pCSFtw2ydNA/s320/Users_02.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PMQWqZl1K78/TIlurjmZ1QI/AAAAAAAAAHY/AF7MlcThjOA/s1600/Users_03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_PMQWqZl1K78/TIlurjmZ1QI/AAAAAAAAAHY/AF7MlcThjOA/s320/Users_03.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/TIlu33AvBlI/AAAAAAAAAHg/1P9Y71SmPqg/s1600/Users_04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_PMQWqZl1K78/TIlu33AvBlI/AAAAAAAAAHg/1P9Y71SmPqg/s320/Users_04.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/TIlu-74nwxI/AAAAAAAAAHo/MvrhLVT30fw/s1600/Users_01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="296" src="http://2.bp.blogspot.com/_PMQWqZl1K78/TIlu-74nwxI/AAAAAAAAAHo/MvrhLVT30fw/s400/Users_01.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Como ustedes saben, &lt;b&gt;dBFast &lt;/b&gt;no permite utilizar el mandato &lt;b&gt;BROWSE &lt;/b&gt;o el comando &lt;b&gt;CREATE CONTROL BROWSE&lt;/b&gt; si el archivo de datos que estamos desplegando se encuentra vacío.&amp;nbsp; Para solucionar este problema y evitar el mensaje de error, el programa evalúa si el archivo contiene registros, y si no contiene, agrega uno en blanco el cual se elimina en forma inmediata.&amp;nbsp; El mandato &lt;b&gt;SET DELETED ON&lt;/b&gt;, se encarga de que ese registro no se muestre, pero permite que se muestre el &lt;b&gt;CONTROL BROWSE&lt;/b&gt; en blanco.&amp;nbsp; Además, si el archivo está vacío o contiene solo registos eliminados, se procede a desactivar todos los controles para la manipularción de registros, y mediante &lt;b&gt;SELECT CONTROL&lt;/b&gt; se fija el foco en el botón "&lt;b&gt;Nuevo&lt;/b&gt;" (que permite agregar nuevos registros).&amp;nbsp; Al estar seleccionado el botón "&lt;b&gt;Nuevo&lt;/b&gt;", basta con presionar la tecla "&lt;b&gt;Enter&lt;/b&gt;" para agregar un nuevo registro, después de lo cual, el foco regresa al botón para seguir agregando registros mediante el teclado.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pueden descargar el programa de ejemplo directamente dede &lt;a href="http://www.megaupload.com/?d=KXO2RXV7"&gt;&lt;b&gt;MEGAUPLOAD&lt;/b&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Enlace de descarga: &lt;a href="http://www.megaupload.com/?d=KXO2RXV7"&gt;http://www.megaupload.com/?d=KXO2RXV7&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b&gt;Tema del próximo artículo:&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Uso de solapas para administrar varios archivos de datos en una interfaz basada en CONTROL BROWSE y PICTURE BUTTONS como la de este ejemplo. &lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;u&gt;&lt;b&gt;OBS&lt;/b&gt;&lt;/u&gt;:&lt;/span&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Para seguir publicando artículos, es  necesario el apoyo de los lectores mediante comentarios, o registrándose como  seguidores del Blog. También se puede cooperar proponiendo o solicitando temas y/o recursos de programación.&amp;nbsp; Toda iniciativa tendrá fuerza en la medida de que los  interesados participen activamente.&amp;nbsp; Saludos y agradecido desde ya.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul style="text-align: justify;"&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-6690936662152169443?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8npnAUdwGqWHNqpNL6JTIRQY8uk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8npnAUdwGqWHNqpNL6JTIRQY8uk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8npnAUdwGqWHNqpNL6JTIRQY8uk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8npnAUdwGqWHNqpNL6JTIRQY8uk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/aOwzP8Gcb-o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/6690936662152169443/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2010/09/gestion-de-archivos-maestros-con.html#comment-form" title="3 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/6690936662152169443?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/6690936662152169443?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/aOwzP8Gcb-o/gestion-de-archivos-maestros-con.html" title="Gestión de Archivos Maestros con interfaz basada en CONTROL BROWSE e IMAGE BUTTONS" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_PMQWqZl1K78/TIluYW_RNjI/AAAAAAAAAHI/dRk74A9LIXM/s72-c/Users_00.jpg" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2010/09/gestion-de-archivos-maestros-con.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYHQH8-eCp7ImA9Wx5QEUk.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-5931760622933631641</id><published>2010-08-30T01:48:00.004-04:00</published><updated>2010-08-30T02:02:11.150-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-30T02:02:11.150-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="RPV" /><category scheme="http://www.blogger.com/atom/ns#" term="No2Imp" /><category scheme="http://www.blogger.com/atom/ns#" term="Informes" /><title>Recursos: Utilidades para la generación de Informes</title><content type="html">&lt;div style="text-align: justify;"&gt;En la sección "&lt;b&gt;Recursos&lt;/b&gt;", he puesto a disposición de los usuarios, los enlaces de descarga para dos aplicaciones orientadas a la generación de informes.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;u&gt;&lt;b&gt;No2Imp&lt;/b&gt;&lt;/u&gt;:&amp;nbsp; Permite ejecutar aquellos viejos informes que dirigíamos hacia LPT1 con el mandato "?", acepta códigos para el tamaño de los caracteres, e imprime en cualquier impresora instalada en Windows, incluso las que están conectadas a los puertos USB.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PMQWqZl1K78/THtFW7Ii-PI/AAAAAAAAAGQ/YEN1n0myRvU/s1600/No2Imp_03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_PMQWqZl1K78/THtFW7Ii-PI/AAAAAAAAAGQ/YEN1n0myRvU/s320/No2Imp_03.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_PMQWqZl1K78/THtFdgNUBOI/AAAAAAAAAGY/TwY5c2u1r_c/s1600/No2Imp_01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_PMQWqZl1K78/THtFdgNUBOI/AAAAAAAAAGY/TwY5c2u1r_c/s320/No2Imp_01.jpg" /&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_PMQWqZl1K78/THtFjawa9vI/AAAAAAAAAGg/AVN4yEugyoY/s1600/No2Imp_02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_PMQWqZl1K78/THtFjawa9vI/AAAAAAAAAGg/AVN4yEugyoY/s320/No2Imp_02.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;u&gt;&lt;b&gt;RPV Printing System&lt;/b&gt;&lt;/u&gt;:&amp;nbsp; Es un potente gestor de impresión que incluye un lenguaje propio para la generación de informes, un servidor de impresión que gestiona la ejecución de nuestros listados, y una herramienta para la visialización de informes.&amp;nbsp; Entre otras cosas, permite colores, imágenes, trazado de líneas y códigos de barras.&amp;nbsp; Como el instalador se me dañó con los años, puse en la carpeta RPV los ejecutables, las DLLs y los archivos OCX necesarios para que la aplicación funcione correctamente.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMQWqZl1K78/THtFzmDB0WI/AAAAAAAAAGo/GflaVnnfPbs/s1600/RPV_01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_PMQWqZl1K78/THtFzmDB0WI/AAAAAAAAAGo/GflaVnnfPbs/s320/RPV_01.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/THtF6PasBjI/AAAAAAAAAGw/MYnuYLF3omo/s1600/RPV_02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_PMQWqZl1K78/THtF6PasBjI/AAAAAAAAAGw/MYnuYLF3omo/s320/RPV_02.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PMQWqZl1K78/THtGACYZw0I/AAAAAAAAAG4/DaaDwW5KfBY/s1600/RPV_03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_PMQWqZl1K78/THtGACYZw0I/AAAAAAAAAG4/DaaDwW5KfBY/s320/RPV_03.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="background-color: #f3f3f3; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #f3f3f3; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Si CARET te ha quedado corto, si quieres volver a utilizar los viejos listados creados con el comando "?", o si quieres listados profesionales alternativos a todo lo que dBFast ofrece, estos dos programas pueden ser la solución.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #f3f3f3; text-align: justify;"&gt;&lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;a href="http://dbfastchile.blogspot.com/p/recursos.html"&gt;&lt;b&gt;Ir a Recursos &amp;gt;&amp;gt;&lt;/b&gt;&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;div style="text-align: right;"&gt;&lt;a href="http://dbfastchile.blogspot.com/p/recursos.html"&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-5931760622933631641?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1lUXUbxw3afYs2kri0LSV-NLaEU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1lUXUbxw3afYs2kri0LSV-NLaEU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1lUXUbxw3afYs2kri0LSV-NLaEU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1lUXUbxw3afYs2kri0LSV-NLaEU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/R1DaheBrnfQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/5931760622933631641/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2010/08/recursos-utilidades-para-la-generacion.html#comment-form" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/5931760622933631641?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/5931760622933631641?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/R1DaheBrnfQ/recursos-utilidades-para-la-generacion.html" title="Recursos: Utilidades para la generación de Informes" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_PMQWqZl1K78/THtFW7Ii-PI/AAAAAAAAAGQ/YEN1n0myRvU/s72-c/No2Imp_03.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2010/08/recursos-utilidades-para-la-generacion.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQMQXc5fSp7ImA9Wx5RF0g.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-5530280502219502012</id><published>2010-08-25T12:34:00.002-04:00</published><updated>2010-08-25T12:39:40.925-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-25T12:39:40.925-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Cambiar fecha y Hora" /><category scheme="http://www.blogger.com/atom/ns#" term="Abrir y Cerrar unidad de CD/DVD" /><category scheme="http://www.blogger.com/atom/ns#" term="Configuración Regional" /><title>Abrir utilidades para cambiar Fecha y Hora del sistema, y Configuración Regional</title><content type="html">&lt;div style="text-align: justify;"&gt;Siguiendo la línea del artículo anterior, les dejo otro ejemplo de uso del &lt;b&gt;RUNDLL32.EXE &lt;/b&gt;de Windows para llamar utilidades del &lt;b&gt;Panel de Control&lt;/b&gt; almacenadas en el archivo &lt;b&gt;SHELL32.DLL&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;En esta oportunidad, les dejo otro pequeño ejemplo que permite abrir la &lt;b&gt;utilidad para cambiar la Fecha y Hora del sistema&lt;/b&gt;. Agregué otra función que permite invocar la utilidad para cambiar la &lt;b&gt;Configuración Regional&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;A modo de &lt;b&gt;Bonus Track&lt;/b&gt;, incluyo una función que permite &lt;b&gt;Abrir &lt;/b&gt;y &lt;b&gt;Cerrar &lt;/b&gt;una &lt;b&gt;unidad de CD/DVD&lt;/b&gt; utilizando la&lt;b&gt; función API mciSendString( )&lt;/b&gt;, contenida en el archivo &lt;b&gt;MMSYSTEM.DLL&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;A continuación les dejo el código fuente del ejemplo:&lt;/div&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;********************************************************************************************&lt;br /&gt;
* Programa&amp;nbsp;&amp;nbsp; : DATETIME&lt;br /&gt;
* Descripción: Permite abrir la utilidad para cambiar fecha y hora de Windows,&lt;br /&gt;
*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; se añadió utilidad para configuración regional y función para abrir y cerrar&lt;br /&gt;
*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unidad de CD/DVD.&lt;br /&gt;
* Autor&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Rodrigo Dinamarca M.&lt;br /&gt;
* Obs.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : Probado en Windows 7&lt;br /&gt;
********************************************************************************************&lt;br /&gt;
&lt;br /&gt;
SET PROCEDURE TO DATETIME&lt;br /&gt;
SET ERASE VIDEO TO 112&lt;br /&gt;
&lt;br /&gt;
ERASE&lt;br /&gt;
&lt;br /&gt;
cB1 = "Establecer Fecha y Hora"&lt;br /&gt;
cB2 = "Configuración Regional"&lt;br /&gt;
cB3 = "Cerrar"&lt;br /&gt;
cB4 = "* Bonus Track: ABRIR Unidad de CD/DVD"&lt;br /&gt;
cB5 = "* Bonus Track: CERRAR Unidad de CD/DVD"&lt;br /&gt;
CREATE BUTTON cB1 AT&amp;nbsp; 2,5 SIZE 2,45&lt;br /&gt;
CREATE BUTTON cB2 AT&amp;nbsp; 5,5 SIZE 2,45&lt;br /&gt;
CREATE BUTTON cB3 AT&amp;nbsp; 8,5 SIZE 2,45&lt;br /&gt;
CREATE BUTTON cB4 AT 11,5 SIZE 2,45&lt;br /&gt;
&lt;br /&gt;
DO WHILE .T.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; nEvent = CHKEVENT()&lt;br /&gt;
&amp;nbsp;&amp;nbsp; DO CASE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CASE nEvent = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF LASTKEY() = 27&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EXIT&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ENDIF&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CASE nEvent = 5&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EXIT&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CASE nEvent = 6&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DO CASE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CASE BUTTON() = cB1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetDateTime()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CASE BUTTON() = cB2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegionalConfig()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CASE BUTTON() = cB4&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; REPLACE CONTROL cB4 WITH cB5&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OpenCDDVD(1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CASE BUTTON() = cB5&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; REPLACE CONTROL cB5 WITH cB4&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OpenCDDVD(2)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OTHERWISE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EXIT&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ENDCASE&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ENDCASE&lt;br /&gt;
ENDDO&lt;br /&gt;
&lt;br /&gt;
RETURN&lt;br /&gt;
&lt;br /&gt;
****************************************&lt;br /&gt;
FUNCTION SetDateTime()&lt;br /&gt;
&lt;br /&gt;
* WRUN c:\windows\rundll32.exe c:\windows\system\shell32.dll,Control_RunDLL timedate.cpl @0,0 // FECHA Y HORA para Windows 95 y 98&lt;br /&gt;
WRUN C:\WINDOWS\SYSTEM32\RUNDLL32.EXE C:\WINDOWS\SYSTEM32\SHELL32.DLL,Control_RunDLL timedate.cpl @0,0&lt;br /&gt;
&lt;br /&gt;
RETURN("")&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
****************************************&lt;br /&gt;
FUNCTION RegionalConfig()&lt;br /&gt;
&lt;br /&gt;
*WRUN c:\windows\rundll32.exe c:\windows\system\shell32.dll,Control_RunDLL intl.cpl @0,0 // CONFIGURACIÓN REGIONAL para Win 95/98&lt;br /&gt;
WRUN C:\WINDOWS\SYSTEM32\RUNDLL32.EXE C:\WINDOWS\SYSTEM32\SHELL32.DLL,Control_RunDLL intl.cpl @0,0&amp;nbsp; // CONFIGURACIÓN REGIONAL&lt;br /&gt;
&lt;br /&gt;
RETURN("")&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
****************************************&lt;br /&gt;
FUNCTION OpenCDDVD() // ABRIR Y CERRAR LA PUERTA DEL LECTOR DE CD&lt;br /&gt;
PARAMETERS p_nAction&lt;br /&gt;
&lt;br /&gt;
DECLARE PFUNC mciSendString RETURNING INTEGER IN DLL mmsystem.dll&lt;br /&gt;
&lt;br /&gt;
IF EMPTY(PCOUNT())&lt;br /&gt;
&amp;nbsp;&amp;nbsp; p_nAction = 1&lt;br /&gt;
ENDIF&lt;br /&gt;
&lt;br /&gt;
returnstring = SPACE(127)&lt;br /&gt;
&lt;br /&gt;
IF p_nAction = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; errornum = mciSendString("set CDAudio door open", ALLTRIM(returnstring), toint(127), toint(0)) &lt;br /&gt;
ELSE&lt;br /&gt;
&amp;nbsp;&amp;nbsp; errornum = mciSendString("set CDAudio door closed", ALLTRIM(returnstring), toint(127), toint(0))&lt;br /&gt;
ENDIF&lt;br /&gt;
&lt;br /&gt;
IF errornum &amp;lt;&amp;gt; 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; MESSAGE("Operación Cancelada","No se ha establecido contacto con la unidad de CD/DVD")&lt;br /&gt;
ENDIF&lt;br /&gt;
&lt;br /&gt;
RETURN("")&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
También les dejo algunas capturas de la ejecución del ejemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_PMQWqZl1K78/THVCvt2SdlI/AAAAAAAAAEI/IMAeS6HW95Q/s1600/Fecha_y_Hora_001.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_PMQWqZl1K78/THVCvt2SdlI/AAAAAAAAAEI/IMAeS6HW95Q/s320/Fecha_y_Hora_001.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Controles de la Aplicación&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/THVC-49vfvI/AAAAAAAAAEQ/tuwYAjfNbL4/s1600/Fecha_y_Hora_002.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_PMQWqZl1K78/THVC-49vfvI/AAAAAAAAAEQ/tuwYAjfNbL4/s320/Fecha_y_Hora_002.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Utilidad para cambiar Fecha y Hora abierta desde la aplicación&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PMQWqZl1K78/THVDPVt6VtI/AAAAAAAAAEY/MyXry_Rubrg/s1600/Fecha_y_Hora_003.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_PMQWqZl1K78/THVDPVt6VtI/AAAAAAAAAEY/MyXry_Rubrg/s320/Fecha_y_Hora_003.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Utilidad para cambiar la Configuración Regional abierta desde la aplicación&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Pueden descargar el programa de ejemplo directamente dede &lt;a href="http://www.megaupload.com/?d=R0K3EITF"&gt;&lt;b&gt;MEGAUPLOAD&lt;/b&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b&gt;Enlace de descarga: &lt;a href="http://www.megaupload.com/?d=R0K3EITF"&gt;http://www.megaupload.com/?d=R0K3EITF&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b&gt;Tema del próximo artículo:&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Uso de solapas para administrar visualización de controles. &lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;u&gt;&lt;b&gt;OBS&lt;/b&gt;&lt;/u&gt;:&lt;/span&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;Para quienes hayan descargado el Anuario de ejemplo: para una correcta ejecución copiar la carpeta "Anuario", la que contiene la aplicación, en la raíz del disco C:&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;Para seguir publicando artículos, es necesario el apoyo de los lectores  mediante comentarios, o registrándose como seguidores del Blog. Toda iniciativa  tendrá fuerza en la medida de que los interesados participen activamente.&amp;nbsp;  Saludos y agradecido desde ya.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-5530280502219502012?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4bpuJO_Gfn_I1caLeSd8GvS6Bac/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4bpuJO_Gfn_I1caLeSd8GvS6Bac/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4bpuJO_Gfn_I1caLeSd8GvS6Bac/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4bpuJO_Gfn_I1caLeSd8GvS6Bac/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/entm0nkTFt0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/5530280502219502012/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2010/08/abrir-utilidades-para-cambiar-fecha-y.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/5530280502219502012?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/5530280502219502012?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/entm0nkTFt0/abrir-utilidades-para-cambiar-fecha-y.html" title="Abrir utilidades para cambiar Fecha y Hora del sistema, y Configuración Regional" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_PMQWqZl1K78/THVCvt2SdlI/AAAAAAAAAEI/IMAeS6HW95Q/s72-c/Fecha_y_Hora_001.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2010/08/abrir-utilidades-para-cambiar-fecha-y.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEADRHozeSp7ImA9Wx5RFks.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-5865808853238034583</id><published>2010-08-23T11:38:00.005-04:00</published><updated>2010-08-24T11:12:55.481-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-24T11:12:55.481-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Verificar resolución de pantalla" /><category scheme="http://www.blogger.com/atom/ns#" term="Cambiar opciones de pantalla" /><title>Verificar resolución y cambiar propiedades de pantalla de Windows</title><content type="html">&lt;div style="text-align: justify;"&gt;Un problema frecuente al que nos enfrentamos cuando diseñamos nuestras aplicaciones, es el espacio disponible en nuestras ventanas para mostrar la información adecuadamente, o bien, para ubicar los objetos y controles destinados a recibir la información que debe introducir el usuario.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Como soy un poco maniático y perfeccionista, considero muy importante mantener el equilibrio entre la funcionalidad y la estética de una aplicación, pues a través de la experiencia, he comprobado que los clientes valoran la funcionalidad de los programas, pero agradecen la claridad y la simpleza de una interfaz intuitiva,&amp;nbsp; que facilite su interacción con el sistema, y que facilite también su correspondiente curva de aprendizaje.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Volviendo al problema del espacio para ubicar nuestros objetos en las ventanas, decidí dejar de adaptar mis programas a las resoluciones más bajas, y al igual como lo hacen otros desarrolladores de software, decidí poner  requerimientos mínimos de resolución de pantalla para ejecutar mis  programas.&amp;nbsp; Esta decisión la tomé&amp;nbsp; basándome en que el hardware para gráficos existente hoy en día es cada vez más potente, y que las resoluciones soportadas por los monitores han aumentado considerablemente gracias a los estándares que apuestan por la Alta definición. &lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;El siguiente paso para resolver el problema del espacio y del tamaño de las ventanas, fue crear una función específica para detectar si el equipo en el cual estaba instalado el software, cumplía con la resolución mínima especificada en sus requerimientos.&amp;nbsp; Este paso resultó bastante simple porque en dBFast existe la función &lt;b&gt;HARDWARE( )&lt;/b&gt;, que con los parámetros adecuados y entre otras cosas, permite obtener el ancho y el alto de la pantalla en pixeles.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Una vez implementada la función, ¿qué haría, además de mostrar el diálogo de error correspondiente,&amp;nbsp; en el caso de que la resolución de pantalla del equipo no fuera la adecuada?.&amp;nbsp; Lo primero que se me pasó por la mente fue abrir el panel de control con &lt;b&gt;WRUN CONTROL.EXE&lt;/b&gt; para que el usuario accediera a las opciones de pantalla, y cambiara la resolución desde la opción correspondiente, sin embargo, en mi condición de maniático, esta solución no me satisfacía pues quería llegar directamente a la utilidad de configuración de pantalla de Windows.&amp;nbsp; Me puse a pensar e investigar para encontrar una forma de abrir las diferentes opciones de pantalla de windows directamente desde dBFast, y me preguntaba cómo lo lograría pues las opciones del Panel de Control están almacenadas en la librería&lt;b&gt; SHELL32.DLL&lt;/b&gt; y dBFast no puede interactuar con &lt;b&gt;DLLs &lt;/b&gt;de 32 bits.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Finalmente encontré la solución, la cual consiste en utilizar la potencialidad del programa &lt;b&gt;RUNDLL32.EXE&lt;/b&gt; de Windows, pues, dado que no puede ejecutarse directamente una función almacenada en una &lt;b&gt;DLL&lt;/b&gt;, Windows utiliza el programa &lt;b&gt;RUNDLL32.EXE&lt;/b&gt; para lanzar funciones almacenadas en sus archivos &lt;b&gt;DLL &lt;/b&gt;compartidos.&amp;nbsp; Luego, tuve que buscar los archivos &lt;b&gt;CPL &lt;/b&gt;utilizados por el Panel de Control para dar con aquellos que me permitieran interactuar con las opciones de pantalla, y crear la función o procedimiento que me permitiera llegar a ellas directamente desde mi aplicación.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Para probar lo anterior, escribí un pequeño programa de prueba que me funcionó a la perfección en Windows XP, Windows Vista y Windows 7, el único cuidado que debemos tener, es verificar la ubicación del &lt;b&gt;RUNDLL32.EXE &lt;/b&gt;y del &lt;b&gt;SHELL32.DLL&lt;/b&gt;, pues esta puede cambiar dependiendo de la versión de Windows que utilicemos, de la unidad de disco en que esté instalado el sistema operativo, y del nombre de la carpeta en la cual está el Sistema Operativo.&lt;/div&gt;&lt;br /&gt;
El código fuente del programa es el siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;***************************************************************************************************&lt;br /&gt;
* Programa&amp;nbsp;&amp;nbsp; : SETSCR.PRG&lt;br /&gt;
* Descripción: Permite el acceso a las opciones de pantalla del Panel de Control&lt;br /&gt;
* Autor&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp; Rodrigo Dinamarca M.&lt;br /&gt;
***************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
SET ERASE VIDEO TO 112&lt;br /&gt;
SET PROCEDURE TO SETSCR&lt;br /&gt;
&lt;br /&gt;
ERASE&lt;br /&gt;
&lt;br /&gt;
IF ChkScrRes(1024,768)&amp;nbsp; // Verifica la resolución mínima de pantalla de 1024 x 768&lt;br /&gt;
&amp;nbsp;&amp;nbsp; MESSAGE("Resolución de Pantalla adecuada para el Sistema","El mínimo requerido es de 1024 x 768")&lt;br /&gt;
ELSE&lt;br /&gt;
&amp;nbsp;&amp;nbsp; SetScreen(4)&amp;nbsp; // Abre la utilidad para cambiar la resolución de pantalla de Windows&lt;br /&gt;
ENDIF&lt;br /&gt;
&lt;br /&gt;
**************************************************************&lt;br /&gt;
* Creación de Botones para acceder a las Opciones de Pantalla&lt;br /&gt;
&lt;br /&gt;
cB1 = "Configurar Íconos del Escritorio"&lt;br /&gt;
cB2 = "Configurar Protector de Pantalla"&lt;br /&gt;
cB3 = "Personalizar Escritorio"&lt;br /&gt;
cB4 = "Configurar Resolución de Pantalla"&lt;br /&gt;
&lt;br /&gt;
CREATE BUTTON cB1 AT 3,5 SIZE 2,45&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
CREATE BUTTON cB2 AT 6,5 SIZE 2,45&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
CREATE BUTTON cB3 AT 9,5 SIZE 2,45&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
CREATE BUTTON cB4 AT 12,5 SIZE 2,45&lt;br /&gt;
CREATE BUTTON "Cerrar" AT 15,5 SIZE 2,45&lt;br /&gt;
&lt;br /&gt;
DO WHILE .T.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; nEvent = CHKEVENT()&lt;br /&gt;
&amp;nbsp;&amp;nbsp; DO CASE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CASE nEvent = 1&amp;nbsp; // Teclado&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF LASTKEY() = 27&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EXIT&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ENDIF&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CASE nEvent = 5&amp;nbsp; // Botón de cierre de la ventana&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EXIT&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CASE nEvent = 6&amp;nbsp; // Botón de comando&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DO CASE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CASE BUTTON() = cB1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetScreen(1)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CASE BUTTON() = cB2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetScreen(2)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CASE BUTTON() = cB3&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetScreen(3)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CASE BUTTON() = cB4&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetScreen(4)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CASE BUTTON() = "Cerrar"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EXIT&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ENDCASE&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ENDCASE&lt;br /&gt;
ENDDO&lt;br /&gt;
&lt;br /&gt;
RETURN&lt;br /&gt;
&lt;br /&gt;
******************************************************************&lt;br /&gt;
* Función para interactuar con las opciones de pantalla de Windows&lt;br /&gt;
&lt;br /&gt;
FUNCTION SetScreen()&lt;br /&gt;
PARAMETERS p_nOption&lt;br /&gt;
&lt;br /&gt;
DO CASE&lt;br /&gt;
&amp;nbsp;&amp;nbsp; CASE p_nOption = 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Para Windows 95/98 utilizar -&amp;gt; WRUN c:\windows\rundll32.exe c:\windows\system\shell32.dll,Control_RunDLL desk.cpl @0,0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WRUN C:\WINDOWS\SYSTEM32\RUNDLL32.EXE C:\WINDOWS\SYSTEM32\SHELL32.DLL,Control_RunDLL desk.cpl @0,0&lt;br /&gt;
&amp;nbsp;&amp;nbsp; CASE p_nOption = 2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Para Windows 95/98 utilizar -&amp;gt; WRUN c:\windows\rundll32.exe c:\windows\system\shell32.dll,Control_RunDLL desk.cpl @0,1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WRUN C:\WINDOWS\SYSTEM32\RUNDLL32.EXE C:\WINDOWS\SYSTEM32\SHELL32.DLL,Control_RunDLL desk.cpl @0,1&lt;br /&gt;
&amp;nbsp;&amp;nbsp; CASE p_nOption = 3&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Para Windows 95/98 utilizar -&amp;gt; WRUN c:\windows\rundll32.exe c:\windows\system\shell32.dll,Control_RunDLL desk.cpl @0,2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WRUN C:\WINDOWS\SYSTEM32\RUNDLL32.EXE C:\WINDOWS\SYSTEM32\SHELL32.DLL,Control_RunDLL desk.cpl @0,2&lt;br /&gt;
&amp;nbsp;&amp;nbsp; CASE p_nOption = 4&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Para Windows 95/98 utilizar -&amp;gt; WRUN c:\windows\rundll32.exe c:\windows\system\shell32.dll,Control_RunDLL desk.cpl @0,3&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WRUN C:\WINDOWS\SYSTEM32\RUNDLL32.EXE C:\WINDOWS\SYSTEM32\SHELL32.DLL,Control_RunDLL desk.cpl @0,3&lt;br /&gt;
ENDCASE&lt;br /&gt;
&lt;br /&gt;
RETURN("")&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;br /&gt;
******************************************************************&lt;br /&gt;
* Función para verificar la resolución de pantalla de Windows&lt;br /&gt;
&lt;br /&gt;
FUNCTION ChkScrRes()&lt;br /&gt;
PARAMETERS p_nAnchoScr, p_nAltoScr&lt;br /&gt;
&lt;br /&gt;
lScrReturn = .T.&lt;br /&gt;
nScrVerSize = HARDWARE(1)&lt;br /&gt;
nScrHorSize = HARDWARE(2)&lt;br /&gt;
&lt;br /&gt;
IF (nScrVerSize &amp;lt; p_nAltoScr) .OR. (nScrHorSize &amp;lt; p_nAnchoScr)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; lScrReturn = .F.&lt;br /&gt;
ENDIF&lt;br /&gt;
&lt;br /&gt;
RETURN(lScrReturn)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Algunas capturas de la ejecución del programa:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/THKPV-iuOxI/AAAAAAAAADo/dVIz8L2BzL8/s1600/Scr_01.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_PMQWqZl1K78/THKPV-iuOxI/AAAAAAAAADo/dVIz8L2BzL8/s320/Scr_01.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Mensaje enviado por la aplicación cuando la resolución de pantalla es la correcta.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_PMQWqZl1K78/THKPnhalHBI/AAAAAAAAADw/OgmT5Y8p9p0/s1600/Scr_02.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_PMQWqZl1K78/THKPnhalHBI/AAAAAAAAADw/OgmT5Y8p9p0/s320/Scr_02.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Botones de comando que permiten acceder a cada una de las opciones de pantalla de Windows sin pasar por el Panel de Control.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMQWqZl1K78/THKQKEmEsQI/AAAAAAAAAD4/_7RAmDLzpDY/s1600/Scr_03.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="267" src="http://1.bp.blogspot.com/_PMQWqZl1K78/THKQKEmEsQI/AAAAAAAAAD4/_7RAmDLzpDY/s400/Scr_03.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Ventana de la utilidad para configurar la resolución de pantalla abierta desde el botón de comando de la aplicación.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
Pueden descargar el programa de ejemplo directamente dede &lt;b&gt;&lt;a href="http://www.megaupload.com/?d=S0IW9YZS"&gt;MEGAUPLOAD&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b&gt;Enlace de descarga: &lt;a href="http://www.megaupload.com/?d=S0IW9YZS"&gt;http://www.megaupload.com/?d=S0IW9YZS&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b&gt;Tema del próximo artículo:&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Cambiar fecha y hora del sistema desde dBFast, usando las utilidades de Windows. &lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;u&gt;&lt;b&gt;OBS&lt;/b&gt;&lt;/u&gt;:&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Para seguir publicando artículos, es necesario el apoyo de los lectores mediante comentarios, o registrándose como seguidores del Blog. Toda iniciativa tendrá fuerza en la medida de que los interesados participen activamente.&amp;nbsp; Saludos y agradecido desde ya, &lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-5865808853238034583?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7blN6VlAooQUEgdrUW_NnODxzdc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7blN6VlAooQUEgdrUW_NnODxzdc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7blN6VlAooQUEgdrUW_NnODxzdc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7blN6VlAooQUEgdrUW_NnODxzdc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/0-1KLS3pf88" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/5865808853238034583/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2010/08/verificar-resolucion-y-cambiar.html#comment-form" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/5865808853238034583?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/5865808853238034583?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/0-1KLS3pf88/verificar-resolucion-y-cambiar.html" title="Verificar resolución y cambiar propiedades de pantalla de Windows" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_PMQWqZl1K78/THKPV-iuOxI/AAAAAAAAADo/dVIz8L2BzL8/s72-c/Scr_01.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2010/08/verificar-resolucion-y-cambiar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAHSX0-eCp7ImA9Wx5RFE4.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-3343808736391719598</id><published>2010-08-21T14:07:00.000-04:00</published><updated>2010-08-21T18:45:38.350-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-21T18:45:38.350-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Pestañas o Solapas" /><category scheme="http://www.blogger.com/atom/ns#" term="Tab Buttons" /><title>Uso de "Solapas" (Tab Buttons) en dbFast utilizando CHILD WINDOWS</title><content type="html">&lt;div style="text-align: justify;"&gt;Como todos ustedes saben, una de las limitaciones de dbFast, además de generar aplicaciones de 16 bits, es que no incluye controles que nos permitan utilizar "&lt;b&gt;solapas&lt;/b&gt;" o "&lt;b&gt;pestañas&lt;/b&gt;", también conocidas como "&lt;b&gt;Tabs&lt;/b&gt;" o "&lt;b&gt;Tab Buttons&lt;/b&gt;".&lt;/div&gt;&lt;br /&gt;
&lt;u&gt;&lt;b&gt;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Uso de Solapas según Stephen Field&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/TG7-tThs38I/AAAAAAAAADg/K9x67X3IL90/s1600/Tabs_01.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/_PMQWqZl1K78/TG7-tThs38I/AAAAAAAAADg/K9x67X3IL90/s200/Tabs_01.jpg" width="137" /&gt;&lt;/a&gt;&lt;/div&gt;Encontré una vieja rutina creada por Stephen Field, era una demo de varias aplicaciones y entre ellas, había una que utilizaba "solapas" para mostrar distintas páginas de información en una misma ventana.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Utilizando el comando &lt;b&gt;CREATE TOOLBAR BUTTON&lt;/b&gt;, Stephen Field logra emular el funcionamiento de las "solapas", pero cada vez que cliqueamos sobre una de ellas, debemos limpiar la ventana con el comando &lt;b&gt;ERASE&lt;/b&gt; y redibujar su contenido, lo cual resulta poco práctico, el rendimiento es deficiente, y el cambio no se ve estéticamente bien, pues genera un parpadeo notorio cuando debemos redibujar una ventana que contiene muchos objetos.&lt;/div&gt;&lt;br /&gt;
&lt;u&gt;&lt;b&gt;&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Implementación de Solapas usando PICTURE BUTTON y CHILD WINDOW&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Buscando otra forma de implementar solapas, me di cuenta de que el principal problema era utilizar comandos &lt;b&gt;GET &lt;/b&gt;dentro de las solapas.&amp;nbsp; A diferencia de los controles, que pueden ser ocultados con la orden &lt;b&gt;HIDE CONTROL&lt;/b&gt;, los comandos &lt;b&gt;GET &lt;/b&gt;no pueden ser ocultados, la única opción era eliminarlos con &lt;b&gt;CLEAR GETS&lt;/b&gt; al cambiar de solapa, y volver a crearlos al entrar nuevamente en la solapa que los contenía.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Pensando y pensando, llegué a la conclusión de que, como la base del funcionamiento de Windows son las ventanas, lo lógico era probar poniendo la información de las solapas en ventanas, así que partí creando una ventana principal que sirviera de contenedor, puse en ella unos botones de imagen o &lt;b&gt;PICTURE BUTTON&lt;/b&gt; con la imagen de cada solapa, y creé una serie de ventanas dependientes o ventanas "hijas" (&lt;b&gt;CHILD WINDOW&lt;/b&gt;) que se van mostrando u ocultando a medida que pulsamos en los &lt;b&gt;PICTURE BUTTON&lt;/b&gt; que actúan como solapas.&amp;nbsp; El resultado fue el siguiente:&lt;/div&gt;&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/TG7a7RyUE3I/AAAAAAAAADI/PzaHyY3h8KM/s1600/Tabs_02.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="275" src="http://2.bp.blogspot.com/_PMQWqZl1K78/TG7a7RyUE3I/AAAAAAAAADI/PzaHyY3h8KM/s400/Tabs_02.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Vista de la primera Solapa&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/TG7d2wXW9rI/AAAAAAAAADQ/sDY4YW-I6d0/s1600/Tabs_03.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="276" src="http://2.bp.blogspot.com/_PMQWqZl1K78/TG7d2wXW9rI/AAAAAAAAADQ/sDY4YW-I6d0/s400/Tabs_03.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Vista de la segunda Solapa&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMQWqZl1K78/TG7eBcIfbZI/AAAAAAAAADY/xEv9KEO9fb8/s1600/Tabs_04.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="276" src="http://1.bp.blogspot.com/_PMQWqZl1K78/TG7eBcIfbZI/AAAAAAAAADY/xEv9KEO9fb8/s400/Tabs_04.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Vista de la tercera Solapa&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;Una vez implementadas las solapas, agregué la funcionalidad de cambiar de solapa mediante teclado, utilizando las teclas &amp;lt;&lt;b&gt;RePág&lt;/b&gt;&amp;gt; y &amp;lt;&lt;b&gt;AvPág&lt;/b&gt;&amp;gt;. &lt;/div&gt;&lt;br /&gt;
Como el resultado fue bastante aceptable, quiero compartir un enlace para descargar el ejemplo anterior , el cual incluye el código fuente del programa y todos los elementos necesarios para ejecutarlo y probarlo. Traté de no utilizar muchas funciones externas para una mejor comprensión del código, sin embargo, utilicé algunas contenidas en otro PRG que también está incluido en el archivo RAR, disponible para descargar desde &lt;b&gt;&lt;a href="http://www.megaupload.com/?d=JTPXHHQB"&gt;MEGAUPLOAD&lt;/a&gt;&lt;/b&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Enlace de descarga: &lt;a href="http://www.megaupload.com/?d=JTPXHHQB"&gt;http://www.megaupload.com/?d=JTPXHHQB&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b&gt;Tema del próximo artículo:&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Detectar la resolución de video, y abrir la utilidad de configuración de pantalla de Windows desde dbFast. &lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;u&gt;&lt;b&gt;OBS&lt;/b&gt;&lt;/u&gt;:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Para seguir publicando artículos, es necesario el apoyo de los lectores mediante comentarios, o registrándose como seguidores del Blog. Toda iniciativa tendrá fuerza en la medida de que los interesados participen activamente.&amp;nbsp; Saludos y agradecido desde ya,&lt;/li&gt;
&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;b&gt;RODRIGO DINAMARCA M.&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-3343808736391719598?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Gy88G3n0KoWZIUjWC-krU_nPhvE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Gy88G3n0KoWZIUjWC-krU_nPhvE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Gy88G3n0KoWZIUjWC-krU_nPhvE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Gy88G3n0KoWZIUjWC-krU_nPhvE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/eFfYp9vME5A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/3343808736391719598/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2010/08/uso-de-solapas-tab-buttons-en-dbfast.html#comment-form" title="3 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/3343808736391719598?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/3343808736391719598?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/eFfYp9vME5A/uso-de-solapas-tab-buttons-en-dbfast.html" title="Uso de &quot;Solapas&quot; (Tab Buttons) en dbFast utilizando CHILD WINDOWS" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_PMQWqZl1K78/TG7-tThs38I/AAAAAAAAADg/K9x67X3IL90/s72-c/Tabs_01.jpg" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2010/08/uso-de-solapas-tab-buttons-en-dbfast.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkENRHk4fyp7ImA9Wx5RFE4.&quot;"><id>tag:blogger.com,1999:blog-8863953648531974422.post-6156498696781468867</id><published>2010-08-19T18:02:00.000-04:00</published><updated>2010-08-21T18:44:55.737-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-21T18:44:55.737-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Anuario" /><category scheme="http://www.blogger.com/atom/ns#" term="Migrar de DOS a Windows" /><title>La transición de un programador de lenguajes xBase para DOS a WINDOWS, un poco de Historia</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PMQWqZl1K78/TG2mJbWWPDI/AAAAAAAAAAU/LWIPqrUupCM/s1600/MS-DOS.gif" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="125" src="http://3.bp.blogspot.com/_PMQWqZl1K78/TG2mJbWWPDI/AAAAAAAAAAU/LWIPqrUupCM/s200/MS-DOS.gif" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como programador de la vieja escuela, aquella en donde reinaba DOS en las computadoras personales, y Unix o Xenix en los grandes computadores de la Universidad, pasé por una amplia gama de lenguajes de programación, entre ellos PASCAL, FORTRAN, COBOL o C, sin olvidar a BASIC en sus versiones MBASIC, GWBASIC, QBASIC y TURBO BASIC.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMQWqZl1K78/TG2oIjyP2aI/AAAAAAAAAA0/7YDVnEARAA4/s1600/Lenguaje_DOS.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/_PMQWqZl1K78/TG2oIjyP2aI/AAAAAAAAAA0/7YDVnEARAA4/s200/Lenguaje_DOS.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Luego, cuando comencé a desarrollar aplicaciones de gestión, me encontré con un sencillo lenguaje interpretado, incorporado dentro de un potente gestor de Bases de Datos llamado &lt;b&gt;dBase III Plus&lt;/b&gt;, el cual organizaba los archivos de datos en un innovador formato con la extensión &lt;b&gt;.DBF&lt;/b&gt;, y que además permitía manejar muy fácilmente las tablas de índices, tarea engorrosa hasta entonces en otros lenguajes.&amp;nbsp; Posteriormente aparecieron otras alternativas a dBase que utilizaban los mismos formatos para el manejo de bases de datos y una sintaxis similar para la programación, destacando entre ellos un confiable &lt;b&gt;FoxPro&lt;/b&gt;, y un potente compilador para dBase que cobró vida propia bajo el nombre de &lt;b&gt;Clipper&lt;/b&gt;.&amp;nbsp; Todos estos lenguajes derivados del dBase, recibieron la denominación de lenguajes &lt;b&gt;xBase&lt;/b&gt;, y se popularizaron entre los programadores en forma paralela al desarrollo de Windows, que para entonces pasaba de ser un &lt;b&gt;ambiente operativo&lt;/b&gt; que corría sobre DOS, a ser el &lt;b&gt;Sistema Operativo&lt;/b&gt; más usado en el mundo.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/TG2obrYEnoI/AAAAAAAAAA8/f-pGLm3F4vY/s1600/Win_31_redimensionar.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="160" src="http://2.bp.blogspot.com/_PMQWqZl1K78/TG2obrYEnoI/AAAAAAAAAA8/f-pGLm3F4vY/s200/Win_31_redimensionar.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La creciente demanda de Windows hizo evidentes sus limitaciones para adaptarse a los nuevos estándares y a la aparición de nuevo y más potente hardware.&amp;nbsp; Windows luchaba por sacar el DOS que llevaba en su ADN pues era su principal lastre -cosa que veíamos con preocupación-, y asimilar los genes perfeccionados de un medio hermano, nacido como consecuencia de la fallida relación entre Microsoft e IBM en la búsqueda de una promesa llamada OS2. Este medio hermano era Windows NT, y se convirtió en la base de lo que conocimos como Windows 2000, Windows XP, y los actuales VISTA y 7.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMQWqZl1K78/TG2ndOd9atI/AAAAAAAAAAs/bPVMu3gJqMw/s1600/Win_95_redimensionar.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="160" src="http://1.bp.blogspot.com/_PMQWqZl1K78/TG2ndOd9atI/AAAAAAAAAAs/bPVMu3gJqMw/s200/Win_95_redimensionar.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como bien sabemos, la evolución de Windows afectó drásticamente el desarrollo de aplicaciones en lenguajes para DOS, y nos vimos enfrentados a una nueva generación de lenguajes cuya creación y funcionamiento estaban basados íntegramente en la orientación a objetos.&amp;nbsp; En estos nuevos lenguajes predominaba una interfaz gráfica sobre la cual diseñábamos ventanas, y programábamos porciones de código que representaban acciones en respuesta a eventos que afectaban a los objetos o elementos la interfaz. &amp;nbsp; También conectábamos diferentes formatos de bases de datos gracias a la magia de algo llamado ODBC.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_PMQWqZl1K78/TG2pMIJ0YuI/AAAAAAAAABE/JffEoAuiSpk/s1600/VB.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="154" src="http://4.bp.blogspot.com/_PMQWqZl1K78/TG2pMIJ0YuI/AAAAAAAAABE/JffEoAuiSpk/s200/VB.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para aquellos de nosotros que habíamos adoptado alguno de los lenguajes xBase para DOS, este cambio representó un duro golpe.&amp;nbsp; No era fácil pasar de las líneas de código propias de nuestros PRG, a los proyectos gráficos, y la curva de adaptación (más que la curva de aprendizaje) se hizo muy difícil de remontar.&amp;nbsp; Ya no teníamos el control de todo nuestro programa, no podíamos manejar los puertos de comunicaciones, tampoco podíamos controlar los procesos de impresión como lo hacíamos antes.&amp;nbsp; Estando así las cosas, nos vimos enfrentados a la tarea de buscar una opción para migrar nuestras aplicaciones a Windows, o bien, a ingeniarnos para solucionar estos problemas y mantenernos firmes con nuestro lenguaje favorito.&amp;nbsp; Aparecieron distintas alternativas, unas mejores que otras, y aunque muchos opinen lo contrario, la adaptación a un nuevo lenguaje o el uso de una librería que nos permitiera acceder al desarrollo de aplicaciones windows, representaban cambios de sintaxis, nuevos objetos, definiciones o declaraciones que modificaban drásticamente el lenguaje al cual estábamos acostumbrados. Ni siquiera la aparición del desafortunado dBase V para Windows, nacido de la mano de Borland, representó una alternativa adecuada para nuestra migración.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;¿En qué estamos ahora?&amp;nbsp; muchos usuarios de Clipper adoptaron librerías mágicas como Clip4win o Fivewin, que transformaban sus aplicaciones DOS a Windows de 16 bits, luego, muchos de ellos migraron a Harbour para superar el obstáculo que impusieron las tecnologías de 32 bits.&amp;nbsp; En cuanto a los usuarios de Foxpro, muchos migraron a Visual Foxpro, el resto de los usuarios trataron de migrar a otras opciones menos afortunadas como CA Visual Objects, o bien, continuaron firmemente aferrados al desarrollo en DOS.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/TG2lj0lfJKI/AAAAAAAAAAM/qjqV3qiDs68/s1600/dBFast_Logo.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_PMQWqZl1K78/TG2lj0lfJKI/AAAAAAAAAAM/qjqV3qiDs68/s320/dBFast_Logo.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;¿Y yo? pues yo conocí un software de desarrollo bastante liviano y fácil de entender, aunque está dentro de la categoría correspondiente a las alternativas "menos afortunadas", esta opción me permitió&amp;nbsp; migrar fácilmente aplicaciones hechas en Clipper a entornos Windows, pues su sintaxis y forma de programación lo dejaba a medio camino entre los lenguajes basados en interfaces gráficas y aquellas basadas en líneas de código.&amp;nbsp; Esta herramienta de desarrollo hacía transparente para aquellos programadores como yo,&amp;nbsp; acostumbrados a la programación estructurada, pero lineal, los elementos de la programación basada en objetos y eventos, e incluia una rudimentaria herramienta para diseñar aplicaciones en forma gráfica que rara vez utilicé.&amp;nbsp; Bueno amigos, ustedes ya lo saben por el título del Blog, mi elección fue CA-dBFast (de Computer Associates), y a pesar de que por requerimientos laborales tuve que migrar a Visual Basic y Visual Foxpro, además de plataformas empresariales más específicas y potentes como SYBASE, SQL y Powerbuilder, me reencontré con este viejo conocido y recordé los años en que probaba funciones y líneas de código que se traducían en aplicaciones Windows.&amp;nbsp; Así pues, la nostalgia me llevó a crear este Blog cuyo objetivo es compartir con aquellos incondicionales de dBFast, mis experiencias y descubrimientos para dotar a este lenguaje, de herramientas y potencialidades que algunos dicen que no posee, pero que con ingenio se pueden implementar.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A pesar de que algunos me dicen que estas son palabras al viento y líneas perdidas, estoy convencido de que la mejor herramienta es aquella que sabemos usar y que nos permite hacer el trabajo, independientemente de que haya mejores o peores, así que espero, humildemente su colaboración y comentarios para demostrar que dbFast sigue vivo y que aquella aplicación creada para Windows 3.1, aún funciona bien en Windows 95, 98, ME,&amp;nbsp; NT, 2000, XP, VISTA y 7, sin modificaciones, services pack o librerías adicionales.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para finalizar y para premiarlos por su paciencia al leer estas líneas, quiero compartir con ustedes una aplicación sacada directamente del disco duro de los recuerdos, la cual representa mi primer intento de incorporar elementos gráficos y multimedia a mis programas hechos en dbFast, en la versión 2.0D-2.&amp;nbsp; Este programa es un sensillísimo ejemplo de Anuario que incluye los ejecutables y las fuentes en PRG, y aunque hay cosas por depurar (tarea que les dejo a ustedes), funciona sin problemas.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pueden descargarlo desde &lt;a href="http://www.megaupload.com/?d=8FOG9YSS"&gt;MEGAUPLOAD&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Acá algunas capturas del Anuario para ustedes:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMQWqZl1K78/TG2se2UCP4I/AAAAAAAAABM/mTp9sr-nbxc/s1600/Anuario_01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="275" src="http://1.bp.blogspot.com/_PMQWqZl1K78/TG2se2UCP4I/AAAAAAAAABM/mTp9sr-nbxc/s400/Anuario_01.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_PMQWqZl1K78/TG2s_wAhyeI/AAAAAAAAABU/18FEnXsZfQI/s1600/Anuario_02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://4.bp.blogspot.com/_PMQWqZl1K78/TG2s_wAhyeI/AAAAAAAAABU/18FEnXsZfQI/s400/Anuario_02.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMQWqZl1K78/TG2tQibnIUI/AAAAAAAAABc/24uNxMgVigs/s1600/Anuario_03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_PMQWqZl1K78/TG2tQibnIUI/AAAAAAAAABc/24uNxMgVigs/s320/Anuario_03.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/TG2te4brtsI/AAAAAAAAABk/k9rLrg4alUw/s1600/Anuario_04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/TG2te4brtsI/AAAAAAAAABk/k9rLrg4alUw/s1600/Anuario_04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_PMQWqZl1K78/TG2te4brtsI/AAAAAAAAABk/k9rLrg4alUw/s320/Anuario_04.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMQWqZl1K78/TG2tzbtADqI/AAAAAAAAABs/dLcJvbsWkPo/s1600/Anuario_05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_PMQWqZl1K78/TG2tzbtADqI/AAAAAAAAABs/dLcJvbsWkPo/s320/Anuario_05.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PMQWqZl1K78/TG2uCkhZ65I/AAAAAAAAAB0/ftfNO38s8uY/s1600/Anuario_06.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_PMQWqZl1K78/TG2uCkhZ65I/AAAAAAAAAB0/ftfNO38s8uY/s320/Anuario_06.jpg" width="227" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMQWqZl1K78/TG2uWft8OsI/AAAAAAAAAB8/1RIcSoyk4cA/s1600/Anuario_07.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_PMQWqZl1K78/TG2uWft8OsI/AAAAAAAAAB8/1RIcSoyk4cA/s320/Anuario_07.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMQWqZl1K78/TG2ur0gX13I/AAAAAAAAACE/H08QeFRp1X8/s1600/Anuario_08.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="295" src="http://2.bp.blogspot.com/_PMQWqZl1K78/TG2ur0gX13I/AAAAAAAAACE/H08QeFRp1X8/s400/Anuario_08.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
Saludos y nos vemos en el próximo artículo.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8863953648531974422-6156498696781468867?l=dbfastchile.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fU_wbD9mJtZESZjueb_uZ-j3iN4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fU_wbD9mJtZESZjueb_uZ-j3iN4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fU_wbD9mJtZESZjueb_uZ-j3iN4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fU_wbD9mJtZESZjueb_uZ-j3iN4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/jPjup/~4/KKvQHNC6T1w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dbfastchile.blogspot.com/feeds/6156498696781468867/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://dbfastchile.blogspot.com/2010/08/la-transicion-de-un-programador-de.html#comment-form" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/6156498696781468867?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8863953648531974422/posts/default/6156498696781468867?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/jPjup/~3/KKvQHNC6T1w/la-transicion-de-un-programador-de.html" title="La transición de un programador de lenguajes xBase para DOS a WINDOWS, un poco de Historia" /><author><name>Rodrigo Dinamarca</name><uri>https://profiles.google.com/103256447079726732947</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-w6H9Fe2MrXE/AAAAAAAAAAI/AAAAAAAAAM8/9QUeTnjOb_4/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_PMQWqZl1K78/TG2mJbWWPDI/AAAAAAAAAAU/LWIPqrUupCM/s72-c/MS-DOS.gif" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://dbfastchile.blogspot.com/2010/08/la-transicion-de-un-programador-de.html</feedburner:origLink></entry></feed>

