type="text/css"/> <link href="page_styles.css" rel="stylesheet" type="text/css"/> </head> <body class="calibre" id="a91"><h1 class="calibre1"><a name="heading_c.oebdocIDAZJZZF" class="calibre2"> </a>Windows</h1><p class="flushright">José Manuel Alarcón Aguín</p><p class="flushright">jalarcon@pcw.idg.es</p><h2 class="calibre3"><a name="heading_c.oebdocIDAIKZZF" class="calibre2"></a>1.- Cómo cambiar el diseño de la barra del navegador </h2><img src="img/image001.JPG" id="a1" alt="" class="calibre4"/><p class="calibre5">En las primeras versiones de Internet Explorer se estilaba el uso de un fondo algo estrambótico en la barra de botones de navegación. Este diseño se puso de moda y muchos programas lo utilizaron a su vez en su interfaz. Posteriormente en las versiones superiores (a partir de IE4) se abandonó el estilo a favor de un fondo liso más sobrio.</p><p class="calibre5">Sin embargo, si usted es un nostálgico o simplemente le apetece utilizar el logotipo de su empresa u otro motivo como fondo para la barra del navegador todavía lo puede conseguir.</p><p class="calibre5">Abra el editor del registro (regedit.exe) y sitúese en la rama HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar. Añada un valor de tipo alfanumérico con el nombre BackBitmap. A este valor asígnele la ruta de un archivo de mapa de bits (BMP), como por ejemplo C:\windows\clouds.bmp.</p><p class="calibre5">A partir de ahora las ventanas del Internet Explorer y del explorador de Windows (son lo mismo) se mostrarán con el gráfico indicado como fondo de las barras de herramientas.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA2KZZF" class="calibre2"></a>2.- Nueva opción en el menú de las carpetas para ir a línea de comandos </h2><img src="img/image002.JPG" id="a2" alt="" class="calibre4"/><p class="calibre5">Muchos usuarios avanzados hacemos uso habitual de la ventana de línea de comandos del sistema (o de MS-DOS en Windows 9x). Sin embargo, accediendo a ella desde el menú Inicio se hace bastante tedioso utilizarla ya que, para llegar a un directorio concreto donde queramos trabajar, se debe escribir toda la ruta al utilizar la orden de línea de comandos CD, o bien usarla varias veces hasta alcanzar el directorio destino.</p><p class="calibre5">Sería muy útil disponer de una opción en el menú contextual de cada directorio que nos abriera una ventana de comandos que ya estuviese situada en ese directorio.</p><p class="calibre5">Existen varias herramientas circulando por la red que permiten obtener esta función pero, a lo mejor, no tenemos ninguna a mano en un momento dado.</p><p class="calibre5">Conseguirlo usando los medios a nuestro alcance es una tarea relativamente sencilla. Se trata de editar el registro de Windows, al igual que en el truco anterior. Abra el registro y sitúese en la clave HKEY_CLASSES_ROOT\Directory\Shell. Una vez allí, cree una nueva subclave con el nombre que prefiera (por ejemplo, linea_de_comandos). Cambie el contenido de su valor por defecto (Default) para poner el texto que le gustaría mostrar en el menú contextual, por ejemplo “<i class="calibre6">Abrir línea de comandos aquí...</i>”.</p><p class="calibre5">Cree una nueva subclave dentro de la anterior y nómbrela command (esta sí debe llevar exactamente este nombre, respetando el que sea en letras minúsculas). Cambie el contenido de su valor por defecto para que ponga:</p><p class="calibre5">- en Windows 9x:</p><p class="calibre5">command.com /k cd “%1”</p><p class="calibre5">-o bien en Windows NT/2000:</p><p class="calibre5">cmd.exe /k cd “%1”</p><p class="calibre5">Ahora, cuando pulse con el botón derecho sobre un directorio cualquiera tendrá la nueva opción disponible.</p> <img src="img/image003.JPG" id="a3" alt="" class="calibre4"/><p class="calibre5">Puede hacer que funcione también con las unidades de disco si modifica del mismo modo la clave HKEY_CLASSES_ROOT\Drive\Shell.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAIMZZF" class="calibre2"></a>3.- Usar nombres largos con facilidad en una ventana de línea de comandos de Windows 9x</h2><img src="img/image004.JPG" id="a4" alt="" class="calibre4"/><p class="calibre5">En ocasiones, al trabajar desde línea de comandos, se da la circunstancia de que necesitamos usar un nombre largo de Windows 9x como argumento para una orden. Por ejemplo, para listar el contenido del directorio Archivos de Programa.</p><p class="calibre5">Si escribimos cd Archivos de Programa para intentar acceder a dicho directorio obtendremos un mensaje de error porque no se encuentra la ruta y además se usan parámetros incorrectos (esto no ocurre en Windows NT/2000).</p><p class="calibre5">Sin embargo, escribiendo el nombre largo entre comillas dobles obtendremos el efecto deseado.</p><p class="calibre5">Otra situación habitual se produce cuando estamos usando un ejecutable en un directorio, pero necesitamos actuar con él sobre un archivo situado en otro directorio. Lo habitual sería que escribiéramos la ruta completa del archivo después del ejecutable a utilizar. Pero existe una manera mucho más sencilla de hacerlo en todas las versiones de Windows, que consiste en arrastrar directamente el archivo desde el explorador de Windows sobre la línea de comandos. Al hacerlo se escribe la ruta completa de manera automática y nos ahorra mucho trabajo, tal y como muestra la figura adjunta.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA3MZZF" class="calibre2"></a>4.- Aumentar la seguridad de las claves en Windows NT/2000</h2><img src="img/image005.JPG" id="a5" alt="" class="calibre4"/><p class="calibre5">En Windows NT y Windows 2000 las claves de usuario se guardan en la base de datos denominada SAM (<i class="calibre6">Security Account Manager</i>). En realidad lo que se guarda ahí no son las claves, sino unos Hash obtenidos a partir de ellas Los Hash son números de longitud fija que se obtienen a partir de unos determinados datos (en este caso las propias claves), y a partir de los cuales no es posible obtener los datos que los generaron. De esta manera, si se guardan los Hash y no las propias claves, no es posible determinar cuáles fueron las claves que los generaron, y para verificar una clave dada basta con comprobar su Hash y ver si coincide con el que está guardado.</p><p class="calibre5">De todos modos, si algún asaltante robase la base de datos del SAM siempre podría intentar un ataque de fuerza bruta, comparando los Hash de todas las claves posibles con los que están almacenados en dicha base de datos. En cuanto encontrara una coincidencia habría determinado una clave.</p><p class="calibre5">Con el Service Pack 3 de Windows NT 4 (ya viene integrado por defecto en Windows 2000), Microsoft incluía una herramienta llamada Syskey cuya misión era aumentar todavía más la seguridad de la base de datos del SAM mediante el procedimiento de cifrarla usando encriptación fuerte. De este modo, si un atacante lograra hacerse con los datos del SAM antes de proceder al ataque de fuerza bruta tendría que averiguar la clave de cifrado de Syskey. Este hecho aumenta la seguridad ante este tipo de ataques en varios órdenes de magnitud, de modo que incluso se ha considerado que sería imposible de llevar a cabo en un tiempo razonable.</p><p class="calibre5">Si quiere añadir este nivel de seguridad a su sistema puede ejecutar la herramienta con sólo ir a Inicio•Ejecutar y escribir syskey en la línea de comandos.</p><p class="calibre5">El lector que requiera más información podrá encontrarla en el artículo de la Knowledge Base <u class="calibre7">support.microsoft.com/support/kb/articles/Q143 /4/75.asp</u>, desde donde podrá descargar la herramienta si no dispone de ella en su sistema.</p><p class="calibre5">Los usuarios de Windows NT 4 deberán tener en cuenta algunos pequeños problemas que podrían tener y sus correspondientes soluciones, para lo cual son recomendables los artículos Syskey Tool Reuses Keystream (<u class="calibre7">support.microsoft.com/support/kb/articles/q248 /1/83.asp</u>) y SYSKEY on Terminal Server Causes Intermittent Logon Problems (<u class="calibre7">support.microsoft.com/support/kb/articles/Q231 /3/74.ASP</u>).</p><h2 class="calibre3"><a name="heading_c.oebdocIDAAOZZF" class="calibre2"></a>5.- Cambiar el estado de la tecla NUMLOCK en Windows NT/2000</h2> <img src="img/image006.JPG" id="a6" alt="" class="calibre4"/><p class="calibre5">En Windows NT y 2000, por defecto, la tecla de bloqueo de números se encuentra desconectada. Esta tecla está situada en la parte superior izquierda del teclado numérico y generalmente tiene impreso el texto Bloq Num. Si se nos olvida activarla es muy probable que en un momento dado vayamos a escribir algún número empleando el teclado numérico y en lugar de ello nos movamos por el texto, ya que cuando el bloqueo está desactivado los botones actúan como flechas del cursor. Esto es especialmente malo si un usuario no lo advierte y escribe su clave de acceso al sistema usando el teclado numérico desactivado. Al no escribir los números que formen parte de su clave no será capaz de entrar hasta que se percate del fallo. </p><p class="calibre5">Para cambiar este comportamiento abra el editor del registro y busque la clave HKEY_USERS\.DEFAULT\Control Panel\Keyboard. Cambie el contenido del valor InitialKeyboardIndicators. Si se le asigna el valor 0, que es el que tiene por defecto, NUMLOCK estará desactivada, pero si se cambia para que valga 2, ahora se encontrará activada nada más iniciarse el sistema.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAPOZZF" class="calibre2"></a>6.- Escribir rápidamente un correo electrónico </h2><img src="img/image007.JPG" id="a7" alt="" class="calibre4"/><p class="calibre5">Si está acostumbrado a enviar correos continuamente mientras trabaja, este truco es para usted. Hay días en los que necesitamos enviar correo a diferentes personas en distintos momentos a lo largo de una misma jornada de trabajo. Sin embargo, no nos apetece tener el gestor de correo abierto todo el tiempo y tampoco queremos tener que ejecutarlo en cada ocasión. Sería mucho mejor disponer de un botón o de una tecla rápida que nos permitiera escribir un correo electrónico bajo demanda sin necesidad de abrir el gestor de correo electrónico que esté configurado por defecto en el sistema. </p><p class="calibre5">Para conseguirlo cree un acceso directo en el escritorio de Windows (o en alguna de las barras de acceso rápido si trabaja con Windows 98 o Internet Explorer 4) y escriba la palabra mailto: en el cuadro línea de comandos, tal y como indica la primera figura (no se olvide de los dos puntos finales). Pulse sobre Siguiente y asígnele un nombre suficientemente descriptivo, como por ejemplo Enviar un nuevo correo electrónico, y pulse sobre Terminar.</p><p class="calibre5">Ahora pulse con el botón derecho sobre el acceso directo recién creado y escoja la opción Propiedades. En la lengüeta Acceso directo a Internet que aparecerá seleccione la opción Cambiar Icono. De este modo se mostrarán los iconos definidos en el sistema para su gestor de correo predeterminado, pudiendo escoger uno de ellos u otro cualquiera que esté en su disco duro (vea la segunda figura). </p><img src="img/image008.JPG" id="a8" alt="" class="calibre4"/><p class="calibre5">Tras colocar el acceso directo en el sitio que le resulte más cómodo bastará con pulsar sobre él para que se abra una pantalla de edición de correo electrónico del programa gestor que tenga como predeterminado en su sistema.</p><p class="calibre5">Si trabaja con Windows 98, también resulta útil asignar una tecla de método abreviado al acceso directo. Para ello, colóquese en el campo que pone Tecla de método abreviado y pulse una letra cualquiera (por ejemplo la M de “mail”). Al pulsar una letra, en este caso la M, automáticamente se le añadirán Ctrl y Alt. Ahora, basta con que pulse la combinación elegida (Control + Alt + M) para que automáticamente pueda escribir un correo electrónico.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAGPZZF" class="calibre2"></a>7.- Crear un mensaje de aviso en NT/2000</h2><p class="calibre5">En determinados sistemas resulta conveniente advertir a los usuarios de ciertas obligaciones y derechos que adquieren por el hecho de acceder al sistema.</p><p class="calibre5">Para que aparezca un mensaje de aviso al iniciar un equipo con Windows NT se debe editar el registro de configuraciones del sistema. </p><p class="calibre5">Ejecute regedit.exe y busque la rama HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/Current Version/Winlogin </p><p class="calibre5">Edite la clave LegalNoticeCaption y asígnele el texto que desee que aparezca como título del mensaje de aviso. Edite la clave LegalNoticeText e introduzca el texto del mensaje.</p><p class="calibre5">La próxima vez que se inicie el sistema y antes de pedir la información de “Login” del usuario se mostrará una ventana con la nota de advertencia que haya escrito en esta clave.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA0PZZF" class="calibre2"></a>8.- Arranque más rápido del sistema </h2><img src="img/image009.JPG" id="a9" alt="" class="calibre4"/><p class="calibre5">En Windows 95/98 cada vez que el sistema operativo se inicia comprueba la existencia de nuevas unidades de disco. Esta operación ocupa al sistema unos segundos durante el proceso de arranque, por lo que hace que se tarde más en iniciar.</p><p class="calibre5">Se pueden ahorrar unos segundos en el inicio del sistema operativo desactivando esta comprobación de existencia de nuevas unidades. Abra la ventana de propiedades del sistema (tecla Windows + Pause) y acceda a las propiedades del sistema de archivo. Deberá entrar en la segunda pestaña, Disco. Allí, desactive la única opción disponible Buscar nuevas unidades de disco cada vez que inicie su PC. Ahora su PC podrá estar en condiciones de funcionar unos segundos antes de lo habitual.</p><p class="calibre5">Si alguna vez desea añadir una nueva unidad de disco al sistema no debe olvidar activar de nuevo este proceso de detección de unidades para evitar posibles problemas.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAPYZZF" class="calibre2"></a>9.- Inicio de sesión automático en Windows NT/2000</h2><img src="img/image010.JPG" id="a10" alt="" class="calibre4"/><p class="calibre5">Windows NT y Windows 2000 requieren que el usuario pulse la combinación de teclas Ctrl + Alt + Supr para mostrar la ventana de autenticación de usuario, en la que además se debe introducir un nombre de usuario y una clave antes de acceder al sistema.</p><p class="calibre5">Muchas personas usan estos sistemas operativos como sistema de sobremesa alternativo a Windows 9x, debido a su rendimiento y estabilidad, sin embargo no se encuentran utilizándolo en un entorno multiusuario e incluso puede que ni siquiera en una red. Por lo tanto sería deseable para ellos eliminar los pasos de inicio descritos de forma que al encender el ordenador este entre directamente con un usuario y una clave determinadas sin interrumpir al usuario por el camino, ya que la seguridad no le preocupa.</p><p class="calibre5">Se puede conseguir el efecto deseado si se cambian un par de claves en el registro. Concretamente se deben añadir las claves del tipo REG_SZ: </p> <p class="calibre5">DefaultDomainName </p><p class="calibre5">DefaultUserName </p><p class="calibre5">DefaultPassword </p><p class="calibre5">a la rama HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon.</p><p class="calibre5">Estas claves especifican, obviamente, el nombre de dominio contra el que se autenticará de forma automática (generalmente pondremos el nombre del equipo local si se trata de un ordenador doméstico), el nombre del usuario y su clave.</p><p class="calibre5">También se debe fijar el valor de la clave AutoAdminLogon a 1. Si no existe esta última clave deberá añadirla manualmente. Es también del tipo REG_SZ.</p><p class="calibre5">Después de estos cambios el sistema arrancará sin pedirle nombre de usuario ni contraseña.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAWZZZF" class="calibre2"></a>10.- Opciones de arranque en Windows 9x</h2><img src="img/image011.JPG" id="a11" alt="" class="calibre4"/><p class="calibre5">Al arrancar un sistema Windows 9x si pulsamos la tecla F8 justo después de que aparezca la frase Iniciando Windows... se nos muestra un menú con varias posibilidades de arranque distintas. Se trata del mismo menú que aparece de manera automática tras un intento fallido de arrancar o apagar el equipo.</p><p class="calibre5">Desde este menú es posible arrancar el sistema de diferentes maneras para intentar solucionar errores y fallos en el inicio.</p><p class="calibre5">Las distintas opciones que aparecen son:</p><p class="calibre5">· <b class="calibre8">Normal</b>: si escogemos esta opción se arrancará el sistema de la forma habitual. Es como si no hubiésemos pasado por el menú de arranque.</p><p class="calibre5">· <b class="calibre8">Sesión iniciada (\Bootlog.txt)</b>: la primera vez que Windows se inicia tras su instalación, guarda un registro de las operaciones que se van efectuando en el proceso de inicio. Dicho registro se guarda en un archivo en el directorio raíz de nombre Bootlog.txt. En las siguientes ocasiones que arranquemos el sistema no se guardará tal registro.</p><p class="calibre5">Al encontrarnos con un problema en el inicio del sistema, podemos intentar averiguar qué ha ocurrido guardando un nuevo registro gracias a esta opción. Posteriormente podremos estudiar con detenimiento lo que se ha guardado en Bootlog.txt y nos será más sencillo determinar dónde ha ocurrido el fallo.</p><p class="calibre5">El lector interesado puede encontrar más información sobre la estructura y contenidos de Bootlog.txt en el siguiente archivo del Kit de Recursos de Windows 9x: <u class="calibre7">msdn.microsoft.com/library/winresource/dnwin95 /S6F45.HTM</u> </p><p class="calibre5">· <b class="calibre8">Modo a prueba de fallos</b>: en esta opción Windows se inicia sin procesar los archivos de configuración inicial y usando controladores de dispositivo genéricos que se sabe van a funcionar en cualquier hardware compatible con los estándares más comunes. De este modo se asegura que si no está dañado ninguno de los dispositivos indispensables para el funcionamiento del equipo (disco duro, tarjeta gráfica...), el sistema se iniciará y podremos intentar solucionar un problema o al menos obtener copias de seguridad de nuestros archivos. </p><p class="calibre5">En este modo a prueba de fallos no dispondremos de conexión a la red local.</p><p class="calibre5">Se puede iniciar directamente en modo a prueba de fallos pulsando F5.</p><p class="calibre5">· <b class="calibre8">Modo a prueba de fallos con soporte para red</b>: es igual al anterior pero con posibilidad de utilizar la red local para transferir datos desde y hacia otros equipos. </p><p class="calibre5">· <b class="calibre8">Confirmación paso a paso</b>: mediante esta opción se nos irá preguntando durante todo el proceso de inicio qué se debe hacer en cada paso: si se debe cargar un determinado controlador de dispositivo o no, si se debe procesar un archivo de inicio o no, etc... Sólo se recomienda para usuarios avanzados, ya que es necesario saber para qué sirve cada uno de los archivos por los que se nos pregunta.</p><p class="calibre5">· <b class="calibre8">Sólo símbolo del sistema</b>: se inicia el sistema procesando sólo los archivos Autoexec.bat, Config.sys y el registro del sistema, de modo que aparecerá la línea de comandos en lugar del entorno gráfico de Windows. Nuevamente sólo se recomienda a usuarios avanzados que sepan manejarse mediante comandos del antiguo MS-DOS.</p><p class="calibre5">· <b class="calibre8">Sólo símbolo del sistema en modo a prueba de fallos</b>: se utiliza para arrancar en línea de comandos, pero en esta ocasión sin procesar siquiera los archivos de inicio, usando sólo el común denominador de forma que sea altamente improbable que el sistema falle. Se puede ir directamente a este modo pulsando Mayúsculas + F5.</p><p class="calibre5">· <b class="calibre8">Versión anterior de MS-DOS</b>: esta opción sólo aparecerá en algunos sistemas, ya que en otros más modernos ni siquiera está contemplada. Se usaba sobre todo en Windows 95 porque muchas personas instalaban MS-DOS 6.2 y posteriormente le añadían Windows 95 por encima. De este modo podían utilizar ciertos programas más antiguos que sólo podían funcionar en MS-DOS 6.2 y no en la línea de comandos de Windows. Es recomendable no usar esta opción aunque le aparezca, porque en las versiones posteriores a Windows 95 OSR2 se corrompen los archivos del sector de arranque de Windows que luego son difíciles de reparar.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA31ZZF" class="calibre2"></a>11.- Denegar el acceso a las propiedades de pantalla</h2><img src="img/image012.JPG" id="a12" alt="" class="calibre4"/><p class="calibre5">Si está al cargo de una pequeña sala de informática en alguna academia o cibercafé, seguro que encontraráútil este truco, ya que impedirá que los usuarios puedan modificar las propiedades de pantalla de Windows. De este modo no serán capaces de acceder al diálogo correspondiente y por lo tanto no podrán cambiar la resolución de la pantalla, ni el número de colores, etc.. asegurándose de que siempre estarán correctamente ajustados. Este truco funciona en todas las versiones de Windows.</p><p class="calibre5">Abra el editor del registro y busque la rama HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Pol icies\System. Si esta última clave, System, no existe créela. Dentro de ella añada un nuevo valor de tipo DWORD y con el nombre NoDispCPL. Si le asigna a este nuevo parámetro el valor 1 sus usuarios solamente verán la ventana de la figura cuando intenten acceder a las propiedades de configuración de pantalla. Puede restituir el sistema a su estado original cambiando el valor del parámetro a 0.</p><h2 class="calibre3"> <a name="heading_c.oebdocIDAM2ZZF" class="calibre2"></a>12.- Denegar el acceso a las herramientas de modificación del registro</h2><img src="img/image013.JPG" id="a13" alt="" class="calibre4"/><p class="calibre5">Este truco es muy similar al anterior, pero en esta ocasión se restringirá absolutamente el acceso al registro de configuraciones. Bueno, en realidad lo que dejará de estar permitido es la utilización de las herramientas del sistema que facilitan la manipulación y el acceso al registro (regedit.exe y regedt32.exe).</p><p class="calibre5">Se trata de añadir el valor DisableRegistryTools (de tipo DWORD también) a la misma clave que hemos utilizado en el truco anterior, esto es, HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Pol icies\System. El valor que debe tener para bloquear las herramientas es 1, usando un 0 para revertirlo a su estado inicial.</p><p class="calibre5">Hay que ser cuidadoso y tener en cuenta que usando este truco se bloquea también el propio acceso al registro, de forma que para obtener una marcha atrás y volver a habilitar el acceso al registro será necesario usar un programa especial, ya que las herramientas habituales no nos lo permitirán. Lo más recomendable para evitar esta situación indeseada es crear el mencionado valor DisableRegistryTools con el dato 0 (valor por defecto), y antes de cambiarlo a 1 para deshabilitar las herramientas del registro, exportar el contenido de su clave asociada (System) a un archivo ‘.reg’ desde la correspondiente opción del menú Archivo de regedit, tal y como ilustra la figura adjunta. Posteriormente, bastará con hacer doble clic sobre el recién creado archivo para disponer de nuevo de acceso a las herramientas de edición del registro.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA42ZZF" class="calibre2"></a>13.- Acceso rápido al escritorio</h2><p class="calibre5">Desde la aparición, con Internet Explorer 4, de las barras de acceso rápido a aplicaciones, se puede acceder rápidamente al escritorio si pulsamos el icono que en la figura adjunta se muestra en quinto lugar por la derecha (recuadrado en rojo). Al utilizarlo, se minimizan al mismo tiempo todas las ventanas que haya abiertas de manera que podemos hacer uso de cualquier icono u objeto que se encuentre en el escritorio. Si lo volvemos a pulsar todas recuperan su estado inicial.</p><p class="calibre5">Se puede conseguir el mismo efecto de manera más rápida si pulsamos al mismo tiempo la tecla de Windows y la letra D. Este método tiene la ventaja de ser más rápido que el anterior, ya que no es necesario que atinemos con el ratón sobre el reducido espacio del icono (de 16 x 16 píxeles solamente).</p><p class="calibre5">Este truco funciona con Windows 98, Windows Me y Windows 2000. En Windows 95 deberemos usar la combinación Windows + M si queremos que todas las ventanas se minimicen.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAQ3ZZF" class="calibre2"></a>14.- Teclas de navegación rápida</h2><img src="img/image015.JPG" id="a14" alt="" class="calibre4"/><p class="calibre5">Cuando utilicemos el explorador de Windows si tenemos instalado Internet Explorer (es decir, en el 90% de los casos), podemos comprobar fácilmente que, en realidad, este explorador es el mismo que se utiliza para navegar por Internet, sólo que con un aspecto ligeramente distinto al que estamos acostumbrados. Si escribimos una URL en la barra de direcciones navegaremos hasta ella, aunque en el instante anterior estuviese mostrando el contenido de un directorio de nuestro disco duro.</p><p class="calibre5">Dado que se trata del mismo programa existen multitud de trucos del navegador que sirven igualmente para el explorador de archivos. Uno de los más útiles aunque infrautilizados es el uso de teclas rápidas para moverse por las carpetas que hemos visitado.</p><p class="calibre5">Al igual que Internet Explorer guarda un historial de las páginas que hemos visitado con la instancia actual del programa, el explorador hace lo propio con las carpetas. De ese modo podemos regresar a una carpeta que hemos visitado anteriormente pulsando sobre las flechas de avance situadas en la parte superior izquierda de la barra del explorador. Al regresar a una vista de carpeta anterior incluso aparecerán seleccionados los mismos objetos que ya lo estuviesen con anterioridad, con el ahorro adicional de tiempo que ello supone.</p><p class="calibre5">Se puede navegar más rápidamente por las vistas si usamos las teclas de avance, que son ALT + Flecha Izquierda para ir hacia atrás, y ALT + Flecha Derecha para moverse hacia delante.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAF4ZZF" class="calibre2"></a>15.- Solucionar el problema de apagado en Windows cuando hay muchas unidades de red asignadas</h2><img src="img/image016.JPG" id="a15" alt="" class="calibre4"/><p class="calibre5">Algunos sistemas Windows (concretamente Windows 95 y Windows 98 SE) dejan de responder si los apagamos y hemos asignado un número elevado de unidades de red desde la opción correspondiente del explorador de Windows. Este comportamiento erróneo ha sido reconocido por Microsoft y, en su día, pusieron a disposición del público el parche correspondiente.</p><p class="calibre5">Si en su red local suele acceder a muchos recursos compartidos que asocia a unidades de red es probable que pueda llegar a sufrir este problema, por lo que le aconsejamos que se actualice cuanto antes. Podrá encontrar el parche en la página <u class="calibre7">www.microsoft.com/Windows98/downloads/contents /WURecommended/q260067/Default.asp</u> </p><p class="calibre5">En la segunda ventana se le pedirá que acepte una acuerdo de utilización del programa y en la lista de la parte superior debe asegurarse de que escoge la descarga de la versión en español (I Accept•downloadSpanish version), ya que en caso contrario se descargará una en inglés que no podrá instalar.</p><h1 class="calibre1"><a name="heading_c.oebdocIDA44ZZF" class="calibre2"></a>Linux</h1> <p class="flushright">Daniel Avila Rubio</p><p class="flushright">davila@idg.es</p><h2 class="calibre3"><a name="heading_c.oebdocIDAK5ZZF" class="calibre2"></a>16 Arrancar el sistema en modo monousuario </h2><img src="img/image017.JPG" id="a16" alt="" class="calibre4"/><p class="calibre5">Los sistemas UNIX y compatibles, como Linux, realizan una serie estándar de pasos para iniciar el sistema. Primero se carga el <i class="calibre6">boot manager</i>, que puede ser Lilo, el gestor de arranque de OS/2 o el BootMagic, por ejemplo. El <i class="calibre6">boot manager</i> se encarga de cargar el <i class="calibre6">kernel</i> (base del sistema) en memoria. Una vez con el <i class="calibre6">kernel</i> en memoria se pasa el control directamente al comando /sbin/init, que es el primer comando que se ejecuta en un sistema UNIX. El proceso init carga los archivos de configuración del sistema localizados en /etc/rc.d (aunque depende de la versión) para arrancar los servicios esenciales del sistema, como la red o tareas básicas de administración, para por fin terminar de iniciar el sistema y presentar el “login” de usuario.</p><p class="calibre5">Existe un método para evitar el arranque normal de un Linux a través de su gestor de arranque, Lilo. Una de las opciones de este gestor es “init=”, mediante la cual podemos indicar a Lilo qué proceso arrancar en lugar del /sbin/init por defecto. Para acceder a las opciones de Lilo debemos pulsar la tecla TAB al reiniciar el sistema para que nos muestre el <i class="calibre6">prompt</i> “Lilo boot:”. Pulsando una vez más TAB vemos una lista de los núcleos disponibles en Lilo, aunque si no hemos instalado alguno adicional, el nombre será “linux”. Introducimos lo siguiente para cargar el bash en lugar del proceso init: </p><p class="calibre5">Lilo boot: linux init=/bin/bash</p><p class="calibre5">Una vez que obtengamos el <i class="calibre6">prompt</i> del shell, estaremos validados como root, por lo que podemos realizar cualquier tarea de mantenimiento. Pero antes de efectuar ningún cambio en el disco duro, lo primero que tenemos que hacer es remontar la partición raíz con las opciones de escritura activas, con el siguiente comando:</p><p class="calibre5">mount / -ro remount</p><p class="calibre5">Después podemos realizar los cambios que deseemos, sin olvidarnos de ejecutar el comando sync antes de finalizar para escribir los <i class="calibre6">buffers</i> almacenados en memoria al disco duro.</p><h2 class="calibre3"> <a name="heading_c.oebdocIDAVA0ZF" class="calibre2"></a>17 Uso del operador <<</h2><p class="calibre5">En un shell de UNIX existen los llamados operadores de direccionamiento, que tienen como fin redirigir la entrada y/o salida estándar de un comando a un fichero. La mayoría de usuarios han empleado alguna vez los operadores >, >> y <, cuya misión es, respectivamente, redirigir la salida de un comando a un fichero, añadir la salida al final de un fichero y redirigir la entrada estándar a un comando.</p><p class="calibre5">Normalmente un comando lee la entrada estándar de un teclado hasta que se produce el final de fichero (<i class="calibre6">End Of File</i>, EOF). En la mayoría de sistemas esto se consigue pulsando la combinación CTR-D. </p><p class="calibre5">Con el operador << podemos simular la introducción de datos en la entrada estándar en un comando que acepte órdenes interactivas (como la mayoría de comandos del shell). Para aplicar este operador necesitamos una cadena de caracteres que vamos a usar como indicador de fin de fichero, que se escribe directamente detrás del operador. A partir de aquí todo lo que tecleemos se irá guardando en un <i class="calibre6">buffer</i> temporal, incluyendo los retornos de carro, hasta que el shell encuentre la cadena en cuestión. Entonces comenzará a procesar el comando con las líneas que hemos introducido tal y como sería interactivamente. Veámoslo con un ejemplo:</p><p class="calibre5">ftp –n <<_EOF</p> <p class="calibre5">open ftp.funet.fi</p><p class="calibre5">user anonymous anonymous@mail.com</p><p class="calibre5">bin</p><p class="calibre5">hash</p><p class="calibre5">cd /pub/</p><p class="calibre5">dir</p><p class="calibre5">bye</p><p class="calibre5">_EOF</p><p class="calibre5">En el ejemplo arrancamos el software cliente ftp con la opción –n para que no pregunte la clave, y establecemos como cadena de fin de fichero _EOF. Los siguientes comandos son internos del ftp y los podemos sustituir por cualquiera que queramos, como descargar o subir archivos. Por lo tanto, con el operador << podemos construir <i class="calibre6">scripts</i> automatizados para realizar tareas frecuentes.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAIC0ZF" class="calibre2"></a>18 Impedir el uso de CTRL+ALT+DEL </h2><img src="img/image018.JPG" id="a17" alt="" class="calibre4"/><p class="calibre5">La famosa combinación de teclas CTRL+ALT+DEL se usa para reiniciar el ordenador, tanto en MS-DOS, Windows 9x y también en Linux.</p> <p class="calibre5">En ocasiones es necesario limitar el uso de estas teclas para evitar el reinicio innecesario de nuestro servidor Linux, sobre todo si está ejecutando algún servicio de red o algún demonio (<i class="calibre6">daemon</i>) que no debe ser reiniciado.</p><p class="calibre5">Para evitar que cualquier usuario tenga acceso a estas teclas, debemos modificar el fichero /etc/inittab y modificar la línea cuyo primer argumento es ca. El último argumento indica al sistema el comando a ejecutar cuando se presiona esta combinación de teclas, por defecto ejecuta la orden shutdown –t3 –r now. En nuestro caso, podemos cambiar el shutdown que hace reiniciar la máquina por el comando que nosotros deseemos, como por ejemplo un mensaje de aviso:</p><p class="calibre5">ca::ctrlaltdel:/sbin/shutdown -t3 -r now</p><p class="calibre5">por</p><p class="calibre5">ca::ctrlaltdel:echo “Acceso denegado”</p><p class="calibre5">Con esto conseguimos, después de haber reiniciado la máquina, que al pulsar la combinación CTRL+ALT+DEL se muestre en pantalla el mensaje Acceso denegado. Para reiniciar el servidor manualmente sólo tenemos que acceder al sistema como root y teclear la orden reboot.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAID0ZF" class="calibre2"></a>19 Mejorar tiempos de compilación</h2><img src="img/image019.JPG" id="a18" alt="" class="calibre4"/><p class="calibre5">Si tiene un sistema multiprocesador o mucha memoria libre (256 MB o más) existe una opción en el comando make que acelerará el proceso de compilación, mediante el lanzamiento en paralelo de varias instancias del compilador así como del <i class="calibre6">linker</i>.</p><p class="calibre5">Para activar esta opción pasamos como argumento a make la letra j seguida del número de trabajos simultáneos que deseemos realizar, por ejemplo: make –j 5</p><p class="calibre5">A mayor cantidad de procesos paralelos, mayor cantidad de memoria necesitaremos. Lo mejor para saber qué número se adecua más a nuestro caso es probar diferentes valores y monitorizarlos con la utilidad top en otra consola, vigilando que el tamaño de la memoria usada no supere a la memoria física.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA2D0ZF" class="calibre2"></a>20 Capturar una pantalla remota de X- Window</h2><p class="calibre5">El sistema X-Window permite el control remoto de aplicaciones mediante una comunicación cliente-servidor basada en el protocolo TCP/IP.</p><p class="calibre5">En ocasiones puede resultar útil capturar una pantalla de un servidor remoto para poder verla en nuestro equipo, para posteriormente guardarla o imprimirla. Para ello, el servidor debe permitir el acceso a los recursos a otros equipos en la red. Una forma fácil de hacer esto es mediante la orden: xhost +.</p><p class="calibre5">Una vez con permisos de acceso concedidos podemos capturar la pantalla a través del comando estándar xwd (man xwd) y mostrarla mediante su homólogo xwud, creando un PIPE entre ellos de esta forma: shell# xwd – display destino:0 | xwud –display origen:0</p><p class="calibre5">donde destino es la dirección IP del <i class="calibre6">host</i> que queremos capturar la pantalla y origen es la dirección del <i class="calibre6">display</i> donde queremos mostrarla. Si es el mismo en el que nos encontramos podemos evitar este parámetro. Al capturar una pantalla con xwd se produce un pitido en el ordenador afectado. </p><h2 class="calibre3"><a name="heading_c.oebdocIDARE0ZF" class="calibre2"></a>21 Iniciar varias sesiones X</h2><p class="calibre5">En el sistema operativo Linux disponemos normalmente de 6 consolas de texto virtuales (aunque es variable de una distribución a otra) que podemos alternar con las teclas CTRL+ALT+Fn, donde F indica las teclas de función correspondiente al número n.</p><p class="calibre5">Estas consolas nos permiten establecer sesiones simultáneas en nuestro sistema, en las cuales podemos ejecutar comandos independientes. Al iniciar el sistema X-Window con la orden startx, se crea una nueva consola virtual en el número 7, a la cual podemos acceder con CTRL+ALT+F7 al igual que las demás. </p><p class="calibre5">Para poder crear más de una consola virtual gráfica, es decir, arrancar varias pantallas (<i class="calibre6">displays</i>) de X-Windows en nuestro sistema, cada una totalmente independiente de otra, necesitamos especificar unos parámetros poco conocidos al <i class="calibre6">script</i> de inicio de este entorno startx. La orden con la opción en concreto es: startx -- :1</p><p class="calibre5">Con esto iniciamos una nueva consola gráfica a la que podemos acceder con CTRL+ALT+F8, la cual tendrá como número de <i class="calibre6">display</i> el 1, es decir la variable DISPLAY en esta consola será unix:1, y en la consola 7 será unix:0 (siendo unix el nombre o la dirección IP de la máquina).</p><p class="calibre5">Si queremos crear más consolas sólo tenemos que ir incrementando el número que pasamos como parámetro a startx, aunque –eso sí– teniendo en cuenta que cada sesión X que arranquemos consumirá mucha memoria.</p><h1 class="calibre1"><a name="heading_c.oebdocIDAPF0ZF" class="calibre2"></a>Internet</h1><p class="flushright">Gonzalo Álvarez Marañón</p><p class="flushright">gonzalo@pcw.idg.es</p> <h2 class="calibre3"><a name="heading_c.oebdocIDA1F0ZF" class="calibre2"></a>22 Cómo ahorrar tiempo consultando el correo web </h2><img src="img/image020.jpg" id="a19" alt="" class="calibre4"/><p class="calibre5">Conéctese al sitio en el que tenga su cuenta de correo web e introdúzcase en ella. Busque la opción para activar la lectura de su correo desde cualquier programa de correo (como Outlook Express, Eudora o Netscape Messenger) utilizando el protocolo POP3. Por ejemplo, en Correo Yahoo!, seleccione Opciones•Acceso POP y reenvíos. Bajo la sección Registrarse, elija Sí Quiero usar el reenvío de mensajes y el acceso POP. En contrapartida le enviarán publicidad, tal es el precio que debe pagar, que no es muy alto, ya que sólo lo hacen de vez en cuando. Por último, pulse Terminado. En la siguiente pantalla seleccione Acceso Web y POP y apriete el botón Enviar. En otros servicios de correo web el proceso es muy parecido. Ahora viene la parte más delicada: configurar su cliente de correo.</p><p class="calibre5"><b class="calibre8">Netscape Messenger. </b>Puede crear una nueva identidad para consultar su correo web. Seleccione Inicio•Programas•Netscape Communicator•Utilidades•Administrador de perfiles de usuario y pulse el botón Nuevo. Vaya rellenando todos los datos de su cuenta en Correo Yahoo!, prestando especial atención a los siguientes: Servidor de correo de salida (SMTP), igual a <u class="calibre7">smtp.correo.yahoo.es</u> y Servidor de correo de entrada, igual a <u class="calibre7">pop.correo.yahoo.es</u>. La próxima vez que inicie Messenger con este nombre de perfil que acaba de crear, podrá enviar y recibir correo desde Messenger a través de su cuenta Yahoo!.</p><p class="calibre5"><b class="calibre8">Outlook Express. </b>En Herramientas•Cuentas seleccione Agregar y después Correo. A continuación, escriba el nombre que quiera asociar a su cuenta de correo web, por ejemplo, Juan Martín Campos. En la siguiente pantalla introduzca su dirección de correo web, por ejemplo, jmarcam@yahoo.es. En la siguiente, seleccione POP3 como servidor de correo entrante e introduzca su dirección, <u class="calibre7">pop.correo.yahoo.es</u>. Introduzca después la dirección del servidor SMTP para el correo saliente, en este caso, <u class="calibre7">smtp.correo.yahoo.es</u>. En la siguiente pantalla, introduzca su nombre de cuenta y contraseña que utiliza para conectarse a Correo Yahoo!. En la última pantalla pulse el botón de Finalizar y ya tiene su cuenta configurada para poder acceder a su correo en Yahoo! desde Outlook Express.</p><p class="calibre5">En adelante, ya no perderá tiempo introduciendo la contraseña y esperando a que se carguen las páginas. Debe trabajar sin conexión, de manera que sólo se conecta al principio durante unos segundos para descargar todo el correo nuevo que pueda tener y al final durante unos instantes para enviar todos los mensajes que haya escrito. Para trabajar con/sin conexión, simplemente haga doble clic sobre los iconos que aparecen en la barra de estado. En el caso de Messenger, un cable con un enchufe abierto o cerrado. En Outlook Express, un ordenador conectado a red. Si está desconectado y solicita enviar/recibir mensajes, entonces el módem le pedirá confirmación antes de conectarse de nuevo.</p> <h2 class="calibre3"><a name="heading_c.oebdocIDAZG0ZF" class="calibre2"></a>23 Errores de JavaScript bajo control </h2><img src="img/image021.JPG" id="a20" alt="" class="calibre4"/><p class="calibre5">Resulta frecuente encontrarse con páginas que, debido a un mal diseño o errores de programación, arrojan errores en JavaScript. Y no hay nada más desagradable que recibir un aluvión de ventanas de error. Sin embargo, así como al internauta medio estos mensajes de error no sirven más que para desconcertarle, al desarrollador le pueden resultar de gran utilidad para localizar el fallo y solucionarlo. </p><p class="calibre5"><b class="calibre8">Netscape Communicator. </b>Netscape incorpora una consola de JavaScript especialmente pensada para los desarrolladores, que informa de los errores y su causa, a la que se puede acceder tecleando simplemente javascript: en la ventana de dirección. Por defecto, los errores no se muestran en ventanas insidiosas, sino que se vuelcan a la consola, a la que se puede acceder en cualquier momento. </p><p class="calibre5">Si se desea que la consola aparezca automáticamente en cuanto se produzca el primer error de JavaScript, se puede modificar a mano el archivo de preferencias: cierre primero todas las ventanas de Netscape que tenga abiertas y entonces (y sólo entonces) abra el archivo prefs.js, que se encuentra en su directorio personal allí donde haya instalado Netscape, por ejemplo, C:\Archivos de programa\Netscape\Users\gonzalo\prefs.js. Una vez abierto, añada la siguiente línea:</p><p class="calibre5">user_pref("javascript.console.open_on_error", true);</p><p class="calibre5">y cierre el fichero, salvando los cambios. La próxima vez que se produzca un error de JavaScript, aparecerá la consola informando del mismo.</p><p class="calibre5">Ahora bien, si le gusta la ventana de error tradicional, abra entonces el archivo de preferencias y añada la siguiente entrada en vez de la anterior:</p><p class="calibre5">user_pref("javascript.classic.error_alerts", true);</p><p class="calibre5"><b class="calibre8">Internet Explorer. </b>Para desactivar las ventanas de error, seleccione Herramientas•Opciones de Internet•Avanzadas y busque el grupo Examinar. Busque la casilla Deshabilitar depuración de secuencias de comandos y márquela. En adelante, cuando se produzca un error de JavaScript, se informará de ello silenciosamente en la barra de estado, pero no se presentará una ventana. Si se desea obtener información sobre el error, entonces haga doble clic sobre el icono de admiración de la barra de estado y se abrirá una ventana informando de lo que ha ocurrido. </p><h2 class="calibre3"><a name="heading_c.oebdocIDA1H0ZF" class="calibre2"></a>24 Cómo escribir direcciones más rápidamente</h2><p class="calibre5">¿Cansado de teclear una y otra vez las tres “w” y el <i class="calibre6">puntocom</i> del final? Pues descanse utilizando el siguiente truco.</p><p class="calibre5"> <b class="calibre8">Netscape Communicator. </b>Si la dirección que busca empieza por www. y termina en .com, no tiene más que escribir la palabra que va en medio y pulsando Enter, el navegador hará el resto.</p><p class="calibre5"><b class="calibre8">Internet Explorer. </b>En este caso, debe escribir la palabra central entre www. y .com y pulsar Ctrl + Enter para que el navegador complete automáticamente lo que falta.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAQQ0ZF" class="calibre2"></a>25 Cómo personalizar la barra de vínculos </h2><img src="img/image022.JPG" id="a21" alt="" class="calibre4"/><p class="calibre5">Tanto Netscape Communicator como Internet Explorer incluyen una barra de vínculos (llamada barra personal en Netscape) en la cual el usuario puede configurar sus propios botones a modo de atajos para llegar inmediatamente a las páginas que se visitan con mayor asiduidad.</p><p class="calibre5"><b class="calibre8">Netscape Communicator. </b>Para añadir nuevos enlaces, simplemente navegue hasta la página que desea incluir y entonces sitúe el ratón sobre el icono de marcador. Verá que el puntero adquiere la forma de una mano agarrando algo. Arrastre la mano hasta la barra personal y suéltela en la posición que desee. Puede añadir tantos botones como quiera. Si por algún motivo la barra personal no está visible, seleccione Ver•Mostrar•Barra Personal.</p><p class="calibre5"><b class="calibre8">Internet Explorer. </b>El truco consiste en navegar hasta la página que se desea añadir y entonces arrastrar el icono de la ventana de dirección (que tiene forma de página con una “e” azul superpuesta) hasta la barra de vínculos. Internet Explorer proporciona un nivel de personalización mucho mayor, ya que permite modificar incluso el icono asignado. Para ello, pulse con el botón derecho del ratón sobre el botón que acaba de crear y en el menú emergente seleccione Propiedades. Se abrirá una ventana en la que puede modificar el nombre del botón, el URL a que hace referencia o su icono. Si no puede ver la barra de vínculos, acuda a Ver•Barras de herramientas•Vínculos o bien pulse sobre cualquier barra con el botón derecho del ratón y en el menú emergente seleccione Vínculos.</p><h2 class="calibre3"><a name="heading_c.oebdocIDADR0ZF" class="calibre2"></a>26 Cómo navegar desconectado </h2><img src="img/image023.JPG" id="a22" alt="" class="calibre4"/><p class="calibre5">Cuando visita una página web, ésta puede tardar algunos segundos en cargarse, mientras que usted puede tardar varios minutos en leerla. Entretanto, su factura telefónica sigue creciendo. En estos casos, puede resultarle útil navegar desconectado.</p><p class="calibre5"><b class="calibre8">Netscape Communicator. </b>Aunque Communicator no ofrece directamente la utilidad de sincronizar páginas web para navegar desconectado, lo cierto es que con el siguiente truco se puede conseguir algo. Vaya a la página de su elección y una vez en ella siga todos los enlaces que crea que le puedan interesar, pero sin detenerse a leer el contenido de las páginas. De esta forma, el texto y las imágenes, junto con otros ficheros adicionales, como hojas de estilos, ficheros de JavaScript o applets de Java se cargarán en la caché. Ahora ya puede desconectar el módem, seleccionar Archivo•Desconectar•Trabajar desconectado y volver a la página inicial. Allí estarán todos los elementos y podrá seguir los mismos enlaces que siguió anteriormente, tomándose todo el tiempo del mundo para leer las páginas con tranquilidad. Si ha contratado tarifa plana, podría aprovechar para realizar esta “precarga” de las páginas en el caché en las horas planas y luego leer su contenido durante las horas en que no se aplica la tarifa plana. Un atajo para seleccionar el trabajo conectado o desconectado consiste en pulsar con el ratón sobre el icono del enchufe en la barra de herramientas.</p><p class="calibre5"><b class="calibre8">Internet Explorer. </b>Si existe una página que le interesa poder consultar habitualmente, pero sin estar pendiente del reloj, guárdela en su carpeta de Favoritos, seleccionando Favoritos•Agregar a Favoritos y asegurándose de que marca la casilla Disponible sin conexión. Pulse entonces el botón Personalizar y siga las instrucciones del asistente, que le guiará para configurar entre otras cosas si desea que las páginas referenciadas estén también disponibles sin conexión, qué niveles de vínculos desea disponer sin conexión, cuándo desea que se sincronicen las páginas: cuando usted lo indique o automáticamente al iniciar sesión o a intervalos regulares u horas del día que usted programe, etc. De esta forma, puede conservar en su disco una copia siempre al día de las páginas web que más le interesen, que se actualizará cuando usted lo desee. Puede elegir trabajar sin conexión en Archivo•Trabajar sin conexión. En la barra de estado aparecerá un icono que le informa de que está navegando sin conexión.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAWR0ZF" class="calibre2"></a>27 Cómo saber la dirección de la página </h2><img src="img/image024.JPG" id="a23" alt="" class="calibre4"/><p class="calibre5">Con tanto marco (o <i class="calibre6">frame</i>) y tanta ventana que aparece sin barras de botones ni de dirección, a veces nos resulta difícil llegar a saber cuál es la verdadera dirección de una página. Por mucho que naveguemos, en la barra de dirección siempre aparece el mismo URL. Si se quiere guardar en los marcadores esta página concreta, no la página de inicio del sitio, o se le quiere pasar el enlace a un amigo, ¿cómo saber cuáh es la dirección? </p><p class="calibre5"><b class="calibre8">Netscape Communicator. </b>Si la página está dentro de un marco, pulse con el botón derecho del ratón sobre la página en cuestión y en el menú emergente que aparece seleccione Abrir marco en ventana nueva. Se abrirá una nueva ventana de Communicator, en la cual ya podrá ver en la ventana de dirección el URL de la página, ya que no aparece dentro de marcos. Otra posibilidad consiste en ver la página directamente en una nueva ventana: cuando vaya a seguir un enlace, en vez de pulsar sobre él con el botón izquierdo del ratón, como haría normalmente, pulse con el derecho y el menú emergente seleccione Abrir en nueva ventana o Abrir marco en nueva ventana, indistintamente. Si la página no tiene ninguna barra, y por lo tanto no aparece la ventana de dirección donde poder leer el URL, aún puede verlo si pulsa en cualquier lugar de la página con el botón derecho y selecciona Ver información.</p><p class="calibre5"><b class="calibre8">Internet Explorer. </b>A diferencia de Communicator, IE no le permite escapar de una página de marcos. De manera que si quiere conocer la dirección de una página web que ya ha visitado, pulse en cualquier punto de ella con el botón derecho del ratón y seleccione Propiedades. Se abrirá una ventana en la que puede consultar información sobre la página, entre otros datos, su URL. El otro truco también se puede utilizar con IE. Antes de seguir el enlace, pulse sobre él con el botón derecho del ratón y elija Abrir en una ventana nueva. </p><h2 class="calibre3"><a name="heading_c.oebdocIDALS0ZF" class="calibre2"></a>28 Cómo ganar espacio en la pantalla </h2> <img src="img/image025.JPG" id="a24" alt="" class="calibre4"/> <p class="calibre5">Aunque el precio del hardware desciende cada día, los monitores parecen no darse por enterados. Los de 17 pulgadas son todavía un lujo y los de 21, mejor no hablar de ellos. En estas condiciones, hay que ganar espacio a toda costa.</p><p class="calibre5"><b class="calibre8">Netscape Communicator. </b>Lo primero de todo, haga que los botones ocupen menos. Vaya a Edición•Preferencias•Apariencia y seleccione Sólo imágenes o Sólo texto, lo que prefiera. No es mucho, pero peor es nada. Si hoy se siente aventurero y considera que puede prescindir por completo de la barra de navegación, entonces elimine su selección en Ver•Mostrar•Barra Navegación. Y adiós a la barra. Si no le interesa el resto de barras, la de dirección y la personal, repita la operación para cada una de ellas; aunque bien puede pensar que estas medidas son un tanto drásticas. Una solución de compromiso consiste en ocultar las barras, pero sin llegar a eliminarlas. Para ello, restitúyalas a la pantalla, si las había borrado, y pulse con el ratón sobre el borde de la izquierda. La barra se oculta, pero volviendo a pinchar sobre el borde, que ahora ha cambiado de orientación, las devolverá a la pantalla.</p><p class="calibre5"><b class="calibre8">Internet Explorer. </b>En primer lugar, conseguirá que los botones de la barra estándar ocupen menos espacio. Seleccione Ver•Barras de herramientas•Personalizar. En la ventana que se abre, seleccione Sin etiquetas para el campo Opciones de texto e Iconos pequeños para el campo Opciones de icono. Pulse Cerrar y habrá ganado su primera minucia de espacio. Para ganar un poquitín más, puede ocultar todas o algunas de las barras de herramientas, desactivándolas en Ver•Barras de herramientas. Un atajo para configurar estos pormenores consiste en pulsar sobre cualquier barra con el botón derecho del ratón. Se ofrecerán las mismas opciones que siguiendo el menú. Y si aún cree que no ha ganado espacio suficiente, le queda el último recurso, la Pantalla Completa. Pulse F11 o seleccione Ver•Pantalla completa. También existe un botón que se puede poner en la barra estándar, para activar directamente la pantalla completa. Si hace la prueba, verá que Internet Explorer ocupa toda la pantalla y han desaparecido todas las barras, incluida la de menús y la de estado, excepto la estándar. Se preguntará: “¿Y ahora cómo vuelvo a la pantalla normal?” Si se fija, en la parte superior derecha tiene un botón de restauración, que al ser pulsado devuelve el navegador al tamaño original. Opcionalmente, pulsando con el botón derecho del ratón sobre la barra estándar podrá ir añadiendo una tras otra el resto de barras.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA4S0ZF" class="calibre2"></a>29 Cómo evitar ser desconectado por inactividad </h2><img src="img/image026.JPG" id="a25" alt="" class="calibre4"/><p class="calibre5">Con eso de la tarifa plana, a veces uno se conecta a la Red y mantiene la conexión aunque no esté utilizando en absoluto la conexión a Internet. Se dará cuenta de que con mayor frecuencia de la esperada, uno es desconectado por las buenas, debido al largo tiempo de inactividad, por lo que para seguir navegando hay que empezar de nuevo el tedioso proceso de conexión. ¿Podrían evitarse estas molestas desconexiones? Claro que sí. Existen docenas de programas de antidesconexión que se instalan en el ordenador y velarán por que nunca vuelva a ser desconectado, simulando actividad a intervalos programables para que su proveedor de acceso a Internet crea que está continuamente utilizando su conexión. Algunos de los más populares son: Connection Keeper 4.0 (<u class="calibre7">http://www.gammadyne.com/conkeep.htm</u>), StayOn Pro 3.26 (<u class="calibre7">stayonpro.com</u>) o Stay Connected! 3.0 (<u class="calibre7">www.inklineglobal.com/products/sc</u>).</p><h2 class="calibre3"><a name="heading_c.oebdocIDAST0ZF" class="calibre2"></a>30 Cómo encontrar un sitio web desconociendo su dirección</h2><img src="img/image027.jpg" id="a26" alt="" class="calibre4"/><p class="calibre5">Recuerda que un sitio web se llama “xyz”, pero no sabe cuál es su dirección web. Ha probado ya con <u class="calibre7">www.xyz.com</u>, <u class="calibre7">www.xyz.es</u>, <u class="calibre7">www.xyz.net</u>, e incluso <u class="calibre7">www.xyz.org</u>, pero nada, no hay manera, la página no aparece. Ya no sabe qué otra combinación probar. ¿Necesitará acudir a un buscador e introducir la palabra para ver si así da con el dichoso sitio? No hace falta.</p><p class="calibre5"><b class="calibre8">Netscape Communicator. </b>Las nuevas capacidades de navegación inteligente de Communicator resolverán el problema. Simplemente teclee en la ventana de dirección el nombre del sitio web o alguna palabra significativa del mismo, como “xyz”, y aparecerá una lista con las páginas más probables de corresponder a la dirección correcta, por ejemplo, <u class="calibre7">www.abc.com/xyz</u>. Claro, ¿a quién se le iba a ocurrir meter ese URL?</p><p class="calibre5"><b class="calibre8">Internet Explorer. </b>Pulse sobre el botón de Búsqueda de la barra de herramientas y verá cómo a la izquierda le aparece una nueva ventana, dispuesta como si fuera un marco o <i class="calibre6">frame</i>. En Buscar páginas Web que contengan escriba la palabra que desea, por ejemplo “xyz” y se le devolverá una lista con las páginas más probables.</p><h2 class="calibre3"><a name="heading_c.oebdocIDASU0ZF" class="calibre2"></a>31 Cómo enviar una página web por correo electrónico</h2><img src="img/image028.JPG" id="a27" alt="" class="calibre4"/><p class="calibre5">Sucede a menudo que nos topamos con una página interesante que deseamos enviar a un amigo, o a nosotros mismos, para verla en otro ordenador. ¿No estará pensando en copiar la dirección y abrir el cliente de correo para enviársela? No, claro que no. Existen atajos mucho más rápidos.</p><p class="calibre5"><b class="calibre8">Netscape Communicator. </b>Con el navegador en la página que le gustaría enviar, seleccione Archivo•Enviar página. Se le abrirá la ventana de redacción de mensajes, en la que no tiene más que incluir la dirección de envío y ya está listo. Aunque en la ventana Redacción no lo parezca, el destinatario recibirá una réplica exacta de la página web en su buzón. </p><p class="calibre5"><b class="calibre8">Internet Explorer. </b>Ya se encuentra en la página que desea enviar. Bien, es tan sencillo como apretar el botón Correo y elegir cualquiera de las opciones que se le ofrecen: Enviar un vínculo, para enviar nada más que la dirección de la página web visitada o Enviar página, para mandar la página completa, con imágenes y todo, de manera que el usuario la vea en su cliente de correo igualita que si estuviera usando el navegador. Alternativamente, puede seleccionar Archivo•Enviar y luego la opción de envío que desee, sólo el enlace o la página completa. </p><h2 class="calibre3"><a name="heading_c.oebdocIDAFV0ZF" class="calibre2"></a>32 Cómo buscar grupos de noticias de su interés</h2><img src="img/image029.jpg" id="a28" alt="" class="calibre4"/><img src="img/image030.JPG" id="a29" alt="" class="calibre4"/><p class="calibre5">Existen miles y miles de grupos de noticias en Internet. Con tantos grupos, ¿cómo encontrar aquellos en los que se discute sobre algún tema de su interés?</p><p class="calibre5"><b class="calibre8">Netscape Messenger. </b>Pulse sobre el botón Leer grupos de noticias de la barra de componentes o seleccione Communicator•Grupos de noticias. En la ventana de Messenger, seleccione Archivo•Suscribirse. Se abrirá una ventana de diálogo con varias pestañas. Seleccione la pestaña Buscar y una vez en ella introduzca la palabra clave que identifique el tema sobre el que quiere encontrar grupos. Pulse el botón Buscar ahora y aparecerán listados todos los grupos de noticias con esa palabra en su nombre. Para suscribirse a uno de los grupos, selecciónelo de la lista y pulse el botón Suscribirse. Para terminar, apriete el botón Aceptar y ya habrá quedado suscrito a ese grupo. Puede repetir la operación para suscribirse a más grupos o para buscar grupos sobre otros temas.</p><p class="calibre5"><b class="calibre8">Outlook Express. </b>Se supone que usted ya ha creado una cuenta para acceder a un servidor de noticias. Seleccione Herramientas•Grupos de noticias y en la ventana que se abre, en el campo Mostrar los grupos de noticias que contengan, escriba la palabra clave que desea buscar. Automáticamente se listarán todos los grupos que contengan en su nombre esa palabra. Es posible que el tema que busca no aparezca directamente en el nombre del grupo, por lo que también se pone a su disposición la posibilidad de buscar en la descripción del grupo, cuando ésta se encuentre disponible. Ahora ya no tiene más que seleccionar los grupos a los que desea suscribirse y pulsar el botón Suscribir. Para finalizar, apriete el botón Aceptar y sus cambios se harán efectivos. </p><h2 class="calibre3"><a name="heading_c.oebdocIDAZV0ZF" class="calibre2"></a>33 Cómo ahorrar en el espacio que ocupa el correo en disco </h2><img src="img/image031.JPG" id="a30" alt="" class="calibre4"/><p class="calibre5">Con el tiempo, si conserva todos los mensajes que ha ido recibiendo y enviando, se dará cuenta de que ocupan más y más megas. No olvide que cuando elimina un mensaje, en realidad no se borra, sino que se copia en la carpeta Trash (en Messenger) o Elementos eliminados (en Outlook Express). En primer lugar, debe vaciar esas carpetas para que los correos desaparezcan físicamente, eso sí, tenga en cuenta que ya no se podrán recuperar. En segundo lugar, si ha recibido mensajes con ficheros adjuntos, guarde en disco los ficheros y borre los mensajes. Así ahorrará muchísimo espacio, especialmente cuando se trate de archivos voluminosos. Por último, existe una forma sencilla de ahorrar espacio, sin borrar mensajes, consistente en compactar las carpetas.</p><p class="calibre5"><b class="calibre8">Netscape Messenger. </b>Puede compactar periódicamente las carpetas seleccionando Archivo•Compactar carpetas.</p><p class="calibre5"><b class="calibre8">Outlook Express. </b>Seleccione Archivo•Carpeta•Compactar si desea compactar una carpeta específica o bien Archivo•Carpeta•Compactar todas las carpetas si desea compactarlas todas.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAMW0ZF" class="calibre2"></a>34 Cómo crear plantillas para sus correos electrónicos </h2><img src="img/image032.JPG" id="a31" alt="" class="calibre4"/><p class="calibre5">Todos los días tiene que enviar unos cuantos correos con unos informes y unas cabeceras estándares. No irá a decir que los teclea cada vez. ¡Qué va! Para eso se crearon las plantillas. Aprenda cómo crearlas en su correo.</p><p class="calibre5"><b class="calibre8">Netscape Messenger. </b>Cree un mensaje con la apariencia y el texto que quiere que aparezca en todos sus mensajes futuros. Puede utilizar imágenes de fondo, logotipos, fotos... lo que quiera. Cuando haya terminado, seleccione Archivo•Guardar como•Plantilla. El mensaje que acaba de crear se almacenará en la carpeta de Plantillas (Templates). En adelante, cuando quiera usarla, simplemente selecciónela de la carpeta de Plantillas (Templates) haciendo doble clic sobre ella y edítela, para finalmente enviarla, tras haber rellenado conveniente los campos del destinatario y el asunto.</p><p class="calibre5"><b class="calibre8">Outlook Express. </b>Cuando tenga abierta la ventana de redacción con el mensaje que ha creado como plantilla, seleccione Archivo•Guardar, y el mensaje quedará automáticamente almacenado en la carpeta Borrador. Posteriormente, podrá editar el mensaje y enviarlo a su destinatario.</p><h1 class="calibre1"><a name="heading_c.oebdocIDACX0ZF" class="calibre2"></a>Microsoft Word 2000</h1><p class="flushright">Francisco Martín Peña</p><p class="flushright">fmartin@pcw.idg.es</p><h2 class="calibre3"> <a name="heading_c.oebdocIDAOX0ZF" class="calibre2"></a>35 Autotexto e iconos a la carta </h2><img src="img/image033.JPG" id="a32" alt="" class="calibre4"/><p class="calibre5">¿Cómo se puede colocar un icono en la barra de herramientas que me permita insertar fácilmente textos y otros objetos con sólo hacer clic en él? Para ello debe realizar dos tareas. La primera, crear un autotexto con un nombre (por ejemplo, Cláusula); la segunda, hacer que el nombre elegido para el autotexto aparezca en la barra de herramientas.</p><p class="calibre5">a) Para crear un autotexto, seleccione el texto y pulse Insertar•Autotexto•Nuevo (o, más brevemente, pulse Alt+F3) para activar un cuadro donde deberá escribir el nombre del autotexto (en nuestro caso, Cláusula).</p><p class="calibre5">b) Para crear un icono con el autotexto antes establecido, pulse Herramientas•Personalizar•Comandos. En el cuadro que aparece, la pestaña Comandos presenta una lista de categorías entre las cuales, casi al final, se encuentra Autotexto. Si selecciona esta categoría, verá los nombres de todos los autotextos disponibles, entre ellos nuestra ‘Cláusula’: arrástrela con el ratón hasta la barra de herramientas y ya tiene un icono casero que seguramente le será muy útil.</p><p class="calibre5">Observe que, a pesar de su nombre, puede crear un autotexto donde se encierre un gráfico (como, por ejemplo, un corazón). El resultado es el mismo, según puede observar en la imagen de ilustración: cada vez que pulse ‘su’ icono Corazón el programa se lo dibujará.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAFY0ZF" class="calibre2"></a>36 Cortar de aquí y de allá</h2><p class="calibre5">Con frecuencia necesitamos almacenar en el portapapeles distintos trozos de texto dispersos por todo el documento. ¿Cómo hacerlo? Sencillamente, seleccionando el texto y pulsando Ctrl+F3. Repita esta operación para llevar otro texto más en el portapapeles, y así hasta que los haya ‘picoteado’ todos. Dentro del portapapeles Windows estos textos se irán añadiendo al renglón siguiente, de tal modo que forman una unidad textual que podrá pegar en cualquier sitio. </p><p class="calibre5">Dos advertencias: a) Los gráficos y las tablas reciben el mismo tratamiento que si fueran texto; b) Este procedimiento ‘corta’ los textos seleccionados, es decir, los hace desaparecer de la vista para ‘esconderlos’ en el portapapeles; si desea conservarlos deberá recurrir a otro truco mostrado más adelante que hace intervenir el portapapeles de Office.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAQY0ZF" class="calibre2"></a>37 Portapapeles Office? </h2><img src="img/image034.JPG" id="a33" alt="" class="calibre4"/><p class="calibre5">Su utilidad está emparentada con truco anterior. El Portapapeles de Office es capaz de conservar, perfectamente separados, hasta doce fragmentos textuales que, si el usuario desea, puede insertar de un solo golpe. Para ello se vale de una pequeña ventana con cabecera Portapapeles (x de 12). Su funcionamiento es totalmente intuitivo, por lo que sólo indicaremos aquí cómo se activa. Quizás sea debido a que muchos usuarios ignoran cómo activar el Portapapeles Office el hecho de que esta interesante función se encuentre olvidada para el común de los oficinistas y escritores que usan Word.</p><p class="calibre5">Para su activación, coloque el cursor en algún lugar de la barra de herramientas, pulse el botón derecho del ratón y elija Portapapeles de la lista desplegada. También puede ir a Herramientas•?Personalizar y en la lista que ofrece la pestaña Barras de herramientas seleccionar Portapapeles. Inmediatamente aparecerá una minúscula ventana con cuatro nichos, que, según vaya incorporando fragmentos, mediante la función de copiar (Ctrl.+Ins), se irán ampliando hasta doce.</p><p class="calibre5">Lo bueno de este recurso es que muestra visualmente el tipo de objeto almacenado (texto, gráfico, etc.). Y si pasa el cursor por cada nicho activará una leyenda que le orientará aún más sobre su contenido. Puede copiar algunos fragmentos, todos a la vez, o simplemente vaciar este portapapeles. También puede situar esta pequeña ventana como una barra de herramientas más, con arrastrarla sencillamente hasta donde están las barras.</p><h2 class="calibre3"><a name="heading_c.oebdocIDABZ0ZF" class="calibre2"></a>38 Corregir al corrector</h2><p class="calibre5">Puede evitar que Word ‘auto-corrija’ lo que uno va escribiendo. Por ejemplo, si desea escribir PCi y PCf (producción en curso inicial y final) y él se empeña en escribir Pci y Pcf. Otro ejemplo lo habrá encontrado también en la numeración automática de párrafos cuando en ocasiones lo único que desea es poner unos determinados números al inicio de los mismos, pero controlando la numeración personalmente. No se enfade con Word:, la primera vez que lo haga pulse el icono Deshacer y Word, obediente, entenderá que no lo debe hacer más.</p><p class="calibre5">También puede seleccionar el carácter en minúscula (Pci) y reponerlo con mayúscula (PCi). Cualquiera de estas dos acciones harán que Word detecte este caso como una excepción y lo incluya en un diccionario de las mismas que puede consultar y enriquecer. Pruébelo activando Herramientas•Autocorrección y en la primera pestaña pulse el botón Excepciones. </p><p class="calibre5">El control del diccionario ortográfico es algo más complejo, pero igual de comprensible. Escoja Herramientas•Opciones•Ortografía y gramática. En esta pestaña haga clic sobre el botón Diccionarios y seleccione el que se llama personal.dic. En el nuevo cuadro de diálogo haga clic sobre el botón Modificar y obtendrá, tras un aviso sobre lo que va a hacer, una pantalla con las palabras que haya agregado al diccionario corrector. Haga los retoques oportunos y hasta aproveche para agregar directamente otras palabras que vaya a necesitar (tecnicismos, términos anglosajones, etc.), una por párrafo. Guarde y cierre esta ventana: </p><p class="calibre5">Observe que Word no le devolverá a Herramientas•Opciones sino al documento desde el cual inició el procedimiento explicado.</p><h2 class="calibre3"><a name="heading_c.oebdocIDASZ0ZF" class="calibre2"></a>39 Barra de herramientas propia </h2><img src="img/image035.JPG" id="a34" alt="" class="calibre4"/><p class="calibre5">Cuando varios usuarios del mismo Word tienen distintas necesidades resulta conveniente disponer de barras de herramientas personalizadas para cada uno. Para ello, active Herramientas•Personalizar. En la pestaña Barras de herramientas pulse el botón Nueva y coloque el nombre de la nueva barra (por ejemplo, FMartin) en el cuadro que aparece. Le aconsejamos, además, que coloque su barra en la plantilla normal seleccionando la opción Disponible en .... Normal. Al pulsar Aceptar habrá creado una nueva barra de herramientas... vacía. </p><p class="calibre5">Ahora es cuestión de rellenar esa barra, que le aparecerá como un minúsculo rectángulo presidido por el nombre asignado. Active la pestaña Comandos (en la ventana Herramientas•Personalizar) y arrastre con el ratón hacia ese rectángulo los iconos (herramientas) que necesite. El rectángulo irá tomando poco a poco forma de barra alargada. Usted la podrá desplazar con el ratón hasta colocarla horizontalmente en la parte superior junto a las otras barras que tenga activadas. </p><p class="calibre5">Tenga presente, además, que en cualquier momento puede desplazar cualquier barra. Si pasa el ratón por la línea vertical que tiene cada barra horizontal en la extrema izquierda éste se convertirá en una conocida cruz santiagueña en señal de que ya puede arrastrar la barra. Por último, tendrá en cuenta que se puede copiar un icono de una barra a otra manteniendo pulsada Alt+Ctrl mientras arrastra el icono.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAD00ZF" class="calibre2"></a>40 Copiar un formato varias veces o repetir un dibujo</h2><p class="calibre5">El icono Copiar formato copia las características del párrafo (sangrías, interlineados, etc.) en que se encuentra el cursor en el momento de activarlo, o bien copia el formato de los caracteres seleccionados (negrita, cursiva, etc.), en el párrafo o texto en que se pose el cursor (convertido, a su vez, en una expresiva brocha gorda). Una vez aplicado el formato, la función se desactiva automáticamente y el cursor vuelve a su figura normal </p><p class="calibre5">Pero con frecuencia necesitamos aplicar ese formato en muchos lugares del documento (por ejemplo, el estilo Título 2 a todos los subapartados de nuestro artículo científico) y en estos casos se ha de repetir la activación del icono tantas veces como subapartados, lo que puede resultar realmente fastidioso. ¿Hay otra manera de copiar formato más rápida? Sí. Basta con activar el icono Copiar formato con un doble clic para que esta función no se desactive cada vez que se aplica a algún texto. Una vez concluido el formateo, el icono se desactiva haciendo un solo clic sobre el mismo.</p><p class="calibre5">Este mismo principio vale también para los iconos de línea, flecha, rectángulo y elipse de la opción Dibujo.</p><p class="calibre5"><b class="calibre8"><i class="calibre6">Francisco Martín</i> </b><i class="calibre6">. Economista. Censor jurado de cuentas y profesor titular de contabilidad analítica de la escuela de Empresariales de la Universidad de Barcelona</i> </p><h1 class="calibre1"><a name="heading_c.oebdocIDA000ZF" class="calibre2"></a>Microsoft Excel 2000</h1><p class="flushright">Antonia Soler Carrascosa</p><p class="flushright">asoler@pcw.idg.es</p><h2 class="calibre3"><a name="heading_c.oebdocIDAG10ZF" class="calibre2"></a>41 Habilitar (o deshabilitar) la función Autocompletar </h2><img src="img/image036.JPG" id="a35" alt="" class="calibre4"/><p class="calibre5">La función Autocompletar se halla activada por omisión en Excel. Su función es completar el texto que hemos comenzado a escribir en una columna de datos si los primeros caracteres tecleados coinciden con una entrada ya existente. Esto facilita la entrada consistente de datos repetitivos en bases de datos. Por ejemplo, en una lista de productos, facilitaría la introducción siempre igual del nombre de la categoría del producto. </p><p class="calibre5">Sin embargo, si no trabajamos con listas, esta función puede resultar molesta. En esos casos, puede desactivarse usando la opción de menú Herramientas•Opciones•Modificar, desactivando la casilla de verificación Habilitar Autocompletar para valores de celda.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAU10ZF" class="calibre2"></a>42 Filtrar tablas dinámicas </h2><img src="img/image037.JPG" id="a36" alt="" class="calibre4"/><p class="calibre5">Las tablas dinámicas ya estaban disponibles en versiones anteriores de Excel, permitiendo resumir la información de una lista o base de datos. Pero Excel 2000 las ha mejorado considerablemente. Uno de los aspectos más útiles es que ahora no sólo podemos filtrar la tabla por los campos ubicados en la posición página, sino que además podemos filtrar los ubicados en las posiciones fila y columna. Esto aumenta enormemente la flexibilidad de la información resumida en la tabla. </p><p class="calibre5">Para crear una tabla dinámica usaremos la opción Datos•Informe de tablas y gráficos dinámicos. Con ello se entra en un asistente de tres pasos que guía el proceso de creación. Para concretar la información que debe mostrar la tabla, pulsaremos en el paso 3 el botón Diseño. Al finalizar, veremos la tabla en pantalla, con los botones de campo disponibles para aplicar filtros. </p> <h2 class="calibre3"><a name="heading_c.oebdocIDAC20ZF" class="calibre2"></a>43 Numerar automáticamente facturas </h2> <img src="img/image038.JPG" id="a37" alt="" class="calibre4"/> <p class="calibre5">Si usamos Excel para hacer facturas, pedidos o, en general, documentos que deben numerarse de forma automática, conviene tener en cuenta que existen unas plantillas ya preparadas para conseguir la autonumeración. </p> <p class="calibre5">Se trata de las plantillas de Excel Informe de gastos, Factura y Pedido. Pueden usarse seleccionándolas en Archivo•Nuevo•Soluciones de hoja de cálculo.</p><p class="calibre5">Al usarlas por primera vez deben personalizarse, indicando los datos relativos a nuestra empresa. Para ello usaremos el botón Personalizar o cambiaremos a la pestaña Personalizar. </p><p class="calibre5">Si queremos que la numeración automática de las facturas o pedidos empiece por 1 no hace falta indicar nada en la personalización. La plantilla ya ofrece una barra de herramientas con un botón que agrega automáticamente números de seguimiento secuenciales cada vez que un usuario asigne un número automático a un nuevo formulario basado en la plantilla. Pero si la numeración automática requiere mayor control, en la personalización podemos indicar la ruta a un fichero de texto que actuará como contador, lo cual permitirá reiniciar numeraciones o empezarlas en un número concreto. El fichero contador debe tener el mismo nombre que la plantilla.</p><p class="calibre5">Otro tema interesante es que estas plantillas pueden almacenar la información introducida en las hojas basadas en ellas en otro fichero (en el caso de Facturas llamado BDFACTUR.XLS), que va disponiendo la información en forma de lista o base de datos. Esta función también se facilita mediante uno de los iconos de la barra de herramientas de la plantilla.</p><p class="calibre5">Por último, tengamos en cuenta que, para que todo lo anterior esté disponible, debe tenerse instalado el complemento Herramientas de plantilla, que se carga mediante la opción de menú Herramientas•Complementos.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA220ZF" class="calibre2"></a>44 Guardar un libro en formato HTML</h2> <img src="img/image039.JPG" id="a38" alt="" class="calibre4"/> <p class="calibre5">En Excel 2000, cualquier libro de trabajo puede ser guardado como archivo HTML mediante la opción Archivo•Guardar como página Web. El fichero así generado podrá leerse con cualquier navegador, y si contiene hipervínculos, éstos funcionarán siempre que se refieran a recursos disponibles para el usuario. </p><p class="calibre5">La posibilidad de guardar como HTML ya estaba disponible en Excel 97, pero allí aparecía un asistente que preguntaba qué rangos del libro se deseaban guardar en formato HTML. Y lo cierto es que el aspecto final del fichero generado era poco atractivo. </p><p class="calibre5">En cambio, ahora no sólo se guarda el libro completo, sino que además podemos controlar el aspecto final del fichero en el navegador. </p><p class="calibre5">Para personalizar el modo en que se realiza la conversión a HTML usaremos la opción de menú Herramientas•Opciones•General•Opciones Web. Podremos personalizar, por ejemplo, la ubicación donde se almacenarán los gráficos y otros archivos auxiliares, especificar el formato en que se guardarán los gráficos o la resolución del monitor donde se visualizarán las páginas. </p><p class="calibre5">Si se dejan las opciones por omisión, en el caso de que el libro contenga datos en diversas hojas y gráficos, Excel crea un archivo HTML por hoja y un GIF por gráfico, y los almacena en una subcarpeta con el mismo nombre del archivo HTML principal seguido por la palabra _archivos. Al abrir el fichero principal aparece activa la primera hoja, pero pueden usarse las pestañas de la parte inferior para consultar el libro completo. Además, el archivo HTML puede volver a abrirse en Excel para editarlo, sin perder ninguna característica del fichero original. Si posteriormente el archivo se guarda en otra ubicación, se comprueban los vínculos y se reparan los que no funcionen.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAU30ZF" class="calibre2"></a>45 Analizar datos de páginas Web </h2><img src="img/image040.JPG" id="a39" alt="" class="calibre4"/><p class="calibre5">Con Excel 2000 se pueden crear y ejecutar consultas para recuperar datos disponibles en la web, a fin de analizarlos en Excel. Además de obtener los datos, podremos periódicamente pedir su actualización automática.</p><p class="calibre5">Para obtener datos de web, empezaremos usando la opción de menú Datos•Obtener datos externos•Nueva consulta Web. Aparece entonces una caja de diálogo que permite seleccionar una página web e indicar luego si queremos recuperarla completa, sólo las tablas o sólo una tabla específica. Si pensamos usar en otras ocasiones la consulta conviene guardarla, y luego podremos volver a ejecutarla con la opción Datos•Obtener datos externos•Ejecutar consulta guardada. </p><p class="calibre5">En cualquier caso, una vez disponemos de los datos sobre la hoja, la barra de herramientas Datos externos facilita, entre otras cosas, la actualización de los datos.</p><p class="calibre5">De forma similar a la descrita podemos también obtener datos de bases de datos externas.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAI40ZF" class="calibre2"></a>46 Gráficos dinámicos</h2><p class="calibre5">Relacionado con las tablas dinámicas, Excel ofrece ahora gráficos dinámicos, que se adaptan a las modificaciones que se introduzcan en la tabla. Sin embargo, además, pueden usarse para resolver un problema que antes tenía una solución laboriosa y compleja: la actualización de un gráfico al cambiar el número de datos que representa. Este tema puede resolverse con gráficos dinámicos siempre que la información esté dispuesta en columnas. Veamos cómo hacerlo:</p><p class="calibre5">1- Empezaremos seleccionando el rango de datos que deseamos representar gráficamente (o un rango que contenga todos los datos, aunque haya columnas intermedias). Todas las columnas del rango deben tener algún texto en la cabecera, y la selección debe incluir esas cabeceras.</p><p class="calibre5">2- El paso siguiente es darle un nombre al rango, usando la opción Insertar•Nombre•Definir.</p><p class="calibre5">3- A continuación, usamos la opción Datos•Informe de tablas y gráficos dinámicos para crear un gráfico dinámico. En el asistente, en el segundo paso, nos aseguraremos de indicar el nombre del rango, y no las direcciones equivalentes. En el paso 3 definiremos la información que debe mostrar el gráfico.</p><p class="calibre5">4- Al finalizar, veremos que Excel crea, además del gráfico dinámico, la tabla dinámica asociada. </p><p class="calibre5">Y ahora veamos lo siguiente: añadimos un nuevo dato a la lista, o bien borramos una línea, a fin de que el rango de origen varíe. Redefinimos el nombre de rango usando otra vez la opción Insertar•Nombre•Definir, y ya sólo queda dirigirnos al gráfico y pulsar el botónActualizar datos de la barra de herramientas Tabla dinámica. El gráfico se adaptará a los nuevos datos.</p><p class="calibre5"><b class="calibre8"><i class="calibre6">Antonia Soler</i> </b><i class="calibre6">. </i> <i class="calibre6">Economista. Profesora de Informática de Gestión en la Universidad Oberta de Cataluña. Colaboradora de diversos centros de formación (PIMEC-SEFES, BIT). </i></p> <h1 class="calibre1"><a name="heading_c.oebdocIDAJ50ZF" class="calibre2"></a>Microsoft Access 2000</h1><p class="flushright">Jesús Alonso</p><p class="flushright">jalonso@pcw.idg.es</p><h2 class="calibre3"> <a name="heading_c.oebdocIDAY50ZF" class="calibre2"></a>47 Cuadro combinado que añade el valor Todos a una lista</h2><p class="calibre5">Cuando se prepara un formulario con un cuadro combinado cuyo valor luego se usa como criterio en una consulta, es posible que convenga añadir a los valores de la lista el texto Todos, en cuyo caso la consulta no tendrá criterio.</p><p class="calibre5">Conseguir este propósito requiere resolver dos problemas. Por un lado, lograr que el cuadro combinado muestre también la palabra Todos y, por otro, que la consulta funcione correctamente.</p><p class="calibre5">Para el primer problema partimos de que el tipo de origen de fila del cuadro combinado es Tabla•Consulta, ya que si fuera Lista de valores sólo tendríamos que añadir dicho valor. Necesitamos crear una consulta de unión que nos permita asociar a los elementos de la tabla el texto deseado. Este tipo de consultas sólo se puede crear en la pantalla de SQL y su sintaxis sería:</p><p class="calibre5">SELECT <i class="calibre6">Campo </i>FROM <i class="calibre6">Tabla </i>UNION SELECT ‘(Todos)’ FROM <i class="calibre6">Tabla</i> </p><p class="calibre5">Aunque ‘(Todos)’ es una constante, necesita un origen de datos, pero puede usarse sin problemas la misma tabla.</p><p class="calibre5">Veamos ahora cómo solucionar el tema de la consulta. Para que el criterio funcione bien usaremos la siguiente expresión con la función SiImp:</p><p class="calibre5">SiImp(Formularios! [NombreFormulario]![NombreCuadroCombinado] = “(Todos)”; [NombreCampo]; Formularios![NombreFormulario]! [NombreCuadroCombinado])</p><p class="calibre5">Con esta sintaxis se consigue que al seleccionar Todos el criterio sea el propio nombre del campo, lo cual da como resultado todos los registros. </p><h2 class="calibre3"><a name="heading_c.oebdocIDAGB1ZF" class="calibre2"></a>48 Demasiados campos en una tabla</h2><p class="calibre5">Un problema bastante inusual, pero que puede provocar problemas al diseñar una tabla, es que Access muestre el mensaje de que hay demasiados campos, impidiendo entonces grabar el diseño.</p><p class="calibre5">De hecho, Access permite que una tabla pueda tener un máximo de 255 campos. Aunque este tope es más que suficiente, en algunos casos, normalmente al modificar una estructura de tabla, podemos encontrarnos con el mensaje de error mencionado aunque no hayamos llegado al límite descrito. </p><p class="calibre5">El motivo es que Access tiene un contador interno del número de campos que llevamos en la tabla. Al añadir, mover o copiar campos se va incrementando. Sin embargo, cuando borramos campos el contador no disminuye. Si el contador llega a 255 aparece el error, y no podemos guardar los cambios en la estructura. </p><p class="calibre5">Para resolverlo lo único que hay que hacer es compactar la base de datos mediante Herramientas•Utilidades de la base de datos•Compactar y reparar base de datos, ya que la compactación actualiza, entre otros temas, ese contador interno relativo al número de campos.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAXB1ZF" class="calibre2"></a>49 Organizar los objetos de la base de datos por temas </h2><img src="img/image041.JPG" id="a40" alt="" class="calibre4"/><p class="calibre5">La ventana de base de datos de Access organiza los objetos por tipos. Sin embargo, es posible que en aplicaciones grandes convenga organizar los objetos por temas. Este problema se resuelve en Access 2000 mediante el uso de la barra Grupos, que aparece en la zona izquierda de la ventana de base de datos. </p><p class="calibre5">Puede crearse un grupo mediante el menú de contexto sobre cualquier objeto, y luego crear accesos directos a los objetos deseados. Basta con seleccionar el objeto y, en el menú de contexto, seleccionar la opción Agregar al grupo, e indicar el grupo apropiado.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAFC1ZF" class="calibre2"></a>50 Trabajar con campos autonuméricos</h2> <p class="calibre5">Dos de las necesidades más típicas con campos autonuméricos son: volver a empezar en 1 después de ciertas pruebas, o bien conseguir que empiecen a numerar por un valor determinado.</p><p class="calibre5">En el primer caso basta con borrar todos los registros de la tabla y compactar la base de datos mediante Herramientas•Utilidades de la base de datos•Compactar y reparar base de datos.</p><p class="calibre5">El segundo tema es un poco más complicado. Supongamos que ya tenemos la tabla con el campo autonumérico creada. A continuación, creamos una tabla auxiliar con un campo de tipo Numérico Entero largo, a la que añadiremos un registro con el valor por el que deseamos empezar a numerar menos uno. </p><p class="calibre5">Seguidamente crearemos una consulta de datos anexados con la tabla auxiliar, y añadiremos el registro a la tabla que tiene el campo autonumérico. Tras ejecutar la consulta podemos borrarla, igual que la tabla auxiliar. Ya sólo queda eliminar el registro auxiliar de la tabla, con lo que los registros siguientes continuarán la autonumeración a partir del valor anterior.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAWC1ZF" class="calibre2"></a>51 Formato condicional </h2><img src="img/image042.JPG" id="a41" alt="" class="calibre4"/><p class="calibre5">Con Access 2000 el formato condicional ya no es un problema, ya que pueden definirse reglas de formato para cuadros de texto y otros controles en formularios e informes. Para ello debe usarse el comando Formato condicional del menú Formato, lo cual permite definir el color de fuente, su tamaño, el color de fondo de los controles y otras propiedades visuales que proporcionan información complementaria a los usuarios.</p><p class="calibre5">En la figura se ve un ejemplo donde el campo activo se resalta asignándole un color de fondo. Además, en función del valor, el color de la fuente cambia.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAED1ZF" class="calibre2"></a>52 Añadir un botón a un formulario que permita eliminar el registro activo</h2><p class="calibre5">A nivel de usuario existe la combinación de teclas Ctrl+ – (guión) para eliminar el registro activo en un formulario. Una solución más cómoda es añadir al formulario un botón y asociar el siguiente código al evento Al hacer clic:</p><p class="calibre5">If Me.NewRecord Then</p><p class="calibre5">Me.Undo</p><p class="calibre5">Else</p><p class="calibre5">Me.RecordsetClone.Bookmark = Me.Bookmark</p><p class="calibre5">Me.RecordsetClone.Delete</p><p class="calibre5">End If</p><p class="calibre5">Es necesario establecer una condición, ya que el registro a eliminar puede ser uno que se esté creando en ese momento. La propiedad NewRecord devuelve verdadero si estamos en esta situación, en cuyo caso es suficiente con aplicar el método Undo (deshacer). Sin embargo, si se trata de un registro existente es necesario aplicar el método Delete. El problema es que no se puede aplicar directamente al objeto Me. Por tanto, la solución es aplicárselo a RecordsetClone, una vez situado el registro activo en el mismo que en el formulario.</p><p class="calibre5"><b class="calibre8"><i class="calibre6">Jesús Alonso</i> </b><i class="calibre6">es analista, programador y consultor informático. Colaborador de diversos centros de formación (PIMEC-SEFES, BIT). </i></p><h1 class="calibre1"><a name="heading_c.oebdocIDAQE1ZF" class="calibre2"></a>Adobe Photoshop 6</h1><p class="flushright">David R.Vidal y M. Emmanuel</p><p class="flushright">davidr@pcw.idg.es</p><h2 class="calibre3"><a name="heading_c.oebdocIDA2E1ZF" class="calibre2"></a>53 Añadir una sonrisa a un retrato </h2> <img src="img/image043.JPG" id="a42" alt="" class="calibre4"/> <p class="calibre5">No estamos seguros de si el objetivo es añadir la sonrisa a la imagen que estamos retocando o bien dibujarla en nuestro rostro al ver los resultados de la herramienta <i class="calibre6">Licuar</i>.</p><p class="calibre5">Para aquellos que han manejado <i class="calibre6">Kai's Power Goo</i>, encontrarán en esta herramienta unas técnicas muy similares, consistentes en deformar la imagen empujando ciertas áreas. La tentación de crear una cara monstruosa como la de la figura es muy difícil de resistir, pero realmente se puede usar para otros menesteres mucho más serios. Por ejemplo, podemos añadir una ligera sonrisa o mueca a un retrato o ensalzar o disimular ciertos rasgos.</p><p class="calibre5">Comenzamos con introducirnos en la herramienta Imagen•Licuar. Es conveniente activar la opción de Mostrar malla con el fin de tener más precisión en el resultado. Hemos de tener en cuenta que la imagen se divide en pequeños rectángulos o celdillas y que al modificar el contorno y posición de éstas obtenemos las deformaciones esperadas. Cambiando el tamaño de estas celdillas también modificaremos sustancialmente el resultado, por lo que es conveniente realizar unas cuantas pruebas preliminares.</p><p class="calibre5">Con los distintos botones probamos a deformar, inflar, desinflar, hacer remolino... en aquellas partes del retrato que nos interesen. Enseguida nos daremos cuenta de que, a poco que nos pasemos con cualquiera de las herramientas, obtenemos un mutante de pesadilla más que una persona normal. </p><p class="calibre5">Para evitar este efecto secundario, en aquellas ocasiones en que sea muy difícil concretar la acción en un área sin afectar a las colindantes, debemos utilizar la herramienta congelar. Con ella marcaremos una zona más o menos extensa en la que prohibimos los cambios. Su función es proteger aquellas partes delicadas de la fotografía frente a los efectos aplicados.</p><p class="calibre5">Otro consejo es utilizar una malla de tamaño medio, un pincel más o menos grande, del orden de 80 píxeles y una presión muy baja, del orden de 15. De esta forma podemos ir lentamente dando pinceladas persiguiendo el punto justo de deformación que ofrezca, asimismo, naturalidad.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA0F1ZF" class="calibre2"></a>54 Dibujando formas vectoriales propias </h2><img src="img/image044.JPG" id="a43" alt="" class="calibre4"/><p class="calibre5">Aunque el fuerte de Adobe Photoshop es el tratamiento de imágenes binarias, también dispone de un tratamiento vectorial que, sin ser demasiado sofisticado, puede resultar de gran utilidad.</p><p class="calibre5">Dentro de este tratamiento vectorial se incluyen unas formas predefinidas como líneas, rectángulos, estrellas, huellas o formas de flecha. Sin embargo, es posible añadir nuestra propia forma con el fin de tenerla siempre accesible y repetirla por doquier. </p><p class="calibre5">En la barra de herramientas de la paleta flotante seleccionamos el icono que está a la derecha de la herramienta pluma. Acto seguido, si tenemos visible la ventana de opciones, observaremos varios iconos que permiten las formas antes citadas. En este punto debemos seleccionar herramienta forma personalizada.</p><p class="calibre5">Podemos probar a dibujar alguna de las formas vectoriales para comprobar el funcionamiento de la herramienta. A continuación, si pulsamos sobre el icono de forma, se nos aparece una ventana desplegable con todas las formas activas. En la parte superior derecha de esta ventana hay un indicador de menú que al pulsarlo nos muestra diversas opciones, entre las que se incluyen cargar y grabar formas.</p><p class="calibre5">Sólo nos queda un pequeño detalle por resolver: cómo crear las formas. Para ello, en primer lugar dibujamos con la pluma la figura que vayamos a utilizar. En la ventana de trazados seleccionamos aquel que contiene nuestra figura, que bien puede ser el trazado en uso o cualquier otro. Finalmente, vamos al menú Edición•Definir forma personalizada. Nos preguntará el nombre de la forma y, tras proporcionárselo, se añadirá a la colección actual. Estos cambios no son permanentes y si queremos conservar los cambios debemos de seguir los pasos antes citados y grabar el archivo de formas.</p><p class="calibre5">También puede utilizar el Gestor de ajustes preestablecidos para administrar las bibliotecas de formas personalizadas.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAUG1ZF" class="calibre2"></a>55 Crear una figura con un hueco en el centro</h2><p class="calibre5">Éste es un añadido al truco anterior. Cuando utilizamos las formas personalizadas en la barra de opciones tenemos cuatro botones que se activan al dibujar más de una forma. En concreto, cualquier nueva forma se puede añadir, restar, intersectar o unir al área de la forma ya existente. </p><p class="calibre5">Por tanto, para crear nuestra figura primero dibujamos la forma más grande, elegimos la opción de restar, y superponemos la segunda figura. Como resultado quedará un hueco en la primera.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA5G1ZF" class="calibre2"></a>56 Optimizar al máximo una imagen para Web </h2><img src="img/image045.JPG" id="a44" alt="" class="calibre4"/><p class="calibre5">Los diseñadores de páginas web persiguen optimizar el tamaño de las imágenes al máximo, razón por la cual necesitan comprimir los archivos en formatos GIF o JPEG. </p><p class="calibre5">Este último es un formato de compresión con pérdidas, por lo que es difícil encontrar el equilibrio entre la pérdida de calidad y la ganancia en espacio. Para facilitar esta tarea, Adobe Photoshop proporciona una herramienta que muestra de forma gráfica los distintos resultados que se obtendrían tras la variación de los parámetros relativos a la compresión. Para acceder a esta herramienta simplemente elegimos en el menú Archivo•Guardar para Web... .</p><p class="calibre5">No obstante, existe un truco que permite optimizar aún más esta técnica. Muchas imágenes tienen unas partes que permiten una gran compresión mientras que otras son mucho más críticas, y cualquier pérdida de calidad afecta en gran medida a la apariencia final de la imagen. Para ello, definiremos algo parecido a una máscara que proteja las partes más sensibles. El proceso se realiza añadiendo un canal alfa, que definirá el área a proteger.</p><p class="calibre5">Lo primero es añadir el canal, pulsando en el botón que abre el menú desplegable en la ventana de canales. Pulsamos la opción nuevo canal y le damos el nombre que consideremos oportuno. Las opciones que trae por defecto son correctas: opacidad al 50% y el color como área de máscara. No obstante, si el color verde es muy común en la imagen, es mejor seleccionar otro que no lo sea.</p><p class="calibre5">Ahora actuamos sobre la imagen con la herramienta borrador. Aquellas partes que borremos serán las que quedarán más protegidas, mientras que el resto sufrirá la mayor degradación en la etapa final de compresión. Activando y desactivando canales podemos apreciar cómo se solapa el nuevo canal con el resto de la imagen.</p><p class="calibre5">Ya sólo queda el proceso final de grabación. Vamos al menú Archivo•Guardar para Web... y esta vez pulsamos un pequeño botón que tiene un círculo blanco a continuación de la casilla de calidad. Nuestro paquete de Adobe Photoshop tiene, sorprendentemente, esta ventana a medio traducir y el <i class="calibre6">hint</i> nos aparece en inglés: <i class="calibre6">use a channel to modify quality setting</i>. Una vez seleccionado el canal observamos ligeros cambios en la imagen que nos permiten aprovechar hasta el último byte.</p><p class="calibre5">Conviene destacar que en la ventana de seleccionar el canal nos aparece una barra con una serie marcadores. Se trata de seleccionar la compresión mínima y máxima que serán aplicadas, siempre en función del canal designado.</p><p class="calibre5">Aunque hemos hablado de compresión JPEG, este sistema también es válido para las imágenes GIF. En este último caso se dará prioridad a unos colores sobre otros, afectando al tramado, que será mayor y por tanto con menos calidad en aquellas áreas designadas en función del canal.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAGI1ZF" class="calibre2"></a>57 Imágenes para Web de gran superficie y pequeño tamaño </h2><img src="img/image046.JPG" id="a45" alt="" class="calibre4"/><p class="calibre5">Nuevamente de cara al Web, no estaría de más crear imágenes de gran tamaño en lo que se refiere a superficie, pero pequeñas en lo que se refiere a ocupación en KB.</p><p class="calibre5">Una solución podría consistir en redimensionar imágenes pequeñas, pasándolas a tamaños mucho mayores. En efecto, la imagen más perfecta en cuanto a impacto visual y con unas dimensiones ridículas son los iconos. Por lo general, apenas ocupan más de 32 x 32 píxeles con 16 ó 256 colores, pero simbolizan perfectamente el objeto a tratar.</p> <p class="calibre5">Partiendo de una imagen de este tipo, acudimos a la herramienta Imagen•Tamaño de imagen y la agrandamos en un porcentaje que sea múltiplo de 2. Por ejemplo, 200% o 400% son ampliaciones válidas. Otro aspecto a tratar es el del remuestreo de la imagen. En este caso la opción por defecto no es la más adecuada. Si elegimos por aproximación se generarán píxeles más gruesos, con la ventaja de que la compresión cuando se convierta a GIF será muy alta. Las opciones Bilineal y Bicúbica tienen menos utilidad en este caso, puesto que el ruido generado hará peligrar la compresión. </p><p class="calibre5">Como resultado final, se obtienen imágenes unos 128 x 128 píxeles o más, que son comprimidas en formato GIF a apenas un par de kilobytes.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA0I1ZF" class="calibre2"></a>58 Calibrar el monitor para apreciar adecuadamente los colores</h2><p class="calibre5">En un mundo ideal, lo que vemos en pantalla es lo mismo que vemos sobre el papel al imprimirlo. Puestos a exagerar, hasta las imágenes que pasamos por el escáner o cámara digital deberían reproducirse en pantalla de forma idéntica a sus originales.</p><p class="calibre5">En el mundo real estamos lejos de conseguir tal maravilla, pero debemos aproximarnos en lo posible. El entorno de trabajo influye en cómo se ve el color en el monitor y en la impresión final. Tanto las luces de la habitación como el color de sus paredes o la ropa que llevamos pueden tener su incidencia.</p><p class="calibre5">El primer consejo se refiere a que el entorno sea lo mejor posible, siendo aconsejable trabajar en habitaciones con las persianas bajadas y una iluminación fluorescente de unos 5.000 K. Intentaremos ajustar la intensidad de luz de la habitación a la intensidad de luz del monitor. También suprimiremos los motivos muy cargados o brillantes alrededor del documento que podrían interferir con la percepción exacta del color, por lo que es recomendable que en el escritorio sólo aparezcan grises neutros.</p><p class="calibre5">El segundo consejo se refiere a la aplicación, donde deberemos ejecutar un procedimiento que dejará el monitor calibrado. Para ello acudimos a la aplicación Adobe Gamma sita en el Panel de Control de Windows. Esta utilidad permite calibrar y describir el monitor de acuerdo con un estándar y, a continuación, guardar los ajustes como perfil compatible con ICC, que está disponible prácticamente en cualquier programa que utilice el sistema de gestión de color. Un asistente nos ayudará en la tarea de calibrado.</p><h2 class="calibre3"><a name="heading_c.oebdocIDALJ1ZF" class="calibre2"></a>59 Métodos abreviados para usar con el zoom</h2><p class="calibre5">Con el fin de aumentar la productividad del usuario, existen algunos métodos rápidos que permiten encuadrar rápidamente aquellas partes de la imagen que nos interesen.</p><p class="calibre5">Un doble-clic en la herramienta mano, o bien pulsar CTRL+0 nos encuadrará la imagen en la ventana. Si el doble-clic lo hacemos sobre la herramienta zoom, o bien pulsando ALT+CTRL+0 nos vamos directamente a un zoom del 100%. </p><p class="calibre5">Pulsando CTRL+”+” o CTRL+”-“ hacemos una ampliación o reducción de la imagen en saltos relevantes: 100%, 200%, etc... Asimismo, podemos invocar temporalmente el zoom de ampliación pulsando CTRL+ESPACIO.</p><p class="calibre5">En la ventana del navegador, si cambiamos la cifra del zoom que está en la casilla y pulsamos INTRO, los cambios se reflejarán en la imagen, sin embargo el foco lo ganará el área de previsualización. Por el contrario, SHIFT+INTRO aplicará el efecto pero el foco se mantendrá en la casilla, permitiendo cambios sucesivos. Precisamente, si pulsamos CTRL sobre el área de previsualización, al arrastrar variamos el área de la misma.</p><h1 class="calibre1"><a name="heading_c.oebdocIDACK1ZF" class="calibre2"></a>CorelDRAW 10</h1><p class="flushright">David R.Vidal y M. Emmanuel</p><p class="flushright">davidr@pcw.idg.es</p><h2 class="calibre3"><a name="heading_c.oebdocIDAOK1ZF" class="calibre2"></a>60 Dibujo de flechas como objetos </h2><img src="img/image047.jpg" id="a46" alt="" class="calibre4"/><p class="calibre5">Los usuarios de CorelDRAW están acostumbrados, por lo general, a dibujar líneas a las que se les cambiaban las propiedades para que en sus extremos apareciese una flecha. Este método era sencillo pero tenía ciertos problemas, dado que en muchas exportaciones vectoriales las flechas desaparecían sin más, conservándose únicamente las líneas. Esto se debía a que no siempre el formato o aplicación destino soportaban esta posibilidad, con lo que trabajos como un diagrama de flujo podían quedar totalmente inservibles. Una alternativa era dibujar las flechas una a una, pero era muy tedioso si se trataba de un número elevado.</p><p class="calibre5">Con la opción de <i class="calibre6">formas perfectas</i> resulta muy sencillo dibujar formas de flechas que en realidad son objetos independientes. Para ello, mantenemos pulsado el icono de la barra izquierda de herramientas hasta que se desplieguen las distintas opciones, ante lo cual elegimos el botón de formas de flecha.</p><p class="calibre5">Tras dibujar la flecha, las opciones que se nos muestran en la barra superior son más que suficientes para darle el aspecto deseado. Además de las propiedades características de un polígono, el pequeño punto rojo situado en el centro de la flecha nos permite usar la herramienta de forma para cambiar el aspecto general de la flecha, consiguiendo un cuerpo más o menos grueso.</p><p class="calibre5">Otras formas de flecha más sofisticadas (que se obtienen con el botón de formas perfectas en la barra superior) pueden tener más de un punto de control que se simbolizan mediante colores diferentes.</p><p class="calibre5">Además de las formas de flecha, existen muchas otras (formas básicas, diagrama de flujo, estrellas y notas) que también son de gran utilidad para crear figuras o diagramas de manera sencilla, ahorrando tiempo y esfuerzos al artista. </p><h2 class="calibre3"><a name="heading_c.oebdocIDAHL1ZF" class="calibre2"></a>61 Selección avanzada de objetos</h2><p class="calibre5">El desconocimiento de ciertos procedimientos en CorelDRAW para seleccionar objetos nos puede llevar a dar una serie de vueltas innecesarias. Por ejemplo, si realizamos una agrupación de objetos, el grupo se comporta como un objeto único y siempre que pulsemos el ratón será seleccionado. Para actuar sobre un solo elemento no es necesario deshacer el grupo, sino que basta con mantener la tecla CTRL pulsada, realizando la selección individual de cada objeto dentro del grupo.</p><p class="calibre5">Al utilizar una selección basada en un recuadro (pulsando en un área en blanco y arrastrando el ratón formando un área) más de una vez nos llevamos la sorpresa de que no hemos seleccionado nada o que nos han quedado sin marcar objetos que aparentemente estaban dentro del recuadro. La razón es que las extensiones del objeto pueden ser más grandes de lo que visualmente observamos, siendo ignorados en el proceso aquellos objetos que no se encuentren completamente dentro del recuadro de selección. </p><p class="calibre5">Para evitar esto, pulsamos la tecla ALT mientras realizamos la operación. Ahora se seleccionarán todos los objetos a condición de que simplemente toquen el recuadro marcado.</p><p class="calibre5">Otro problema ocurre cuando un objeto sólido tapa por completo a otro objeto que está detrás y es más pequeño. Invariablemente se selecciona el objeto que está en primer plano, es decir por encima en el orden de dibujo. Nuevamente la tecla ALT nos solucionará el problema, dado que si la mantenemos pulsada, CorelDRAW buscará los objetos ocultos, alternando el resultado de la selección.</p><p class="calibre5">A la hora de redimensionar un objeto, existen un par de métodos que también son de utilidad. Habitualmente, al modificar un objeto por una esquina se deforma por el mismo sitio que arrastramos. Sin embargo, si mantenemos pulsada la tecla SHIFT lo que ocurre es que se redimensiona en todas las direcciones a la vez, manteniendo el centro fijo. De forma análoga, la tecla CTRL hace que el redimensionado se haga en incrementos del 100%. Es decir, que en cada salto el objeto duplica su tamaño. La tecla ALT también puede tener su función práctica en esta operación, de forma que al mantenerla pulsada se permite el redimensionamiento del objeto tanto en sentido horizontal como en vertical.</p><p class="calibre5">Si estamos rotando un objeto y mantenemos pulsada la tecla ALT, se producirá una deformación al mismo tiempo que se produce la rotación. No suele ser de mucha utilidad, pero ahí está.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA4L1ZF" class="calibre2"></a>62 Generar distorsiones interactivas </h2> <img src="img/image048.jpg" id="a47" alt="" class="calibre4"/> <p class="calibre5">La versión 10 de CorelDRAW añade una potente herramienta que, si bien es común en programas de retoque fotográfico, no lo es en absoluto tratándose de objetos vectoriales. </p><p class="calibre5">Se trata de distorsionar cualquier objeto o grupo de objetos mediante tres tipos de efectos: distorsión empujar y tirar, distorsión cremallera y distorsión torbellino. La primera permite empujar hacia dentro o tirar hacia fuera de los bordes de un objeto, mientras que la cremallera aplica un efecto de dientes de sierra a los bordes del objeto, proceso donde es posible ajustar la amplitud y frecuencia del mismo. Como se puede uno imaginar, la distorsión torbellino consigue el efecto que su nombre indica, pudiendo ajustar su dirección, origen, grado y cantidad de rotación.</p> <p class="calibre5">Después de distorsionar un objeto, es posible modificar el resultado cambiando el centro de distorsión. Este punto se identifica por un tirador en forma de diamante, alrededor del cual aparece el efecto, de forma similar a un compás que gira alrededor de un punto inmóvil. Este centro de distorsión se puede ubicar en cualquier lugar de la ventana de dibujo, o se puede situar en el centro de un objeto, para que la distorsión se distribuya uniformemente y la forma del mismo cambie con relación a su centro.</p><p class="calibre5">Podemos crear efectos más complejos si aplicamos una nueva distorsión a un objeto que ya se haya distorsionado. Por ejemplo, podemos aplicar una distorsión Cremallera por encima de una distorsión Torbellino, sin perder el efecto original.</p><p class="calibre5">Para acceder a estas opciones basta con pulsar en la barra izquierda de herramientas el icono de Herramienta Distorsión interactiva, después de lo cual ya tendremos las distintas opciones en la parte superior. </p><h2 class="calibre3"><a name="heading_c.oebdocIDAVM1ZF" class="calibre2"></a>63 Cómo alinear objetos sin desplegar la ventana de herramientas</h2><p class="calibre5">Si queremos alinear una serie de objetos, el procedimiento normal es seleccionarlos y acto seguido invocar la herramienta adecuada mediante Organizar•Alinear y distribuir. </p><p class="calibre5">Sin embargo, no es necesario invocar tal menú, pues, una vez seleccionados, basta con pulsar C para el centrado horizontal, L para alinear a la izquierda, R para alinear a la derecha y E para centrar verticalmente.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAAN1ZF" class="calibre2"></a>64 Ajustar la distancia donde van a aparecer duplicados de forma inmediata</h2><p class="calibre5">Como en el truco anterior, existe un procedimiento típico que es acudir al menú de Herramientas•opciones y cambiar las preferencias del duplicado. </p><p class="calibre5">Este método ajusta los valores por defecto, pero si lo que queremos es un ajuste inmediato procederemos de otra forma. Una vez duplicado el objeto deseado (podemos usar de forma abreviada CTRL+D) lo arrastramos manteniendo siempre la selección. El próximo duplicado conservará la distancia que hemos arrastrado. </p><p class="calibre5">En el momento de perder la selección del duplicado, por ejemplo marcando otro objeto, también se perderá este ajuste, pasando a utilizarse el valor definido por defecto.</p><p class="calibre5">Si lo que deseamos es duplicar un objeto sin desplazamiento alguno, tan sólo hemos de seleccionarlo y pulsar + en el teclado numérico. Original y duplicado se solaparán.</p><h2 class="calibre3"><a name="heading_c.oebdocIDARN1ZF" class="calibre2"></a>65 Homogeneizar CorelDRAW para un trabajo en equipo </h2><img src="img/image049.jpg" id="a48" alt="" class="calibre4"/><p class="calibre5">Gracias a las nuevas características de CorelDRAW 10, es posible personalizar las aplicaciones gráficas organizando las barras de comandos y los propios comandos para satisfacer las necesidades de cada usuario. En las barras de comandos incluimos los menús, las barras de herramientas, la barra de propiedades y la barra de estado. Para conseguir esta personalización, acudimos al menú Herramientas•opciones.</p><p class="calibre5">Esta configuración de opciones recibe el nombre de espacio de trabajo, siendo posible la existencia de varios espacios, utilizando aquel que nos interesa. </p><p class="calibre5">Pero en nuestro caso lo que queremos es homogeneizar. Dicho de otra manera, supongamos que tenemos varios ordenadores y queremos que todos utilicen la misma configuración. Para ello procederemos a ajustar uno de ellos con las preferencias del grupo y exportamos el espacio de trabajo obtenido mediante Herramientas•opciones•exportar. En el resto de los ordenadores sólo tenemos que importar el archivo generado.</p><p class="calibre5">Adicionalmente, si alguno de los equipos es remoto no hay ningún problema: otra de las opciones de CorelDRAW es enviar directamente un e-mail con el archivo, para que no tengamos que preocuparnos de ningún detalle.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAFO1ZF" class="calibre2"></a>66 Manipulación avanzada de texto</h2><p class="calibre5">Mientras escribimos texto podemos utilizar algunos trucos que permiten agilizar la edición. </p><p class="calibre5">Por ejemplo, supongamos que queremos cambiar el espaciado entre caracteres. Seleccionamos aquellos caracteres sobre los que deseamos actuar y, manteniendo pulsado SHIFT+CTRL, pulsamos también de forma simultánea la tecla ‘<’ o bien ‘,’ según se precise aumentar o disminuir el espacio respectivamente.</p><p class="calibre5">Si lo que queremos es variar el tamaño de la fuente que estamos utilizando, lo mejor es utilizar CTRL+2, que lo reducirá en un punto, o bien CTRL+8 que hará justo lo opuesto, es decir, aumentarlo en un punto. De forma similar actúan CTRL+4 y CTRL+6, pero aumentan y disminuyen con los mismos tipos que aparecen en la ventana desplegable, es decir: ...10, 11, 12, 14, 16, 18...</p><p class="calibre5">Para pasar de texto artístico a texto de párrafo, nada más fácil que pulsar CTRL+F8, realizando la conmutación requerida. Y cuando estamos en este último, podemos añadir o quitar bolos simplemente pulsando CTRL+M.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAWO1ZF" class="calibre2"></a>67 Recuperar archivos perdidos</h2><p class="calibre5">CorelDRAW tiene algunos sistemas de seguridad para tratar sus archivos. Así, podemos configurarlo para que haga una copia del documento al guardarlo o que guarde cada cierto tiempo preestablecido una copia de respaldo.</p><p class="calibre5">Las distintas opciones las configuramos desde el menú Herramientas•opciones•guardar. Una vez activadas, cada vez que se guarda un documento se crea un archivo BACKUP_OF_documento.cdr que contiene la versión antigua del trabajo. Por otro lado, el archivo copia que se guarda de forma automática en el tiempo designado recibe el nombre de AUTOBACKUP_OF_documento.cdr. Si salimos de CorelDRAW de forma adecuada este archivo es borrado, mientras que en caso contrario permanecerá a disposición del usuario. Cualquiera de estos documentos puede ser abierto de la forma habitual y grabado con un nombre más apropiado.</p><p class="calibre5">Pero puede darse el caso de que el documento antiguo haya sido borrado por nosotros (más de una vez necesitaremos hacer sitio en el disco duro) y que el nuevo todavía no haya completado su grabación de una manera apropiada. En este supuesto no hay ningún archivo de extensión CDR que podamos aprovechar, pero no todo está perdido: el antiguo documento no se sobreescribe, sino que se renombra como @@@cdr.tmp. Por tanto, sólo queda localizar este archivo y cambiar su extensión (y su nombre, si así lo estimamos) a .CDR. Después de esto lo abriremos normalmente.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAEP1ZF" class="calibre2"></a>68 Utilización de varios idiomas en un texto </h2><img src="img/image050.JPG" id="a49" alt="" class="calibre4"/><p class="calibre5">Finalizamos con otra novedad de CorelDRAW 10, destacando las notables mejoras en cuanto al corrector ortográfico, con la ventaja añadida de que puede trabajar simultáneamente con textos en distintos idiomas. </p><p class="calibre5">Para ello seleccionamos aquel texto que difiere del idioma por defecto, el cual puede ser configurado, y acudimos al menú Texto•Herramientas de escritura•Idioma, donde elegimos el idioma en que vamos a trabajar (realmente se le asigna a la selección). De forma automática se empieza a aplicar la revisión ortográfica apropiada, marcando sólo algunas palabras incorrectas y no todas como venía ocurriendo. </p><p class="calibre5">En la herramienta de estadísticas (Texto•Estadística de texto) podremos distinguir el número de caracteres utilizados en el documento, diferenciando los distintos lenguajes empleados.</p><h1 class="calibre1"><a name="heading_c.oebdocIDAZP1ZF" class="calibre2"></a>Microsoft Visual Basic</h1><p class="flushright">Francisco Charte Ojeda</p><p class="flushright">charte@pcw.idg.es</p><p class="calibre5">Según todos los datos estadísticos, ésta es la herramienta de desarrollo más utilizada a nivel mundial en la actualidad, lo cual no es de extrañar debido a su simplicidad de uso y sencillez de aprendizaje del propio lenguaje. Veamos algunos trucos que pueden contribuir a simplificar aún más nuestro trabajo diario con Visual Basic.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAOQ1ZF" class="calibre2"></a>69 Cómo reducir las sentencias Declare </h2><img src="img/image051.JPG" id="a50" alt="" class="calibre4"/><img src="img/image052.JPG" id="a51" alt="" class="calibre4"/><p class="calibre5">Desde una aplicación escrita con Visual Basic es posible utilizar la mayoría de las funciones que componen la API de Windows, si bien para ello antes es necesario codificar la correspondiente sentencia Declare. Con ella se indicará cuál es el nombre de la función, en qué librería de enlace dinámico se encuentra, qué parámetros toma y de qué tipo y cuál es su valor de retorno. </p><p class="calibre5">Existen funciones realmente sencillas cuya declaración puede realizarse a mano, pero otras pueden tomar infinidad de parámetros por valor y por referencia, usar tipos de datos que también es necesario definir con antelación, etc. Por eso es habitual que se use la herramienta conocida como Visor de texto API para generar automáticamente las sentencias Declare. Esta herramienta, a la que corresponde la figura, nos permite seleccionar funciones, constantes y tipos y copiarlos al portapapeles, desde donde podremos recuperarlos en nuestro módulo de código.</p><p class="calibre5">El inconveniente es que cada vez que necesitemos una función en un nuevo módulo de código, o un nuevo proyecto, tendremos que volver a crear las sentencias Declare correspondientes, repitiendo una y otra vez el mismo trabajo. La solución definitiva, para evitar las sentencias Declare, consiste en crear una librería de tipos con todas esas definiciones.</p><p class="calibre5">Una librería de tipos es una DLL que contiene simplemente información: definiciones de constantes y tipos de datos, funciones, interfaces COM, etc. Para crear una librería de este tipo sólo necesitará dos herramientas: el Bloc de notas de Windows y el compilador Mktyplib.exe que encontrará en la carpeta Tools\Unsupprt\Typlib del CD-ROM de Visual Basic. </p><p class="calibre5">El primer paso sería tomar la descripción de la función que utilicemos habitualmente. Supongamos que ésta es GetTickCount(). Recuperamos la descripción usando el Visor de texto API citado antes, tomando la sentencia Declare facilitada para definir una entrada en la librería de tipos. Ésta podría quedar así:</p><p class="calibre5">[uuid(9E3F3543-B6C3-11d1- A87E-004033CA9316)]</p><p class="calibre5">library MisFunciones {</p><p class="calibre5">[dllname("kernel32.dll")]</p><p class="calibre5">module Kernel32 {</p><p class="calibre5"> [entry("GetTickCount"), </p><p class="calibre5">helpstring("Número de ticks")]</p><p class="calibre5">long GetTickCount();</p><p class="calibre5">} </p><p class="calibre5">}</p><p class="calibre5">El uuid que hay al principio es un identificador único asignado a la librería. Puede generarlo con la herramienta guidgen. En el interior de la librería tenemos un módulo asociado a la DLL kernel32.dll. Este módulo contiene una sola definición de función, pero en la práctica podríamos incluir todas las funciones que necesitáramos de esa DLL. Lógicamente, también podemos definir varios módulos en la misma librería, definiendo funciones de múltiples DLL. </p><p class="calibre5">Guardado el código anterior, escrito en un lenguaje conocido como ODL, bastaría con llamar a la herramienta Mktyplib citada antes facilitando el nombre del archivo. A cambio se creará un nuevo archivo, con el mismo nombre pero extensión TLB. Usando la opción Proyecto•Referencias añadiríamos ese archivo a nuestro proyecto Visual Basic. A partir de ese momento ya podríamos usar la función GetTickCount() sin necesidad de incluir sentencias Declare. Desde el Examinador de objetos de Visual Basic, véase la figura, puede ver el contenido de la librería de tipos.</p><p class="calibre5">Lógicamente, esta técnica le será tanto más útil cuantas más definiciones haya incluido en la librería de tipos.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAQS1ZF" class="calibre2"></a>70 Convertir Intro en Tab </h2><img src="img/image053.JPG" id="a52" alt="" class="calibre4"/><p class="calibre5">Las interfaces de usuario de Windows aportaron, en su día, diversas diferencias respecto al mecanismo habitual con el que muchas personas estaban habituadas a trabajar. Una de esas costumbres, que aún hoy persiste, es la de utilizar la tecla Intro para indicar que se ha finalizado la introducción de un dato y, consecuentemente, se desea pasar al siguiente control. En un formulario diseñado con Visual Basic, sin embargo, la tecla que hay que pulsar para ir de un control al siguiente no es Intro sino Tab.</p><p class="calibre5">Si estamos creando una aplicación que va a ser utilizada por personas acostumbradas a programas que utilizan Intro en lugar de Tab, podemos facilitarle la adaptación y ahorrarles problemas con este sencillo truco. Lo primero que hay que hacer es dar el valor True a la propiedad KeyPreview del formulario, de tal manera que las pulsaciones de tecla generen un evento antes en el formulario que en el control que corresponda.</p><p class="calibre5">Acto seguido añadiríamos el código siguiente al formulario en cuestión. Como puede ver, se comprueba si la tecla pulsada ha sido Intro y, en caso afirmativo, se sustituye por una pulsación de la tecla Tab. </p><p class="calibre5">' Cada vez que se pulse una tecla</p><p class="calibre5">Private Sub Form_KeyPress( _</p><p class="calibre5">KeyAscii As Integer)</p><p class="calibre5">' Si la tecla pulsada es Intro</p><p class="calibre5">If KeyAscii = Asc(vbCr) Then</p><p class="calibre5">KeyAscii = 0 ' obviar esta pulsación y</p><p class="calibre5">SendKeys "{Tab}" ' convertirla en Tab</p><p class="calibre5">End If</p><p class="calibre5">End Sub</p><p class="calibre5">Como puede ver, se trata de un proceso muy sencillo y que permitirá pasar de un control a otro simplemente pulsando la tecla Intro, a menos que el control que tiene el foco se active mediante dicha tecla, como ocurre con los botones.</p><h2 class="calibre3"><a name="heading_c.oebdocIDADU1ZF" class="calibre2"></a>71 Controlar las unidades de CD-ROM </h2><img src="img/image054.JPG" id="a53" alt="" class="calibre4"/><p class="calibre5">Los lectores de CD-ROM actuales cuentan con bandejas motorizadas que, aparte de responder a la pulsación del botón físico que hay en la propia unidad, pueden ser controladas desde cualquier programa. Con una simple función, llamada mciSendString(), podemos abrir y cerrar esa bandeja. También podríamos usarla para saber si el disco introducido es de datos o de música y, en este último caso, iniciar la reproducción.</p><p class="calibre5">Para poder usar esta función lo primero que hay que hacer es declararla en el módulo de código donde la necesitemos, o bien incluirla en nuestra librería de tipos tal y como se explicó en el primero de los trucos. La definición de mciSendString() es ésta:</p><p class="calibre5">Private Declare Function _</p><p class="calibre5">mciSendString Lib "winmm.dll" _</p><p class="calibre5">Alias "mciSendStringA" _</p><p class="calibre5">(ByVal lpstrCommand As String, _</p><p class="calibre5">ByVal lpstrReturnString As String, _</p><p class="calibre5">ByVal uReturnLength As Long, _</p><p class="calibre5">ByVal hwndCallback As Long) As Long</p><p class="calibre5">El primer parámetro de esta función es una cadena con la orden a ejecutar, mientras que los otros tres, para el caso que nos ocupa, podemos obviarlos ya que no esperamos valores de retorno ni resultados.</p><p class="calibre5">Si quisiéramos abrir la bandeja de la unidad de CD-ROM desde un programa propio, bastaría con introducir una sentencia como la siguiente:</p><p class="calibre5">mciSendString "Set cdaudio Door Open", _</p><p class="calibre5">vbNullString, 0, 0</p><p class="calibre5">De forma análoga, para cerrar la bandeja usaríamos la orden Set cdaudio Door Closed. En ambos casos estaríamos actuando sobre la única unidad de CD-ROM del sistema o, en caso de existir varias, sobre la primera unidad disponible. Para trabajar con una unidad secundaria, o cualquier otra que pudiera haber en el sistema, primero tendríamos que abrirla. Suponga que tiene dos unidades de CD-ROM, una con la letra H: y otra con la I:. Podría actuar sobre la segunda de esta forma:</p><p class="calibre5">Open I: type cdaudio Alias MiCd</p><p class="calibre5">Set MiCd Door Open</p><p class="calibre5">Close MiCd</p><p class="calibre5">En estas órdenes se abre una unidad específica, indicando su letra, y asignándole un alias que, posteriormente, usamos para controlar la bandeja y cerrar la unidad. Conociendo este truco, podríamos codificar una función genérica que nos permitiese actuar sobre cualquier unidad. En la figura puede ver la interfaz de un sencillo programa que facilita la apertura y cierre de la bandeja de cualquier unidad de CD-ROM. El código asociado a esta interfaz es el siguiente:</p><p class="calibre5">' Método para actuar sobre el CD-ROM</p><p class="calibre5">Private Sub OperaUnidad( _</p><p class="calibre5">ByVal Accion As String) </p><p class="calibre5">Dim Unidad As String</p><p class="calibre5">' Si se ha introducido una letra</p><p class="calibre5">If Text1 <> "" Then</p><p class="calibre5">' tenemos que añadir "type"</p><p class="calibre5">Unidad = Text1 + " type"</p><p class="calibre5">End If</p><p class="calibre5">' Abrimos la unidad</p><p class="calibre5">mciSendString "open " + Unidad + _</p><p class="calibre5">" cdaudio alias MiCd", _</p><p class="calibre5">vbNullString, 0, 0</p><p class="calibre5">' Ejecutamos la acción solicitada</p><p class="calibre5">mciSendString "Set MiCd Door " + _</p><p class="calibre5">Accion, vbNullString, 0, 0</p><p class="calibre5">' y la cerramos</p><p class="calibre5">mciSendString "close MiCd", _</p><p class="calibre5">vbNullString, 0, 0</p><p class="calibre5">End Sub</p><p class="calibre5">' Para abrir el CD-ROM</p><p class="calibre5">Private Sub Command1_Click()</p><p class="calibre5">OperaUnidad "open" ' enviamos la orden "open" </p><p class="calibre5">End Sub</p><p class="calibre5">' Para cerrar el CD-ROM</p><p class="calibre5">Private Sub Command2_Click()</p><p class="calibre5">OperaUnidad "closed" ' enviamos la orden "closed"</p><p class="calibre5">End Sub</p> <h2 class="calibre3"><a name="heading_c.oebdocIDAKZ1ZF" class="calibre2"></a>72 El problema de la propiedad Alignment</h2><p class="calibre5">Los controles TextBox de Visual Basic cuentan con una propiedad, llamada Alignment, que permite especificar cuál debe ser la alineación horizontal del texto, alojado en la propiedad Text, en el interior del control. De esta forma es posible tener una caja de texto grande y el texto centrado en ella, por poner un ejemplo. Lo cierto, sin embargo, es que dicha propiedad no funciona siempre. Esto se debe a que el control TextBox de Visual Basic es una especie de envoltorio alrededor de un control Windows, o dicho de otra manera, el funcionamiento de este control no lo gestiona Visual Basic sino el propio sistema operativo.</p><p class="calibre5">Dependiendo del sistema operativo en que se ejecute un programa, la propiedad Alignment del TextBox funcionará o no adecuadamente. Para conseguir que lo haga siempre, independientemente de la versión de Windows, lo único que hay que hacer es dar el valor True a la propiedad MultiLine. </p><p class="calibre5">Lógicamente, al dar el valor True a la propiedad MultiLine estamos permitiendo que el usuario del programa introduzca varias líneas en el TextBox, a pesar de que las dimensiones de éste sólo sean suficientes para mostrar una de esas líneas. Con el fin de evitarlo, no hay más que gestionar adecuadamente el evento OnKeyPress del control ignorando la pulsación de la tecla Intro. Si son muchos controles los que debemos controlar, siempre podemos dar el valor True a la propiedad KeyPreview del formulario y hacer el trabajo mucho más simple con un código como el siguiente:</p><p class="calibre5">Private Sub Form_KeyPress( _</p><p class="calibre5">KeyAscii As Integer)</p><p class="calibre5">If KeyAscii = Asc(vbCr) And _</p><p class="calibre5">TypeOf Me.ActiveControl _</p><p class="calibre5">Is TextBox Then </p> <p class="calibre5">KeyAscii = 0 ' obviar esta pulsación</p><p class="calibre5">End If</p><p class="calibre5">End Sub</p><p class="calibre5">Como puede ver, comprobamos que se haya pulsado la tecla Intro en cualquier control TextBox, ignorándola. </p><h2 class="calibre3"><a name="heading_c.oebdocIDAX01ZF" class="calibre2"></a>73 Cómo incluir hipervínculos en un formulario </h2><img src="img/image055.JPG" id="a54" alt="" class="calibre4"/><img src="img/image056.JPG" id="a55" alt="" class="calibre4"/><p class="calibre5">Algunas técnicas habituales de la Web, como el uso de hiperenlaces a documentos y sitios, se han vuelto tan corrientes que, en ocasiones, pueden ser la mejor manera de facilitar ciertas acciones en nuestros propios programas. Suponga que tiene un formulario en el que, entre otros elementos, quiere ofrecer al usuario un hipervínculo que le permita acceder a una determinada sede web. Los pasos necesarios serían varios.</p><p class="calibre5">Para empezar, tendríamos que crear el elemento de interfaz que va a actuar como hipervínculo. Parece lógico utilizar un control Label para dicho fin, una etiqueta de texto cuyas propiedades tendremos que modificar para que aparezca como si fuese un enlace. Estos cambios serían:</p><p class="calibre5">- Modificación de la propiedad Font añadiendo el atributo subrayado al texto.</p><p class="calibre5">- Modificación de la propiedad ForeColor seleccionando uno que se asocie rápidamente con los hipervínculos de una página web, por ejemplo el azul.</p><p class="calibre5">- Creación de un cursor en forma de mano, como podría ser el de la figura, que recuperaríamos en la propiedad MouseIcon.</p><p class="calibre5">- Modificación de la propiedad MousePointer a la que asignaríamos el valor 99, de tal manera que se utilice el cursor asignado a MouseIcon.</p><p class="calibre5">Tras todos estos cambios, la etiqueta podría tener una apariencia similar a la de la imagen. Observe que al situar el cursor del ratón sobre la etiqueta, la apariencia del puntero cambia y aparece la típica mano señalando el enlace. </p><p class="calibre5">La asignación de valores a las propiedades sólo influye en la apariencia del control Label, pero para que éste actúe realmente como un hipervínculo será necesario añadir algo de código, concretamente al evento generado al pulsar sobre el control. El código necesario sería éste:</p><p class="calibre5">Private Const SW_SHOWNORMAL = 1</p><p class="calibre5">Private Declare Function _</p><p class="calibre5">ShellExecute Lib "shell32.dll" _</p><p class="calibre5">Alias "ShellExecuteA" ( _</p><p class="calibre5">ByVal hwnd As Long, _</p><p class="calibre5">ByVal lpOperation As String, _</p><p class="calibre5">ByVal lpFile As String, _</p><p class="calibre5">ByVal lpParameters As String, _</p><p class="calibre5">ByVal lpDirectory As String, _</p><p class="calibre5">ByVal nShowCmd As Long) As Long</p><p class="calibre5">Private Declare Function _</p><p class="calibre5">GetDesktopWindow Lib "user32" () As Long</p><p class="calibre5">Private Sub Label1_Click()</p><p class="calibre5">ShellExecute GetDesktopWindow, _</p><p class="calibre5">"open", "iexplore.exe", _</p><p class="calibre5">"http://www.fcharte.com/", _</p><p class="calibre5">0, SW_SHOWNORMAL</p><p class="calibre5">End Sub</p><p class="calibre5">Aparte de las sentencias Declare, lo realmente importante ocurre en el método Label1_Clic. En él se usa la función ShellExecute() para iniciar Internet Explorer y facilitarle el URL del sitio web a abrir. Al entregar como primer parámetro el manejador de la ventana del escritorio, la ventana abierta por Internet Explorer no guardará una relación directa con la de nuestro programa. Lógicamente, si en lugar de usar Internet Explorer necesitáramos utilizar otro navegador web deberíamos cambiar el tercer parámetro.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA031ZF" class="calibre2"></a>74 Visualización de imágenes </h2><img src="img/image057.jpg" id="a56" alt="" class="calibre4"/><p class="calibre5">Aunque Visual Basic cuenta con algunos componentes, como PictureBox, que permiten la visualización de gráficos, lo cierto es que sus posibilidades son limitadas en cuanto a los formatos contemplados. En un control de este tipo no es posible, por ejemplo, mostrar un archivo GIF con una animación o un gráfico en formato PNG. Tampoco es fácil tratar con imágenes de gran formato, ya que el control no está pensado para ello.</p><p class="calibre5">Todas estas limitaciones encuentran solución en el componente WebBrowser de Visual Basic, que podemos añadir a la paleta de herramientas simplemente seleccionando el elemento Microsoft Internet Controls de la ventana a la que da paso la opción Proyecto•Componentes. Suponiendo que hayamos insertado en un formulario un componente WebBrowser, un CommonDialog y un botón, el código siguiente sería suficiente para recuperar cualquier imagen, así como adaptar el WebBrowser a las dimensiones del formulario. De esta manera tan sencilla tenemos un completo visor de imágenes aunque, en realidad, podemos abrir cualquier documento HTML e incluso acceder a la web.</p> <p class="calibre5">En la figura puede ver el programa mostrando una imagen de gran formato y con dos barras de desplazamiento, horizontal y vertical, que nos permiten moverla.</p><p class="calibre5">Private Sub Command1_Click() </p><p class="calibre5">CD.ShowOpen</p><p class="calibre5">WebBrowser1.Navigate CD.FileName</p><p class="calibre5">End Sub</p><p class="calibre5">Private Sub Form_Resize()</p><p class="calibre5">WebBrowser1.Move _</p><p class="calibre5">0, 0, ScaleWidth, _</p><p class="calibre5">ScaleHeight - Command1.Height</p><p class="calibre5">Command1.Move _</p><p class="calibre5">ScaleWidth - Command1.Width, _</p><p class="calibre5">ScaleHeight - Command1.Height</p><p class="calibre5">End Sub</p><p class="calibre5"><b class="calibre8"><i class="calibre6">Francisco Charte</i> </b> <i class="calibre6">es profesor de informática y autor de diferentes libros sobre lenguajes y sistemas de información. </i> </p><h1 class="calibre1"><a name="heading_c.oebdocIDA251ZF" class="calibre2"></a>Borland Delphi</h1><p class="flushright">Francisco Charte Ojeda</p><p class="flushright">charte@pcw.idg.es</p><p class="calibre5">Delphi es la herramienta de desarrollo más popular de la firma Borland, tratándose de un potente entorno de desarrollo RAD que comparte muchas características con C++ Builder y a cuya familia recientemente se ha añadido también Borland Kylix, el equivalente de Delphi pero para Linux. Aunque los trucos siguientes están diseñados para Delphi, pueden ser igualmente útiles en sus herramientas hermanas.</p><h2 class="calibre3"><a name="heading_c.oebdocIDARA2ZF" class="calibre2"></a>75 Notificación de cambios en un directorio </h2><img src="img/image058.JPG" id="a57" alt="" class="calibre4"/><p class="calibre5">La API de Windows dispone de una serie de funciones que nos permiten solicitar una notificación cada vez que se efectúe un cambio en un directorio o en los archivos que éste contiene. El método consiste en solicitar la notificación, mediante la función FindFirstChangeNotification(), y quedar a la espera de que ésta se produzca, usando para ello la función WaitForSingleObject() u otra de la misma familia. Puesto que esta última función detendría la ejecución del programa si la utilizamos en el hilo de ejecución principal, lo habitual es que el proceso de espera se efectúe en un hilo (<i class="calibre6">thread</i>) independiente. </p><p class="calibre5">Esto no supone ningún problema en Delphi, basta con seleccionar la opción Thread Object del Depósito de objetos. Partiendo de un nuevo proyecto Delphi, seleccionaríamos la opción citada para añadir un nuevo módulo con una clase derivada de TThread. Podríamos llamarla TActualiza. En el método Execute de esta clase será donde solicitemos la notificación por primera vez, usando para ello la citada función FindFirstChangeNotification(). </p><p class="calibre5">Esta llamada nos devuelve un identificador que guardaremos en una variable local. Seguidamente entramos en un bucle que se estará ejecutando indefinidamente. En su interior quedamos a la espera de que se produzca una notificación, usando para ello la función WaitForSingleObject(). Al pasar INFINITE como segundo valor, este hilo de ejecución quedará dormido sin límite de tiempo, hasta que en el directorio indicado en la llamada a FindFirstChangeNotification() se produzca algún cambio. En este momento llamamos de forma sincronizada a la función ActualizaLista, con el fin de poder acceder en ella a un control TFileListBox que estará mostrando el contenido del directorio que se está controlando. Por último, mediante una llamada a FindNextChangeNotification(), se solicita una nueva notificación cuando se produzca otro cambio, repitiéndose el proceso.</p><p class="calibre5">// Este método es el mundo de ejecución</p><p class="calibre5">// del nuevo hilo</p><p class="calibre5">procedure TActualiza.Execute;</p><p class="calibre5">Var // Identificador de la notificación</p><p class="calibre5">Id: LongInt;</p><p class="calibre5">begin</p> <p class="calibre5">// Solicitamos una notificación de</p><p class="calibre5">// cambios de archivo en la unidad C:</p><p class="calibre5">Id := FindFirstChangeNotification(</p><p class="calibre5">'C:\', True, FILE_NOTIFY_CHANGE_FILE_NAME); </p><p class="calibre5">While True Do // Ejecutar siempre</p><p class="calibre5">Begin</p><p class="calibre5">// Esperamos que se produzca una</p><p class="calibre5">// modificación</p><p class="calibre5">WaitForSingleObject(Id,INFINITE);</p><p class="calibre5">// Actualizamos la lista</p><p class="calibre5">Synchronize(ActualizaLista);</p><p class="calibre5">// y esperamos la siguiente notificación</p><p class="calibre5">FindNextChangeNotification(Id);</p><p class="calibre5">End;</p><p class="calibre5">end;</p><p class="calibre5">En el formulario de este programa de prueba habrá que insertar el código necesario para crear un objeto TActualiza. El lugar apropiado para ello es el método asociado al evento OnCreate de la ventana. La creación la efectuaremos con la siguiente sentencia:</p><p class="calibre5">ActualizaVista := </p><p class="calibre5">TActualiza.Create(False);</p><p class="calibre5">Observe que se pasa como parámetro al constructor el valor False, indicando que el nuevo hilo de ejecución no ha de iniciarse en estado de espera, sino directamente en estado de ejecución.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAZD2ZF" class="calibre2"></a>76 Cómo calcular la línea y columna del cursor en un texto </h2><img src="img/image059.JPG" id="a58" alt="" class="calibre4"/><p class="calibre5">En Delphi existen controles visuales, como TMemo y TRichEdit, capaces de contener grandes cantidades de texto por los que el usuario puede desplazarse libremente utilizando teclado y ratón. Dichos componentes, sin embargo, no disponen de propiedades informativas que permitan saber en qué línea o qué columna concreta se encuentra el cursor en cada momento, aunque sí es posible saber el número de carácter absoluto, desde el principio del control, donde está el cursor. </p><p class="calibre5">Con la propiedad SelStart es posible determinar el número de carácter en que se encuentra el cursor o, para ser más exactos, donde comienza la selección de una porción de texto. La posición real del cursor en el texto será la indicada por SelStart más el valor de SelLength. Esta posición, sin embargo, es absoluta y no relativa a la línea actual, aunque es un dato que nos servirá para recuperar el número de línea. Con este fin enviaríamos al control el mensaje EM_LINEFROMCHAR facilitando como parámetro la posición absoluta. El valor devuelto es el número de línea comenzando a contar desde cero.</p><p class="calibre5">Para conocer el número de columna habrá que hacer algunos cálculos. Usando el mensaje EM_LINEINDEX, junto con el parámetro -1, obtendremos el número absoluto del primer carácter de la línea actual. Restando a la posición absoluta del cursor, obtenida antes con SelStart y SelLength, la posición de ese primer carácter, obtendremos la posición del cursor relativa a la línea. </p><p class="calibre5">Realmente, toda esta explicación es más extensa que el código que finalmente tenemos que escribir. Sería el siguiente:</p><p class="calibre5">procedure TForm1.ActualizaPosicion;</p><p class="calibre5">var</p><p class="calibre5">PosicionCursor,</p><p class="calibre5">NumeroCaracteres,</p><p class="calibre5">NumeroLinea,</p><p class="calibre5">NumeroColumna: integer;</p><p class="calibre5">begin</p><p class="calibre5">// Calculamos la posición</p><p class="calibre5">// absoluta del cursor</p><p class="calibre5">PosicionCursor :=</p><p class="calibre5">Memo1.SelStart +</p><p class="calibre5">Memo1.SelLength;</p><p class="calibre5">// Obtener el número de línea</p><p class="calibre5">NumeroLinea := SendMessage(</p><p class="calibre5">Memo1.handle,</p><p class="calibre5">EM_LINEFROMCHAR,</p><p class="calibre5">PosicionCursor, 0) + 1;</p><p class="calibre5">// y mostrarlo</p><p class="calibre5">Label1.Caption := </p><p class="calibre5">IntToStr(NumeroLinea);</p><p class="calibre5">// Índice absoluto del primer</p><p class="calibre5">// carácter de la línea actual</p><p class="calibre5">NumeroCaracteres := SendMessage(</p><p class="calibre5">Memo1.handle,</p><p class="calibre5">EM_LINEINDEX, -1, 0);</p><p class="calibre5">// Calculamos la columna</p><p class="calibre5">NumeroColumna := PosicionCursor -</p><p class="calibre5">NumeroCaracteres + 1;</p><p class="calibre5">// y la mostramos</p><p class="calibre5">Label2.Caption := </p><p class="calibre5">IntToStr(NumeroColumna);</p><p class="calibre5">end;</p><p class="calibre5">Para que este código sea funcional debe insertar en un formulario un control TMemo y dos TLabel. A continuación habría que llamar a este método desde los eventos OnKeyUp y OnMouseMove del TMemo, de tal manera que la posición se actualice cada vez que se mueva una tecla o el ratón.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA4H2ZF" class="calibre2"></a>77 Listas más atractivas </h2><img src="img/image060.JPG" id="a59" alt="" class="calibre4"/><p class="calibre5">Las listas simples, representadas en Delphi con el control TListBox, por defecto muestran todos sus elementos en el mismo color que, además, suele ser el mismo color por defecto usado en cajas de texto, listas desplegables y otros controles similares. Dicho control, sin embargo, cuenta con una propiedad llamada Style que nos permite cambiar este estilo por defecto. Si elegimos el estilo lbOwnerDrawFixed, por ejemplo, el control generará un evento OnDrawItem cada vez que haya que dibujar un elemento, en lugar de dibujarlo él mismo.</p><p class="calibre5">Gracias a este mecanismo podemos personalizar la lista dibujando los elementos con diferentes tipos de letra, estilos y colores. Incluso podríamos añadir imágenes en la lista o cualquier otro elemento que sea posible dibujar sobre un TCanvas.</p><p class="calibre5">Puede ver el resultado con este sencillo ejemplo. Inserte en un formulario una lista, una caja de texto y un botón. Dé el valor citado a la propiedad Style de la lista, abra la página de eventos y haga doble clic sobre OnDrawItem, introduciendo el código siguiente:</p><p class="calibre5">procedure TForm1.ListBox1DrawItem(</p><p class="calibre5">Control: TWinControl; Index: Integer;</p><p class="calibre5">Rect: TRect; State: TOwnerDrawState);</p><p class="calibre5">begin</p><p class="calibre5">With (Control As TListBox) Do</p><p class="calibre5">Begin</p><p class="calibre5">// Si el número es menor que 0</p><p class="calibre5">If StrToInt(Items[Index]) < 0 Then</p><p class="calibre5">// lo mostramos en rojo</p><p class="calibre5">Canvas.Font.Color := clRed</p><p class="calibre5">// si es mayor que cero</p><p class="calibre5">Else If StrToInt(Items[Index]) > 0 Then</p> <p class="calibre5">// lo mostramos en azul</p><p class="calibre5">Canvas.Font.Color := clBlue</p><p class="calibre5">Else Begin // si es cero lo mostramos </p><p class="calibre5">// en negrita y con color negro</p><p class="calibre5">Canvas.Font.Color := clBlack;</p><p class="calibre5">Canvas.Font.Style := [fsBold];</p><p class="calibre5">End;</p><p class="calibre5">Canvas.TextRect(Rect, Rect.Left,</p><p class="calibre5">Rect.Top, Items[Index]);</p><p class="calibre5">End;</p><p class="calibre5">end;</p><p class="calibre5">Lo único que falta es dar el valor True a la propiedad Default del botón, hacer doble clic sobre él e introducir la sentencia ListBox1.Items.Add(Edit1.Text); para poder añadir líneas con números a la lista. Al ejecutarlo podrá ver, como en la figura, que según el valor del número aparece en un color u otro.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAAL2ZF" class="calibre2"></a>78 Cómo obtener direcciones de red </h2><img src="img/image061.JPG" id="a60" alt="" class="calibre4"/><p class="calibre5">Todos los adaptadores de red Ethernet, que es el tipo más habitual, cuentan con una dirección única conocida como MAC, así como con una dirección IP en caso de que forme parte de una red TCP/IP. Estos datos pueden ser necesarios y útiles en diversos casos, tanto para identificar al equipo de forma única, con la dirección MAC, como para saber la subred TCP/IP de que forma parte el equipo y encontrar a su servidor.</p><p class="calibre5">La función NetBios(), cuyo prototipo y estructuras asociadas se encuentran en el módulo Nb30 de Delphi, permite ejecutar diferentes comandos de servicios de red, entre ellos uno llamado NCBASTAT que sirve para obtener distinta información acerca del estado y configuración de los adaptadores.</p><p class="calibre5">Para poder recuperar la dirección MAC, que es lo que interesa, básicamente hay que preparar una estructura TNcb, con los parámetros apropiados, y a continuación llamar a NetBios() para obtener la información. En este caso habría que facilitar el número de adaptador, un nombre y la dirección y longitud de un bloque de memoria en el que se devolverá el resultado. Tras la llamada, el miembro adapter_address, que es una matriz de seis elementos, contendrá los bytes que identifican a la tarjeta.</p><p class="calibre5">Para obtener la dirección IP propia, lo más fácil es usar las funciones <i class="calibre6">Windows sockets</i>. Básicamente se llama a gethostname(), para obtener el nombre de nuestro ordenador, y a continuación a gethostbyname(), que devuelve una estructura de datos en las que están contenidas las direcciones IP. Para convertir esas direcciones, que están almacenadas en cuatro bytes, en una cadena, lo más simple es usar la función inet_ntoa(). Todas estas funciones están documentadas en la API de Windows.</p><p class="calibre5">Puede ver un ejemplo colocando un botón en un formulario e incluyendo el código del Listado 1. Al pulsar el botón se obtiene y muestra tanto la dirección MAC como la IP. Para mantener la simplicidad tan sólo se obtiene la primera dirección de cada tipo, pero bastaría un bucle para recuperar otras que pudieran existir en caso de que el sistema contase con varios adaptadores.</p><p class="calibre5">**************************** OJO LISTADO **************************</p><p class="calibre5">Uses Nb30, Winsock;</p><p class="calibre5">procedure TForm1.Button1Click(Sender: TObject);</p><p class="calibre5">Type</p><p class="calibre5">// Una estructura que une el estado del adaptador</p><p class="calibre5">// con una matriz de estructuras TNameBuffer</p><p class="calibre5">ASTAT = record</p><p class="calibre5">adapt: TAdapterStatus;</p><p class="calibre5">NameBuff: Array[0..29] Of TNameBuffer;</p><p class="calibre5">end;</p><p class="calibre5">Var</p><p class="calibre5">Adaptador: ASTAT; </p><p class="calibre5">Ncb: TNCB;</p><p class="calibre5">Nombre: String;</p><p class="calibre5">DatosSocket: WSAData;</p><p class="calibre5">BloqueIP: PHostEnt;</p><p class="calibre5">DirIP: in_addr;</p><p class="calibre5">Mensaje: String;</p><p class="calibre5">begin</p><p class="calibre5">With Ncb Do // Inicializamos la estructura para ejecutar</p><p class="calibre5">Begin // el comando NCBSTAT</p><p class="calibre5">ncb_command := char(NCBASTAT);</p><p class="calibre5">ncb_lana_num := char(0); // asumimos que sólo hay un adaptador</p><p class="calibre5">ncb_callname := '*'; // y no facilitamos nombre</p><p class="calibre5">ncb_buffer := @Adaptador; // dirección de la estructura para obtener</p><p class="calibre5">ncb_length := sizeof(Adaptador); // los datos devueltos</p><p class="calibre5">End;</p><p class="calibre5">Netbios(@Ncb); // Llamada a NetBios</p><p class="calibre5">// Mostramos los datos</p><p class="calibre5">With Adaptador.adapt Do</p><p class="calibre5">Mensaje := 'La dirección MAC es: ' +</p><p class="calibre5">IntToHex(Integer(adapter_address[0]), 2) +</p> <p class="calibre5">IntToHex(Integer(adapter_address[1]), 2) + </p><p class="calibre5">IntToHex(Integer(adapter_address[2]), 2) +</p><p class="calibre5">IntToHex(Integer(adapter_address[3]), 2) +</p> <p class="calibre5">IntToHex(Integer(adapter_address[4]), 2) + </p><p class="calibre5">IntToHex(Integer(adapter_address[5]), 2) + #13#10;</p><p class="calibre5">WSAStartup($0101, DatosSocket); // Inicializamos Windows sockets</p><p class="calibre5">SetLength(Nombre, MAX_PATH); // y obtenemos el nombre de nuestro equipo</p><p class="calibre5">gethostname(PChar(Nombre), MAX_PATH);</p><p class="calibre5">// que usamos para obtener un bloque de información sobre IP</p><p class="calibre5">BloqueIP := gethostbyname(PChar(Nombre));</p><p class="calibre5">// del cual recuperamos la dirección</p><p class="calibre5">CopyMemory(@DirIP, (BloqueIP^).h_addr_list^, BloqueIP.h_length);</p><p class="calibre5">Mensaje := Mensaje + 'Direccion IP: ' + inet_ntoa(DirIP); // y la mostramos</p><p class="calibre5">ShowMessage(Mensaje);</p><p class="calibre5">end;</p><p class="calibre5">Listado 1. Código Delphi para recuperar las direcciones MAC e IP de un ordenador</p><h2 class="calibre3"><a name="heading_c.oebdocIDA2Q2ZF" class="calibre2"></a>79 Personalización de menús </h2><img src="img/image062.JPG" id="a61" alt="" class="calibre4"/><p class="calibre5">Una de las opciones que más suelen valorar los usuarios de una aplicación es la posibilidad de personalizar su interfaz de usuario, por ejemplo barras de botones y menús, lo cual les permite adaptarlas a sus preferencias y trabajar más cómodamente. Para el programador, sin embargo, no es una tarea sencilla de implementar. ¿Cómo permitir, por ejemplo, la personalización de un menú?</p><p class="calibre5">Efectuar esa tarea directamente sobre el menú realmente no es sencillo, aunque con algo de trabajo podría hacerse. Resulta bastante más fácil, sin embargo, traspasar la estructura del menú a un control pensado específicamente para la visualización y modificación de listas jerárquicas de datos, como es el caso de un menú. Este control es TTreeView, y para copiar un menú completo en dicho control tan sólo habría que llamar a la función siguiente entregando dos parámetros: el nombre del menú y el del TTreeView destinatario.</p><p class="calibre5">// Procedimiento para copiar</p><p class="calibre5">// un TMainMenu a TTreeView</p><p class="calibre5">Procedure CopiaMenuATreeView(</p><p class="calibre5">Menu: TMainMenu; Arbol: TTreeView);</p><p class="calibre5">Var</p><p class="calibre5">Contador: Integer;</p><p class="calibre5">Nodo: TTreeNode;</p><p class="calibre5">// Procedimiento interno recursivo que se </p><p class="calibre5">// encarga de recorrer las opciones</p><p class="calibre5">Procedure AnadeOpcion(</p><p class="calibre5">Opcion: TMenuItem; Nodo: TTreeNode);</p><p class="calibre5">Var</p><p class="calibre5">Contador: Integer; </p><p class="calibre5">NuevoNodo: TTreeNode;</p><p class="calibre5">Begin</p><p class="calibre5">// Añadimos la opción recibida</p><p class="calibre5">NuevoNodo := Arbol.Items.AddChild(</p><p class="calibre5">Nodo, Opcion.Caption);</p><p class="calibre5">// y recorremos todas las que pudiera tener</p><p class="calibre5">For Contador := 0 To Opcion.Count-1 Do</p><p class="calibre5">// llamándonos de forma recursiva</p><p class="calibre5">AnadeOpcion(Opcion.Items[Contador], </p><p class="calibre5">NuevoNodo);</p><p class="calibre5">End;</p><p class="calibre5">Begin</p><p class="calibre5">// Añadimos un primer nodo raíz</p><p class="calibre5">Nodo := Arbol.Items.Add(Nil, </p><p class="calibre5">Menu.Name);</p><p class="calibre5">// y recorremos las opciones principales</p><p class="calibre5">// llamando a AnadeOpcion por cada una</p><p class="calibre5">For Contador := 0 To </p><p class="calibre5">Menu.Items.Count-1 Do</p><p class="calibre5">AnadeOpcion(</p><p class="calibre5">Menu.Items[Contador], Nodo);</p><p class="calibre5">End;</p><p class="calibre5">Tras insertar en un formulario un menú con algunas opciones y un TTreeView, podríamos ejecutar el programa y ver cómo la estructura de ese menú pasa automáticamente a la lista jerárquica. Allí el usuario puede modificar los títulos de las opciones y cambiar las teclas de acceso rápido. Incluso, disponiendo las opciones adecuadas, podría permitirse el desplazamiento de las opciones para que pudieran ser colocadas en el orden que interesase.</p> <p class="calibre5">Lógicamente, finalizado el trabajo del usuario sería preciso recrear el menú a partir de los datos existentes en el TTreeView en un proceso que, básicamente, sería el inverso al desarrollado en el código anterior.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA5U2ZF" class="calibre2"></a>80 Selección de carpetas </h2><img src="img/image063.JPG" id="a62" alt="" class="calibre4"/><p class="calibre5">En la página Dialogs de la Paleta de componentes de Delphi existen múltiples componentes que facilitan la selección de archivos para abrir o guardar archivos con imágenes, colores, estilos de letra, etc. No hay disponible, por el contrario, ningún cuadro de diálogo que haga posible la elección de una carpeta, algo bastante usual cuando se crea una aplicación. </p><p class="calibre5">Hay que tener en cuenta, sin embargo, que además de componentes Delphi cuenta con un importante número de funciones muy útiles, entre ellas una llamada SelectDirectory() que, precisamente, muestra un cuadro de diálogo para que el usuario pueda seleccionar una carpeta. Los parámetros necesarios son tres: una cadena con el título que se mostrará en la ventana, otra con el camino a partir del cual podrá efectuarse la selección y, por último, una variable en la que se devolverá el resultado.</p><p class="calibre5">Dependiendo del segundo parámetro, el usuario podrá ver en el cuadro de diálogo todas las unidades del sistema, tan sólo el contenido de una unidad o, incluso, sólo parte de una unidad. Entregando una cadena vacía aparecerá toda la jerarquía del sistema, como la que se muestra en el Explorador de Windows. Facilitando el camino de una unidad o carpeta sólo aparecerán los elementos que haya debajo, jerárquicamente hablando.</p><p class="calibre5">Para probar esta función simplemente introduzca un código como el siguiente en el procedimiento asociado al evento OnClick de un botón:</p> <p class="calibre5">procedure TForm1.Button1Click(</p><p class="calibre5">Sender: TObject);</p><p class="calibre5">var</p><p class="calibre5">Carpeta: String; </p><p class="calibre5">begin</p><p class="calibre5">SelectDirectory('Seleccione una carpeta', </p> <p class="calibre5">'', Carpeta);</p><p class="calibre5">ShowMessage(Carpeta);</p><p class="calibre5">end;</p><p class="calibre5">Al ejecutar el programa y pulsar el botón verá aparecer una ventana similar a la de la figura. Es un método fácil y rápido de solicitar al usuario de nuestra aplicación que nos indique el camino donde quiere alojar o del que desea recuperar una cierta información. </p><p class="calibre5"><b class="calibre8"><i class="calibre6">Francisco Charte</i> </b><i class="calibre6">es profesor de informática y autor de diferentes libros sobre lenguajes y sistemas de información. </i> </p><h1 class="calibre1"><a name="heading_c.oebdocIDA2W2ZF" class="calibre2"></a>Visual C++/C++ Builder</h1><p class="flushright">Francisco Charte Ojeda</p><p class="flushright">charte@pcw.idg.es</p><p class="calibre5">Estos dos entornos son los más utilizados en Windows para desarrollar aplicaciones utilizando el lenguaje C++ y, aunque lógicamente son distintos, los dos están basados en el mismo lenguaje, por lo que comparten características. Algunos de los trucos descritos a continuación son aplicables, asimismo, a cualquier otro compilador de C++.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAOX2ZF" class="calibre2"></a>81 Destructores virtuales</h2><p class="calibre5">C++ es un lenguaje orientado a objetos en el que es posible definir nuevas clases a partir de otras ya existentes, usando para ello un mecanismo de herencia. Esta técnica, conjuntamente con el polimorfismo, permite reutilizar código de una manera bastante eficiente. En la herencia y el polimorfismo juegan un papel importante los métodos virtuales, pero la mayoría de los programadores pasan por alto el hecho de que los destructores también deben ser virtuales.</p><p class="calibre5">En lugar de explicar con palabras el motivo de esa necesidad, veámoslo mejor con un ejemplo bastante claro. Partamos de la definición de las dos clases siguientes:</p><p class="calibre5">class Base {</p><p class="calibre5">protected: </p><p class="calibre5">int N;</p><p class="calibre5">public: </p><p class="calibre5">Base() : N(6) {}</p><p class="calibre5">~Base()</p><p class="calibre5">{ ShowMessage(N); }</p><p class="calibre5">};</p><p class="calibre5">class Derivada : public Base {</p><p class="calibre5">public:</p><p class="calibre5">Derivada() {} </p><p class="calibre5">~Derivada() { N /= 2; }</p><p class="calibre5">};</p><p class="calibre5">Con el fin de simplificar, toda la implementación se encuentra en línea dentro de la misma definición de clases. La clase Base cuenta con un miembro protegido, accesible por tanto para Derivada, al que asigna un valor inicial. Cuando el objeto es destruido se muestra el valor que tiene en ese momento. Puesto que en la clase Base no se manipula la variable, siempre que se destruya un objeto de este tipo el valor será el mismo dado inicialmente.</p><p class="calibre5">En la clase Derivada, que tiene como base a la anterior, se modifica el valor de N en el destructor, dividiéndolo entre dos. Si creamos un objeto de esta clase y a continuación lo destruimos, el valor de N mostrado en el destructor de Base será 3 y no 6, como es lógico. Compruébelo ejecutando las sentencias siguientes:</p><p class="calibre5">Base *Objeto1 = new Base();</p><p class="calibre5">delete Objeto1;</p><p class="calibre5">Derivada *Objeto2 = new Derivada();</p><p class="calibre5">delete Objeto2;</p><p class="calibre5">La técnica conocida como polimorfismo permite usar objetos de distintas clases, pero con una base común, de manera genérica. Es posible, por ejemplo, asignar una referencia de tipo Derivada a un puntero Base. Al destruir esa referencia, sin embargo, los destructores no se ejecutan en el orden correcto y el valor mostrado no es 3 sino 6, lo cual indica que se ejecutó el destructor Base antes que el destructor Derivada. Esto es anormal, puesto que el objeto era de la clase Derivada.</p><p class="calibre5">Para solucionar este problema basta con anteponer la palabra virtual en la definición del destructor de la clase base, lo cual implicará que el destructor sea virtual en todas las clases derivadas. Es algo que puede tomar como norma: defina los destructores siempre como virtuales, le evitará problemas.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAD02ZF" class="calibre2"></a>82 Cadenas AnsiString </h2><img src="img/image064.JPG" id="a63" alt="" class="calibre4"/><p class="calibre5">El tratamiento de cadenas de caracteres nunca ha sido uno de los puntos fuertes del lenguaje C++, en contraposición a otros como BASIC o Pascal. La simple operación de asignar una cadena a una variable, concatenar dos cadenas u obtener su longitud, por ejemplo, exige el uso de una serie de funciones bien conocidas por los programadores de C y C++, como strlen(), strcpy() o strcat(). Debido a esto los compiladores de C++ incorporan librerías que, como la STL (<i class="calibre6">Standard Template Library</i>), cuentan con clases que simplifican ese trabajo. </p><p class="calibre5">En C++ Builder, herramienta que dispone de una jerarquía de clases y componentes conocida como VCL, tenemos disponible la clase AnsiString, equivalente al tipo String que existe en Delphi. Lo más interesante de esta clase, aparte de facilitar el trabajo con cadenas de caracteres, es que puede utilizarse para realizar multitud de conversiones, tan sólo es necesario conocer los constructores y métodos con que cuenta. Algunos de esos métodos son estáticos, lo cual significa que podemos usarlos directamente, sin necesidad de crear un objeto AnsiString.</p><p class="calibre5">Mediante los métodos de la clase AnsiString es posible convertir un número decimal en hexadecimal, un valor de punto flotante en una cadena, una cadena en un número entero, convertir mayúsculas en minúsculas o viceversa, generar cadenas a partir de un cierto carácter, dar formato a datos en base a una cadena de descripción, analizar el contenido de una cadena para encontrar delimitadores y patrones, etc. Los operadores de esta clase simplifican el acceso individual a los caracteres, la concatenación y la comparación de cadenas.</p><p class="calibre5">Para efectuar una conversión de cualquier dato a cadena de caracteres, lo único que hay que hacer es crear un objeto AnsiString facilitando como parámetro ese dato. Es lo que se hace en el siguiente fragmento:</p><p class="calibre5">AnsiString Cadena = 103.7;</p><p class="calibre5">ShowMessage(Cadena);</p><p class="calibre5">Esto es posible gracias a la existencia de más de una docena de constructores diferentes en la clase AnsiString, constructores que son usados ante asignaciones como la anterior. En la figura puede ver algunos de esos constructores.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAE12ZF" class="calibre2"></a>83 Cómo añadir nuevas palabras clave</h2><img src="img/image065.JPG" id="a64" alt="" class="calibre4"/><p class="calibre5">La mayoría de las herramientas de desarrollo actuales cuenta con editores de código capaces de realzar el texto sintácticamente, haciendo más fácil y rápida la identificación de las palabras clave, comentarios, etc. En el caso concreto de Visual C++ existe la posibilidad de añadir una lista de palabras definidas por el usuario, palabras cuyo aspecto en el editor puede establecerse según nuestras preferencias.</p><p class="calibre5">Esto es especialmente interesante si usamos el entorno de Visual C++ para trabajar con otros lenguajes, por ejemplo C#, configurando adecuadamente el editor y las opciones para compilación. </p><p class="calibre5">Lo primero que hay que hacer es localizar el ejecutable msdev.exe que habitualmente se encuentra en la carpeta Common\MSDev98\Bin del directorio donde esté instalado Visual Studio. En esa carpeta crearemos un archivo de texto con el nombre usertype.dat, incluyendo en él todas las palabras clave del nuevo lenguaje a razón de una por línea.</p><p class="calibre5">Finalizada la edición del archivo de palabras clave, lo siguiente sería iniciar Visual C++ y elegir la opción Options del menú Tools. Ésta da paso a una ventana con múltiples páginas, de las cuales nos interesa la llamada Format que puede ver en la figura. No tenemos más que seleccionar el elemento User Defined Keywords de la lista Colors y definir la apariencia de esas palabras. </p><p class="calibre5">Completado todo el proceso, sólo resta comenzar a trabajar en un archivo C++ para comprobar cómo se diferencian las palabras clave de su lista del resto del código.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA112ZF" class="calibre2"></a>84 Cómo definir operadores para clases propias</h2><p class="calibre5">Una de las cualidades más interesantes del lenguaje C++, sintácticamente hablando, es la posibilidad de definir operadores para las clases propias. Esto simplifica el uso de dichas clases al reducir el número de métodos a los que hay que invocar para realizar las tareas. Siempre es más sencillo disponer el operador ++ detrás del nombre de un objeto que tener que llamar a un hipotético método Incrementa(), o usar el operador estándar de inserción, <<, para añadir un elemento que llamar a un método Anade().</p><p class="calibre5">La definición de un operador en una cierta clase no se diferencia demasiado de la de cualquier método, contando con un valor de retorno y unos parámetros. La distinción es que, en lugar de facilitar un identificador propio, usaremos la palabra operator seguida del operador a definir. El fragmento siguiente, por ejemplo, podría ser la definición del operador + para una hipotética clase Unidad.</p> <p class="calibre5">long operator+(Unidad& OtraUnidad);</p> <p class="calibre5">No todos los operadores pueden ser redefinidos, pero sí la mayor parte de ellos: aritméticos, incremento y decremento, inserción y extracción, corchetes e, incluso, los operadores new y delete, lo cual facilitaría el control de la creación y destrucción de objetos de la clase. </p><p class="calibre5">Una posibilidad muy interesante, especialmente cuando se trabaja con clases que contienen o representan listas de elementos, es la de poder redefinir el operador [], facilitando así el acceso a los elementos en lugar de implementar métodos como LeeElemento() y AsignaElemento(). Suponga que cuenta con una clase, llamémosla Unidad, que serviría para realizar diversas operaciones sobre las unidades de almacenamiento que hay en el sistema. En principio esta clase podría ser así de sencilla:</p><p class="calibre5">// Clase que ofrece datos de unidades</p><p class="calibre5">class Unidad {</p><p class="calibre5">private:</p><p class="calibre5">// Camino raíz de la unidad "X:\"</p><p class="calibre5">AnsiString Camino;</p><p class="calibre5">protected:</p><p class="calibre5">// El constructor está protegido</p><p class="calibre5">Unidad(char Letra) :</p><p class="calibre5">Camino(Letra) { Camino += ":\\"; }</p><p class="calibre5">// sólo la clase Unidades podrá usarlo</p><p class="calibre5">friend class Unidades;</p><p class="calibre5">public:</p><p class="calibre5">// Métodos públicos</p><p class="calibre5">long EspacioTotal();</p><p class="calibre5">long EspacioLibre();</p><p class="calibre5">}; </p><p class="calibre5">Como se aprecia, el único constructor disponible es protegido, lo cual significa que no habrá manera de crear directamente un objeto de esta clase. La declaración friend class Unidades, sin embargo, indica que otra clase, llamada Unidades, sí tiene acceso a todos los miembros de ésta. ¿Cómo permitiría esa clase obtener un objeto Unidad asociado a una determinada unidad física de almacenamiento? Podríamos definir un método para ello, pero resultaría más sencillo usar un operador, como se hace aquí:</p><p class="calibre5">// Esta clase ofrece una lista de</p><p class="calibre5">// unidades y crea objetos Unidad</p><p class="calibre5">class Unidades {</p> <p class="calibre5">public:</p><p class="calibre5">// Operador [] que acepta como</p><p class="calibre5">// índice la letra de unidad</p><p class="calibre5">Unidad* operator[](char Letra) </p><p class="calibre5">// crea un objeto Unidad y</p><p class="calibre5">// lo devuelve</p><p class="calibre5">{ return new Unidad(Letra); }</p><p class="calibre5">// Este método crea una lista</p><p class="calibre5">// con las letras de unidad</p><p class="calibre5">static AnsiString ListaUnidades();</p><p class="calibre5">};</p><p class="calibre5">A partir de este momento podríamos obtener objetos Unidad usando expresiones como las del fragmento de código siguiente:</p><p class="calibre5">Unidades varUnidades; </p><p class="calibre5">Unidad * UnaUnidad;</p><p class="calibre5">UnaUnidad = varUnidades['C'];</p><p class="calibre5">ShowMessage(</p><p class="calibre5">UnaUnidad- >EspacioLibre());</p><p class="calibre5">ShowMessage(</p><p class="calibre5">varUnidades.ListaUnidades());</p><p class="calibre5">ShowMessage(</p><p class="calibre5">varUnidades['G']->EspacioTotal());</p><p class="calibre5">La sintaxis varUnidades['C'] resulta bastante más intuitiva que si hubiésemos definido un método y tuviésemos que escribir algo como varUnidades.Unidades('C'), no cabe duda. Para obtener realmente algún funcionamiento útil sería preciso finalizar la implementación de las clases Unidad y Unidades, implementación que bien podría ser la mostrada en el Listado 2. </p><p class="calibre5">************************** OJO LISTADO ***********************</p><p class="calibre5">long Unidad::EspacioTotal()</p><p class="calibre5">{</p><p class="calibre5">// Variables para recuperar datos</p><p class="calibre5">unsigned long // de la unidad</p><p class="calibre5">SectoresCluster, BytesSector,</p><p class="calibre5">ClustersLibres, ClustersTotales;</p><p class="calibre5">// Obtenemos esos datos</p><p class="calibre5">GetDiskFreeSpace(</p><p class="calibre5">Camino.c_str(), &SectoresCluster,</p><p class="calibre5">&BytesSector, &ClustersLibres,</p><p class="calibre5">&ClustersTotales);</p><p class="calibre5">// y devolvemos el espacio Total en Ks</p><p class="calibre5">return SectoresCluster * BytesSector *</p><p class="calibre5">ClustersTotales / 1024;</p><p class="calibre5">}</p><p class="calibre5">long Unidad::EspacioLibre()</p><p class="calibre5">{</p><p class="calibre5">// Variables para recuperar datos</p><p class="calibre5">unsigned long // de la unidad</p><p class="calibre5">SectoresCluster, BytesSector,</p><p class="calibre5">ClustersLibres, ClustersTotales;</p><p class="calibre5">// Obtenemos esos datos</p><p class="calibre5">GetDiskFreeSpace(</p><p class="calibre5">Camino.c_str(), &SectoresCluster,</p><p class="calibre5">&BytesSector, &ClustersLibres,</p><p class="calibre5">&ClustersTotales);</p><p class="calibre5">// y devolvemos el espacio libre en Ks</p><p class="calibre5">return SectoresCluster * BytesSector *</p><p class="calibre5">ClustersLibres / 1024;</p><p class="calibre5">}</p><p class="calibre5">// Este método crea una lista de unidades</p><p class="calibre5">// y la devuelve como cadena</p><p class="calibre5">AnsiString Unidades::ListaUnidades()</p><p class="calibre5">{</p><p class="calibre5">char CadenaUnidades[MAX_PATH];</p><p class="calibre5">AnsiString Resultado = "";</p><p class="calibre5">int IndiceOrigen = 0;</p><p class="calibre5">// Obtenemos la cadena con unidades</p><p class="calibre5">GetLogicalDriveStrings(MAX_PATH,</p><p class="calibre5">CadenaUnidades);</p><p class="calibre5">// Recorremos la cadena hasta</p><p class="calibre5">// encontrar un doble nulo</p><p class="calibre5">while(CadenaUnidades[IndiceOrigen]) {</p><p class="calibre5">// tomamos la letra de unidad</p><p class="calibre5">Resultado += CadenaUnidades[IndiceOrigen];</p> <p class="calibre5">// y si no es la última</p><p class="calibre5">if(CadenaUnidades[IndiceOrigen+4])</p><p class="calibre5">Resultado += ','; // añadimos separador</p><p class="calibre5">// pasamos al siguiente elemento</p><p class="calibre5">IndiceOrigen += 4;</p><p class="calibre5">} </p><p class="calibre5">// Devolvemos la lista</p><p class="calibre5">return Resultado;</p><p class="calibre5">}</p> <p class="calibre5">Listado 2. Implementación de los métodos de las clases Unidad y Unidades.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAKH3ZF" class="calibre2"></a>85 Automatización en C++ Builder</h2><p class="calibre5">En Windows existe un mecanismo, conocido como automatización, que permite a una aplicación controlar a otra o a un componente. Lenguajes como Visual Basic y Delphi permiten usar dicho mecanismo de una manera realmente sencilla, siendo tan natural que los programadores la utilizan prácticamente sin darse en cuenta. </p><p class="calibre5">Con C++ el caso es distinto, ya que, a diferencia de Visual Basic y Delphi, no es un lenguaje tan estrechamente ligado a Windows. Dependiendo de la herramienta C++ que usemos, el sistema para poder automatizar una aplicación será uno u otro. En el caso de C++ Builder todo el secreto está en conocer algunos métodos de la clase Variant. Ésta tiene por finalidad representar en C++ Builder el tipo de dato Variant que existe en otros lenguajes.</p><p class="calibre5">Simplemente conociendo dos métodos de Variant tendremos suficiente. El primero de ellos, llamado CreateObject(), es estático, lo cual significa que podemos llamarlo directamente sin necesidad de crear un objeto de la clase. El único parámetro que precisa es el identificador de automatización del objeto a crear, generalmente compuesto por el nombre de la aplicación, un punto y el nombre de un componente de esa aplicación.</p><p class="calibre5">El otro método de interés es Exec(). Éste toma como parámetro un objeto Procedure o un objeto Function y lo ejecuta en la aplicación automatizada. El siguiente fragmento de código, por ejemplo, abrirá Microsoft Word, creará un nuevo documento, insertará en él una línea de texto y la guardará en un archivo:</p><p class="calibre5">Variant Word;</p><p class="calibre5">Word = Variant::CreateObject(</p><p class="calibre5">"Word.Basic"); </p><p class="calibre5">Word.Exec(Procedure("AppShow"));</p><p class="calibre5">Word.Exec(Function("FileNew"));</p><p class="calibre5">Word.Exec(Procedure("Insert") << </p><p class="calibre5">"Texto insertado desde C++ Builder");</p><p class="calibre5">Word.Exec(Function("FileSaveAs") << </p> <p class="calibre5">"Prueba.doc");</p><p class="calibre5">Observe que cuando es necesario facilitar algún parámetro a un procedimiento o una función, por ejemplo la cadena a insertar o el nombre del archivo, se utiliza el operador de inserción estándar. </p><p class="calibre5">Conociendo esta técnica, lo único necesario para poder automatizar una aplicación es conocer su modelo de componentes: nombres de objetos, procedimientos, funciones y propiedades. Es algo que, generalmente, se documenta en la propia ayuda de la aplicación.</p><h2 class="calibre3"><a name="heading_c.oebdocIDADJ3ZF" class="calibre2"></a>86 Automatización en Visual C++ </h2><img src="img/image066.JPG" id="a65" alt="" class="calibre4"/><p class="calibre5">Al igual que ocurre con C++ Builder, Visual C++ dispone de una clase que, hasta cierto punto, simplifica la programación de controladores de automatización. Dicha clase es COleDispatchDriver y, aunque permite las mismas operaciones que la clase Variant de C++ Builder, su uso es algo más complejo. Esto se debe a que la clase Variant de C++ Builder se ocupa de muchos de los detalles de bajo nivel relativos al mecanismo de automatización, como la resolución de nombres y el empaquetado de parámetros, mientras que la clase COleDispatchDriver nos deja a nosotros esas tareas.</p><p class="calibre5">El equivalente a CreateObject() en la clase COleDispatchDriver es CreateDispatch(). Necesita dos parámetros: el identificador de automatización y un objeto COleException donde devolver información de posibles errores. Internamente, los métodos y propiedades de un componente automatizable son reconocidos mediante identificadores y no con nombres descriptivos, como FileSaveAs. Cada vez que necesitemos usar un método tendremos que obtener ese identificador de alguna manera.</p><p class="calibre5">Uno de los miembros de la clase COleDispatchDriver, llamado m_lpDispatch, permite acceder directamente a la interfaz IDispatch del objeto automatizable. Esa interfaz cuenta con un método GetIDsOfNames() que, facilitándole el nombre de un método o propiedad, nos facilita el correspondiente identificador.</p><p class="calibre5">Disponiendo ya del identificador, lo único que hay que hacer es llamar al método InvokeHelper() de la clase COleDispatchDriver. Los parámetros necesarios son: el identificador, una constante indicando si se trata de un método, una lectura de propiedades, una asignación a propiedad, etc., una constante indicando el tipo del valor de retorno, un puntero a la variable donde se almacenará ese valor, una matriz con los tipos de los parámetros y, finalmente, una lista variable con esos parámetros.</p><p class="calibre5">Lo mejor es ver en la práctica cómo hacer exactamente lo mismo que en el truco anterior: crear un documento de Word e insertar un texto en él. El código necesario sería el siguiente:</p><p class="calibre5">COleDispatchDriver Word;</p><p class="calibre5">COleException * Excepcion = </p><p class="calibre5">new COleException;</p><p class="calibre5">CoInitialize(NULL); // Inicializamos COM</p><p class="calibre5">// y creamos el objeto</p><p class="calibre5">Word.CreateDispatch( </p><p class="calibre5">"Word.Basic", Excepcion);</p><p class="calibre5">DISPID disp;</p><p class="calibre5">BYTE Tipos[] = VTS_BSTR;</p><p class="calibre5">LPOLESTR Metodo;</p> <p class="calibre5">// Llamamos al método AppShow</p><p class="calibre5">Metodo = L"AppShow";</p><p class="calibre5">// Recuperamos el dispid del método</p><p class="calibre5">Word.m_lpDispatch->GetIDsOfNames( </p><p class="calibre5">IID_NULL, &Metodo, 1, </p><p class="calibre5">GetUserDefaultLCID(), &disp);</p><p class="calibre5">// y lo ejecutamos</p><p class="calibre5">Word.InvokeHelper(disp, </p><p class="calibre5">DISPATCH_METHOD, </p><p class="calibre5">VT_EMPTY, NULL, NULL);</p><p class="calibre5">// Lo mismo con el método FileNew</p><p class="calibre5">Metodo = L"FileNew";</p><p class="calibre5">Word.m_lpDispatch->GetIDsOfNames( </p><p class="calibre5">IID_NULL, &Metodo, 1, </p><p class="calibre5">GetUserDefaultLCID(), &disp);</p><p class="calibre5">Word.InvokeHelper(disp, </p><p class="calibre5">DISPATCH_METHOD, </p><p class="calibre5">VT_EMPTY, NULL, NULL);</p><p class="calibre5">// Para Insert es necesario facilitar</p><p class="calibre5">Metodo = L"Insert";</p><p class="calibre5">Word.m_lpDispatch->GetIDsOfNames( </p><p class="calibre5">IID_NULL, &Metodo, 1, </p><p class="calibre5">GetUserDefaultLCID(), &disp);</p><p class="calibre5">// un parámetro</p><p class="calibre5">Word.InvokeHelper(disp, </p><p class="calibre5">DISPATCH_METHOD, </p><p class="calibre5">VT_EMPTY, NULL, Tipos, </p><p class="calibre5">"Texto insertado desde Visual C++");</p><p class="calibre5">Como puede ver, el código es considerablemente más extenso y complejo que en el caso de C++ Builder, aunque el resultado final es el mismo.</p><p class="calibre5">Tanto Visual C++ como C++ Builder son capaces de simplificar el uso de aplicaciones automatizables siempre que dispongamos de una librería de tipos. Usando la opción adecuada del entorno, esa librería de tipos se importa y genera una clase que permite trabajar con la aplicación de una manera mucho más sencilla. </p><p class="calibre5"><b class="calibre8"><i class="calibre6">Francisco Charte</i> </b><i class="calibre6">es profesor de informática y autor de diferentes libros sobre lenguajes y sistemas de información. </i> </p><h2 class="calibre3"><a name="heading_c.oebdocIDAJO3ZF" class="calibre2"></a>Montaje del PC</h2><p class="flushright">Noé Soriano</p><p class="flushright">noe@idg.es</p><p class="calibre5">¿La forma de ensamblar un ordenador personal puede afectar a su rendimiento? Esto, que a primera vista parece absurdo, tiene mucha importancia. A continuación vamos a dar unos sencillos consejos de montaje de algunos de los elementos del hardware de un equipo informático, que pueden aumentar el rendimiento del mismo y reducir algunos errores de funcionamiento. Los lectores escépticos que piensen que las recomendaciones de montaje no influyen en el funcionamiento de un dispositivo electrónico podrán comprobar la utilidad de seguir estos sencillos consejos, aunque la mayoría nada tiene que ver con la mejora de los procesos electrónicos internos que se producen en un equipo informático. Hay que recordar que un ordenador personal no es un dispositivo enteramente electrónico, dispone de partes mecánicas y procesos analógicos que pueden reducir su nivel de errores siguiendo estas sencillas recomendaciones.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA1O3ZF" class="calibre2"></a>87 Disipador del microprocesador </h2><img src="img/image067.jpg" id="a66" alt="" class="calibre4"/><p class="calibre5">El disipador metálico y el ventilador del microprocesador tienen como objetivo reducir la temperatura de este componente para evitar posibles cuelgues del sistema y mejorar el rendimiento de la CPU. Actualmente, tanto el disipador como el ventilador se montan en todos los equipos nuevos que se ponen a la venta. Sin embargo, casi ningún ensamblador incluye en el montaje un elemento que mejora el rendimiento del disipador hasta en un 60%: la silicona para semiconductores. Tanto la superficie del microprocesador como la del disipador metálico, aunque a primera vista puedan parecer planas, en realidad a nivel microscópico son muy irregulares. Estas irregularidades de las superficies hacen que se pierda contacto entre ambas y que se reduzca la transmisión de calor, perdiendo capacidad de disipación. La silicona evita esto cubriendo las hendiduras de la superficie y permitiendo la transmisión del calor sin pérdidas en la capacidad de disipación.</p><p class="calibre5">Este producto es utilizado con regularidad por los profesionales del sector de la electrónica para mejorar las propiedades de los disipadores de los componentes que emiten calor de forma no deseada. Nosotros recomendamos su uso, incluso el mismo usuario puede adquirir este producto en cualquier comercio especializado, para extender una pequeña cantidad entre en microprocesador y la superficie del disipador metálico. Con esto mejora la transmisión del calor entre ambas superficies, disipándose una mayor cantidad. </p><h2 class="calibre3"><a name="heading_c.oebdocIDAJP3ZF" class="calibre2"></a>88 Slot1 a Socket 370 </h2><img src="img/image068.jpg" id="a67" alt="" class="calibre4"/><p class="calibre5">Debido a la estandarización del Socket 370 en detrimento del Socket 1 para procesadores Intel, es posible que necesitemos utilizar un procesador de última generación y aún tengamos una placa Socket 1. No hay mayor problema; actualmente podemos conseguir por muy poco dinero un convertidor para Socket 370. De hecho, viene incluido con algunas placas. Se trata de una placa que contiene el Socket 370 y se inserta en el zócalo para Slot1. Esta placa suele venir acompañada de un adaptador que ofrece mayor sujeción a la placa base. Soportan los procesadores Intel Celeron y Pentium III, e incluso Cyrix III. Podemos seleccionar el voltaje en el propio adaptador mediante unos <i class="calibre6">jumpers</i> o dejar que el sistema lo autodetecte, al igual que su velocidad. AGAMA es una de las empresas que fabrican este tipo de adaptadores, como el <i class="calibre6">AS370 Card</i>. Su dirección web es <u class="calibre7">www.agamatech.com</u>.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA0P3ZF" class="calibre2"></a>89 Montar un sistema multiprocesador con Celeron </h2><img src="img/image069.JPG" id="a68" alt="" class="calibre4"/><p class="calibre5">En teoría y en la práctica esto es imposible, y es imposible porque Intel no permite hacerlo, no considera este procesador adecuado para constituir un sistema informático multiprocesador, quizá porque le conviene que el usuario que necesite este tipo de equipos se gaste más dinero en sus productos profesionales. Afortunadamente, Intel no tiene bajo su tutela a todos los técnicos del mundo y uno de estos profesionales, Tomohiro Kawada, se saltó el sistema que impide montar en una placa base dual dos procesadores Intel Celeron.</p><p class="calibre5">La forma de hacerlo, además, es extremadamente sencilla; una prueba más de la premeditación de Intel en este sentido. Simplemente hay que soldar dos patillas del microprocesador y ya es posible montarlo sobre placas madre duales. No vamos a comentar el proceso porque no merece la pena. Intentar soldar las dos patillas era la práctica que se seguía al principio de desarrollarse esta técnica. Ahora mismo, por un módico precio ya se venden adaptadores de Socket a Slot preparados precisamente para montar procesadores Celeron y poder utilizarlos en placas duales. Incluso algunos fabricantes ya comercializan placas duales especiales para estos microprocesadores de Intel. </p><p class="calibre5">Cualquiera de estas dos soluciones permitirá al usuario montar un equipo dual con un coste bastante más reducido que si utilizase procesadores Pentium III. Hay que recordar, eso sí, que realizar este tipo de ampliación sólo es recomendable si se va a utilizar un sistema operativo con soporte para multiprocesador, como por ejemplo Windows 2000 o Linux, ya que si no, no aprovecharíamos las ventajas del sistema y utilizaríamos únicamente uno de los dos Intel Celeron.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAOQ3ZF" class="calibre2"></a>90 Fajas, alimentaciones y cables </h2> <img src="img/image070.JPG" id="a69" alt="" class="calibre4"/> <p class="calibre5">Las fajas y cables de alimentación, audio, etc., es conveniente que estén sujetos y recogidos en el interior del ordenador personal. Con esto evitaremos, por ejemplo, que una faja pueda obstruir la entrada de aire del ventilador del microprocesador, o que al instalar una tarjeta o componente podamos desconectar alguno por accidente. Para recoger los cables se pueden utilizar bridas, aunque no son muy recomendables porque a la hora de quitarlas hay que utilizar alguna herramienta de corte y podrían dañarse los cables. Existen sujeciones especiales con dos “antenas” que cumplen la misma función y pueden quitarse con facilidad. Otro elemento interesante son los cubreconectores, especialmente diseñados para tapar las alimentaciones sobrantes y evitar que entren en contacto con alguna parte metálica, provocando un cortocircuito.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAZQ3ZF" class="calibre2"></a>91 Ventilación de la torre</h2><p class="calibre5">Algunos modelos de torre y minitorre vienen preparados para instalar ventiladores adicionales y mejorar la ventilación interna del ordenador. El usuario puede adquirir uno de estos ventiladores e instalarlo fácilmente simplemente atornillándolo en la ubicación destinada para el mismo. Otro consejo recomendable es el de mantener la carcasa de la torre siempre puesta y atornillada, así como las tapas de las ranuras de expansión para tarjetas. Aunque pueda parecer que así se calienta más el equipo, en realidad es al contrario, ya que con la torre bien cerrada se crea un circuito por el que circula el aire, impulsado por el ventilador de la fuente de alimentación y por los adicionales que estén instalados, refrigerando así el resto de componentes. Para favorecer este circuito de aire también es conveniente montar las tarjetas de vídeo, sonido, etcétera, en slots alternos, dejando así mayor espacio entre las tarjetas para que circule el aire y ventile mejor los componentes. Si se montan varios ventiladores adicionales, hay que comprobar que la dirección de salida de aire en cada uno de ellos es la misma, precisamente para crear las corrientes de aire en la misma dirección y favorecer el circuito de aire.</p><p class="calibre5">Cuando hablamos de ventilación hay que tener en cuenta la siguiente recomendación: nunca hay que obstruir las rendijas ni de la CPU ni del monitor. Son muy corrientes algunas mesas de escritorio con un soporte especial para la minitorre del PC. Si este soporte no dispone del suficiente espacio en la parte de atrás de la torre, puede obstruir el orificio de ventilación de la fuente de alimentación y provocar que el sistema se sobrecaliente y se apague debido al sistema de seguridad que incorpora la propia fuente de alimentación. En el caso del monitor, nunca hay que poner trapos o adornos que puedan tapar las rendijas de ventilación. Por supuesto, tampoco pondremos ninguno de los componentes del equipo cerca de una fuente de calor o expuesto a la luz directa del sol, y en el caso de sistemas corporativos como servidores, incluso es conveniente disponer de una sala refrigerada para su ubicación. </p><h2 class="calibre3"><a name="heading_c.oebdocIDAER3ZF" class="calibre2"></a>92 Conexión de dispositivos SCSI </h2><img src="img/image071.jpg" id="a70" alt="" class="calibre4"/><p class="calibre5">Una de las características que más destacan de las controladoras SCSI es la posibilidad de instalar una cadena de dispositivos que, según el tipo de controladora instalada en el sistema, puede llegar hasta los 15 elementos al mismo tiempo, además de la propia controladora. Si dispone de una controladora SCSI con más de un dispositivo instalado, puede mejorar el rendimiento de su ordenador personal, configurándola correctamente. Lo primero que hay que saber es que en una cadena SCSI cada dispositivo debe tener un número de identificación asignado. La cadena SCSI comprueba los dispositivos que tiene instalados y les da preferencia en orden inverso, según el número que tengan asignado. Así, el 6 tiene preferencia sobre el 5 y éste a su vez sobre el 2, por ejemplo. El único dispositivo que siempre tiene preferencia sobre los demás son las grabadoras de CD-ROM, ya que cuando realiza una copia bloquea la cadena para evitar que se produzcan fallos de grabación.</p><p class="calibre5">Sabiendo esto vamos a explicar cómo asignar los números de identificación a cada dispositivo SCSI para lograr el mejor rendimiento y velocidad de funcionamiento. Dado que cada número prevalece sobre todos los inferiores a él, reservaremos el más alto, que dependerá del tipo de controladora instalada, para la propia controladora, siempre y cuando ésta permita configurar este parámetro, bien a través de una BIOS accesible al usuario o con jumpers en la misma placa del dispositivo. Después de la controladora, conviene asignar los dispositivos más utilizados, como por ejemplo discos duros, seguidos de unidad lectora de CD-ROM o DVD. Como ya hemos dicho, las grabadoras disponen de un sistema para prevalecer sobre los demás dispositivos cuando se está realizando una copia, así que si se dispone de una y sólo se le da este uso, no es necesario darle prioridad sobre los demás. Los dispositivos que no se usen continuamente pero que sí necesiten de una buena tasa de transferencia de datos, como unidades ZIP o de cinta, serán los siguientes en preferencia, y por último en las asignaciones más bajas se pueden instalar dispositivos como escáneres, cuya utilización es esporádica y no necesitan de altos niveles de transferencia de datos. </p><p class="calibre5">Éste es el método más recomendable de configuración de una cadena SCSI para sacarle el mayor rendimiento. Luego hay que comprobar si es posible aplicarlo con los dispositivos instalados o hay que realizar modificaciones. Algunos dispositivos SCSI sólo permiten configurar unos números de asignación específicos, teniendo el usuario que adaptar toda la cadena en función de las posibles configuraciones de las que pueda disponer.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAVR3ZF" class="calibre2"></a>93 Conexión de las unidades de disco IDE</h2><img src="img/image072.JPG" id="a71" alt="" class="calibre4"/><img src="img/image073.JPG" id="a72" alt="" class="calibre4"/><img src="img/image074.JPG" id="a73" alt="" class="calibre4"/><p class="calibre5">Actualmente todos los equipos informáticos tienen por lo menos un disco duro y una unidad lectora de CD-ROM. La mayoría de los ordenadores que están a la venta tienen montado el disco duro como maestro y el CD-ROM como esclavo en el canal primario de la controladora EIDE. Esto se hace así por la comodidad en el montaje, ya que de fábrica los discos duros vienen configurados como maestros y los CD-ROM como esclavos. Sin embargo, es un desperdicio de la capacidad de transmisión de datos de la controladora, ya que tenemos uno de los dos canales libre y el otro sobrecargado innecesariamente con dos unidades. </p><p class="calibre5">Al compartir el canal, los dos dispositivos no pueden mantener el flujo constante de datos debiendo alternarse en su funcionamiento, perdiendo así rendimiento el equipo. Lo ideal es instalar el disco duro en el canal primario y la unidad de CD-ROM en el secundario para así aprovechar los dos en la transmisión de datos entre las dos unidades. Si disponemos de una unidad de grabación de CD-ROM, además del lector, es conveniente instalarla separada de la unidad lectora. Si el lector está en el canal primario, instalaremos la grabadora en el secundario. Esto reducirá los errores de grabación, sobre todo en las grabaciones directas (<i class="calibre6">on the fly</i>) desde el lector. Si las dos unidades estuviesen montadas en el mismo canal de la controladora tendrían que repartirse el ancho de banda, perdiendo capacidad en el flujo de datos de ambas unidades, siendo más probable así que se produzcan errores de grabación.</p><p class="calibre5">La configuración más recomendable en este caso es tener el disco duro como maestro y el lector de CD-ROM como esclavo, en el canal primario de la controladora, y en el secundario, la grabadora de CD-ROM. Esto favorecerá la transferencia de datos tanto en copias directas desde el lector de CD-ROM, como las realizadas desde el disco duro. Si dispusiésemos de un segundo disco duro, sólo quedaría una opción libre: instalarlo como esclavo de la grabadora en el canal secundario. Eso sí, evitaremos siempre que se pueda realizar copias desde este disco duro, utilizando preferentemente el maestro del canal primario.</p><p class="calibre5">Otro detalle que mejora la velocidad de transmisión de datos entre las unidades de disco duro y el ordenador personal es el aprovechamiento de los sistemas de comunicación entre disco duro y controladora, Ultra DMA 33, 66 y 100. Si nuestro disco duro y controladora soportan este modo de funcionamiento, para aprovecharlo debemos instalar una faja de conexión especial entre ambos dispositivos. Básicamente esta faja dispone de más hilos para la transmisión de datos, con lo que el ancho de banda (capacidad máxima de envío de datos simultáneos) se amplía incluso hasta los 100 MB/segundo.</p><br class="calibre9"/><h1 class="calibre1"><a name="heading_c.oebdocIDAO53ZF" class="calibre2"> </a>Impresoras</h1><p class="flushright">Martín Moncalvillo</p> <p class="flushright">martinm@idg.es</p><h2 class="calibre3"><a name="heading_c.oebdocIDA353ZF" class="calibre2"></a>94 Mayor accesibilidad </h2><img src="img/image075.JPG" id="a74" alt="" class="calibre4"/><p class="calibre5">Mediante este truco podremos colocar el icono de Impresoras en el menú Inicio, dando así mayor accesibilidad a la interfaz de este periférico: para ello tendremos que pinchar en Inicio•Configuración•Barra de tareas y Menú Inicio... Una vez seleccionado nos aparece el cuadro de diálogo Propiedades de Barra de tareas donde tendremos que pulsar en la pestaña Programas del menú Inicio. Una vez allí hacemos clic en Opciones Avanzadas. Entonces nos aparecerá la ventana del explorador en el Menú de Inicio. En la ventana derecha crearemos un nuevo directorio y le daremos el nombre: Impresoras.{2227A280-3AEA-1069-A2DE-08002B30309D}. Ahora podremos disponer de un acceso directo desde el menú Inicio al menú Impresoras. </p><h2 class="calibre3"><a name="heading_c.oebdocIDALA4ZF" class="calibre2"></a>95 Limpieza </h2><img src="img/image076.jpg" id="a75" alt="" class="calibre4"/><p class="calibre5">Las impresoras de chorro de tinta funcionan pulverizando con pequeños chorros de tinta el papel. De este modo, los cartuchos están compuestas por un cierto número de orificios, a través de los cuales expulsan la tinta, formando un minúsculo punto negro en el papel con el que se forman las letras e imágenes. Así que se hace necesario mantener los cabezales limpios para una correcta impresión, pues la tinta, debido a la inactividad, puede resecarse y taponar los orificios. Para ello algunas impresoras suelen tener unas utilidades de autolimpiado, que consisten en la limpieza estos cabezales para evitar que se obstruyan. Si aún así no obtenemos los resultados esperados, podremos limpiar nosotros mismos la impresora.</p><p class="calibre5">Debemos desconectar la alimentación y extraer el cartucho. Lo limpiaremos con un paño humedecido en alcohol o un pequeño bastoncillo que no suelte pelusa. Limpiaremos los inyectores, el soporte del cartucho y el lugar donde aparcan los cartuchos de impresión cuando no se están utilizando. También limpiaremos los contactos del lugar de colocación de los cartuchos en la impresora y el carro de impresión. </p><h2 class="calibre3"><a name="heading_c.oebdocIDAZA4ZF" class="calibre2"></a>96 Aumento de rendimiento</h2><p class="calibre5">Cuando nuestro cartucho de tinta está dando los últimos ‘coletazos’ y las impresiones comienzan a verse defectuosas, un truco que alargará su uso para alguna urgencia es sacarlo y agitarlo. De este modo la tinta se distribuye por el cartucho y el driver incluso puede reconocer que los niveles han subido, consiguiendo algunas copias más de calidad. No obstante esto sólo servirá para aguantar algunas copias mientras corremos a comprar otro cartucho.</p><h2 class="calibre3"><a name="heading_c.oebdocIDABB4ZF" class="calibre2"></a>97 Velocidad de impresión </h2><img src="img/image077.JPG" id="a76" alt="" class="calibre4"/><p class="calibre5">Si lo que queremos es realizar muchas copias lo más rápido que podamos, sin importarnos la calidad de la impresión y ahorrando la mayor cantidad de tinta posible, lo mejor es introducirse en Inicio•Configuración•Impresoras y seleccionar, con el botón derecho, la impresora predeterminada, para después pinchar en Propiedades. Los menús ahora dependerán del driver instalado, pero la mayoría de ellos permiten seleccionar imprimir en blanco y negro y realizar impresiones rápidas, que son la opciones que menos tinta utilizan.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAMB4ZF" class="calibre2"></a>98 Ampliar su capacidad</h2><p class="calibre5">El procesador de la impresora lee los datos de la memoria RAM de nuestro ordenador y las almacena en su buffer, dando entonces las órdenes necesarias para realizar la impresión. Cuando el buffer de la impresora se llena, el ordenador interrumpe la transmisión de datos, y cuando se vacía, la impresora vuelve a solicitar datos de la RAM. Por ello, a veces ocurren retenciones a la hora de realizar una impresión, sobre todo cuando el documento a imprimir es muy ‘pesado’ (tiene una gran cantidad de información, por lo general por contener elementos gráficos). Para evitar esto en la mayor medida posible, lo ideal es aumentar la memoria RAM disponible y adquirir una impresora con un tamaño de buffer elevado.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAUB4ZF" class="calibre2"></a>99 Técnica de arrastar-soltar </h2><img src="img/image078.jpg" id="a77" alt="" class="calibre4"/><p class="calibre5">Si quiere imprimir utilizando la técnica de arrastrar y soltar debe hacer doble clic en el icono de Mi PC del escritorio. Después haga doble clic en el icono de Impresoras con lo que le aparecerá una ventana con las impresoras que tiene instaladas y la predeterminada. A continuación haga clic con el botón derecho del ratón en la impresora que quiere utilizar, y seleccione Crear acceso directo. Esto lanzará un cuadro de diálogo que nos informará de que tendremos que situar este icono obligatoriamente en el escritorio. Aceptamos y ya sólo nos queda buscar el fichero que quiere imprimir en el explorador o en el escritorio y arrastrarlo y soltarlo encima de dicho icono. El documento se imprimirá automáticamente. </p><h1 class="calibre1"><a name="heading_c.oebdocIDABC4ZF" class="calibre2"></a>Configuración del módem</h1><p class="flushright">Noé Soriano</p><p class="flushright">noe@idg.es</p><h2 class="calibre3"><a name="heading_c.oebdocIDAQC4ZF" class="calibre2"></a>100 Marcación más veloz del número de acceso </h2><p class="calibre5">Para acelerar la velocidad de marcación del módem pulsar IniciolConfiguraciónlPanel de controllMódemslPropiedadeslConexiónlAvanzadas, una vez aquí, en la opción Configuraciones Adicionales hay que escribir AT S11=50. No es necesario reiniciar el ordenador, ya que la nueva configuración es operativa desde este momento y el módem tardará menos en realizar la marcación de números telefónicos, incluido el de acceso a Internet.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAYC4ZF" class="calibre2"></a>101 Silenciar el altavoz del módem </h2><img src="img/image079.JPG" id="a78" alt="" class="calibre4"/><p class="calibre5">Algunos modelos de módem no permiten silenciar el altavoz. Esto puede ser muy molesto en ciertas ocasiones. Para solucionarlo se pude silenciar el dispositivo pulsando IniciolConfiguraciónlPanel de controllMódemslPropiedadeslConexiónlAvanzadas, y en la opción de Configuraciones Adicionales, añadir el parámetro AT M0. De esta forma el altavoz del dispositivo ya no volverá a dar la lata.</p><p class="calibre5">Si quiere acelerar el marcado y silenciar el altavoz simultáneamente, no es necesario que escriba AT dos veces. Bastará con que ponga AT S11=50 M0.</p> <h2 class="calibre3"><a name="heading_c.oebdocIDAGD4ZF" class="calibre2"></a>102 Velocidad del módem</h2><p class="calibre5">Para optimizar la velocidad de transmisión de datos del módem es conveniente configurar los recursos de este dispositivo y del puerto de comunicación utilizado, dentro del sistema operativo. Pulsando IniciolConfiguraciónlPanel de controllSistemalAdministrador de dispositivos, en la lista de dispositivos seleccionamos el módem instalado en nuestro ordenador personal y pulsamos en la opción Propiedades, en la pestaña General comprobaremos que en el apartado de Velocidad máxima el valor es como mínimo 115200. Si es menor lo modificaremos.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAOD4ZF" class="calibre2"></a>103 Velocidad del puerto de comunicaciones </h2><img src="img/image080.JPG" id="a79" alt="" class="calibre4"/><p class="calibre5">Exactamente igual que el módem, el puerto de comunicaciones que utiliza para la transmisión y recepción de datos debe tener configurada una velocidad que le permita funcionar al máximo rendimiento. Pulsando IniciolConfiguraciónlPanel de controllSistemalAdministrador de dispositivos, esta vez seleccionamos el puerto de comunicaciones utilizado por el módem de nuestro ordenador personal, pulsamos Propiedades y en la pestaña de Configuración del puerto, en la opción de Bits por segundo también nos aseguraremos de que el valor mínimo sea 115200. Con esto evitamos que el puerto de comunicaciones pueda crear un cuello de botella para los datos, ralentizando la velocidad de conexión.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAZD4ZF" class="calibre2"></a>104 Configuración avanzada del puerto </h2><img src="img/image081.JPG" id="a80" alt="" class="calibre4"/><p class="calibre5">Los parámetros de configuración avanzada del puerto se modifican dentro de la pestaña conexión de las propiedades del módem. Para llegar a ella pulsamos IniciolConfiguraciónlPanel de controllMódemslPropiedadeslConexión. En esta ventana tenemos la opción Configuración de puerto..., donde aparecen las opciones del buffer de recepción y transmisión del puerto de comunicaciones. La opción de Usar búferes FIFO debe aparecer activada, y las dos barras de recepción y transmisión en sus valores máximos, a la derecha del todo. Esto mejora el rendimiento de la conexión. Si se produjesen numerosos errores de conexión estos valores se pueden reducir para evitarlos.</p> <h1 class="calibre1"><a name="heading_c.oebdocIDAIE4ZF" class="calibre2"></a>Optimización de unidades de disco</h1><p class="flushright">Noé Soriano, <u class="calibre7">noe@idg.es</u> </p><p class="flushright">Martín Moncalvillo, <u class="calibre7">martinm@idg.es</u> </p><h2 class="calibre3"><a name="heading_c.oebdocIDAYE4ZF" class="calibre2"></a>105 Utilizar el acceso directo a memoria (DMA) </h2><img src="img/image082.jpg" id="a81" alt="" class="calibre4"/><p class="calibre5">El sistema operativo Windows en su instalación no activa el acceso directo a memoria (DMA) de las unidades de disco IDE. Esto se debe a que las unidades antiguas no soportan este modo de funcionamiento y el sistema operativo de Microsoft no es capaz de detectar qué modelos son los que los soportan y cuáles no. Para evitar problemas de funcionamiento, por omisión la opción DMA aparecerá desactivada. Sin embargo, cualquier unidad de disco duro o lector de CD-ROM medianamente moderno soporta el modo de acceso directo a memoria, que además aprovecha los modos de acceso más rápidos de comunicación entre el ordenador y las unidades de disco, tanto en un sentido como en otro. </p><p class="calibre5">Para activar esta opción pulsaremos IniciolConfiguraciónlPanel de controllSistemalAdministrador de dispositivos, una vez aquí elegiremos la unidad de disco a la cual queremos activar el acceso directo a memoria, hacemos clic en PropiedadeslConfiguración, y activamos la opción D<u class="calibre7">M</u>A. Al pulsar Aceptar se nos pedirá que reiniciemos el sistema para acabar de completar los cambios. Si nos resta alguna unidad por activar, es mejor esperar, activarlas todas y después reiniciar, para ahorrar tiempo en los sucesivos arranques del sistema.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAIF4ZF" class="calibre2"></a>106 Desfragmentación </h2><img src="img/image083.JPG" id="a82" alt="" class="calibre4"/><p class="calibre5">Se utiliza para mantener archivos en orden contiguo y que se carguen más rápidamente. Cuando se escriben archivos al disco duro, éstos se dividen en varios sectores, que se distribuyen de la manera más próxima posible a lo largo de todo el disco. Cuando borramos y añadimos muchos archivos tenemos como resultado archivos cada vez más divididos en sectores más alejados. De este modo el lector del disco duro tiene que moverse mucho más. La solución es utilizar esta utilidad que podemos encontrar en Inicio•Programas•Accesorios•Herramientas de sistema•Desfragmentador de disco.</p><p class="calibre5">Windows 98 posee una herramienta llamada Asistente para mantenimiento que le permite configurar el mantenimiento periódico de su equipo. Se encuentra en Inicio•Programas•Accesorios•Herramientas de sistema•Asistente para mantenimiento. En él podremos configurar diversas tareas, como corrección de errores o desfragmentación del disco, para que se realicen de forma periódica y automática.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAWF4ZF" class="calibre2"></a>107 Sistemas FAT16 y FAT32 </h2><img src="img/image084.jpg" id="a83" alt="" class="calibre4"/><p class="calibre5">Actualmente el sistema FAT32 ha desplazado por completo al antiguo sistema de archivos FAT16. Esta nueva versión permite crear volúmenes de hasta 2 TB, frente a los 2 GB a los que limita FAT16. Este último sistema desperdiciaba clusters, de modo que si el sistema debía guardar archivos de, por ejemplo 2 KB, desaprovechaba al hacerlo todo un clúster de 32KB. Con el sistema FAT32 utilizaría un clúster de 4 KB, con lo cual ahorra recursos del sistema. Además se consigue un ligero aumento en la capacidad del disco duro.</p><p class="calibre5">Con el convertidor de unidades FAT32 podremos aprovechar las ventajas de este sistema en unidades de tipo FAT16, sin formatear ni perder los contenidos que ya tuviéramos en el disco. Con ello conseguimos aprovechar mejor el espacio en nuestro disco duro. El inconveniente es que no podremos acceder al disco ni desde DOS, ni desde Windows 95 anterior al OSR2. Las ventajas son una mejor gestión de la capacidad del disco y un pequeño aumento de tamaño del mismo. Encontraremos esta utilidad en Inicio•Accesorios•Herramientas del sistema•Convertidor de unidades FAT32.</p><h2 class="calibre3"> <a name="heading_c.oebdocIDAEG4ZF" class="calibre2"></a>108 Particiones </h2><img src="img/image085.JPG" id="a84" alt="" class="calibre4"/><p class="calibre5">Normalmente cuando compramos un ordenador, éste nos viene con un solo disco duro con una sola partición. Esto quiere decir que todo el disco tiene el aspecto de una única unidad que ocupa todo el tamaño del disco. Sin embargo, cuando compramos uno nuevo descubrimos que es necesario realizarle una partición antes de formatearlo. Al realizar la partición podremos dividir el disco de forma que tengamos diferentes unidades disponibles en las que, por ejemplo, podamos instalar diferentes sistemas operativos. El número máximo de particiones primarias que se pueden realizar es de 4. </p><p class="calibre5">Existen particiones primarias, y particiones extendidas que no se utilizan directamente sino que se subdividen en unidades lógicas. </p><p class="calibre5">En principio una única partición es recomendable para los usuarios que no quieran complicarse. Si embargo, aumentamos la seguridad si dividimos el disco en varias particiones. Una primaria y dos lógicas dentro de una extendida es lo ideal. En la primaria podemos instalar el sistema operativo (reserve 1 GB si tiene capacidad para ello). En la segunda podemos instalar aplicaciones y podemos tener otra para documentos o juegos. Normalmente la primera partición suele estropearse con más frecuencia, debido al sistema operativo. Si esto ocurre, tendremos todos nuestros datos salvados en las otras 2 particiones, así que, aunque que tengamos que formatear el disco, e instalar de nuevo todo el sistema, salvaríamos todos nuestros datos.</p><p class="calibre5">El comando Fdisk que se ejecuta desde DOS es la herramienta más primitiva para realizar particiones, sin embargo es la más accesible, ya que la contienen todos los sistemas Windows. Sin embargo, tiene muchos defectos: posee una interfaz anticuada y requiere borrar las particiones preexistentes, perdiendo así todos los datos contenidos en ellas. Herramientas como Partition Magic eliminan todos esos inconvenientes, ofreciendo una sencilla y cómoda interfaz que no nos obligará a borrar los datos contenidos en el disco. Podremos encontrar información sobre esta herramienta en la dirección <u class="calibre7">www.powerquest.com</u>. </p><h1 class="calibre1"><a name="heading_c.oebdocIDA0G4ZF" class="calibre2"></a>Otros trucos de hardware</h1><p class="flushright">Noé Soriano, <u class="calibre7">noe@idg.es</u> </p><p class="flushright">Martín Moncalvillo, <u class="calibre7">martinm@idg.es</u> </p><h2 class="calibre3"><a name="heading_c.oebdocIDAIH4ZF" class="calibre2"></a>109 Mejorar el rendimiento gráfico </h2><img src="img/image086.JPG" id="a85" alt="" class="calibre4"/><p class="calibre5">Después del microprocesador, el elemento que más trabaja en un ordenador personal es la tarjeta de vídeo, encargada de enviar al monitor la señal necesaria para componer la imagen que el usuario ve en la pantalla. Esto convierte a la tarjeta gráfica en uno de los elementos más importantes, y si hablamos de potencia gráfica para juegos o aplicaciones profesionales, es el componente principal. Aumentar su rendimiento significa por tanto mejorar lar prestaciones gráficas del ordenador personal, aunque hasta ahora ésta no era una posibilidad al alcance del usuario. </p><p class="calibre5">Ha sido con la aparición de los últimos modelos de aceleradoras 3D, donde un mayor rendimiento supone desmarcarse de los competidores, cuando los fabricantes de adaptadores de vídeo han dado la posibilidad al usuario de intervenir en los procesos de funcionamiento del componente. Son muchos los modelos que incluyen una aplicación para controlar la velocidad de reloj del procesador gráfico y de la memoria de vídeo. Por lo general, los valores de fábrica no fuerzan la tarjeta gráfica para asegurar un óptimo funcionamiento, por tanto es posible aumentar ligeramente el ritmo de trabajo del procesador gráfico y la memoria de vídeo. Esto va a mejorar el rendimiento gráfico del equipo al obligar a la tarjeta gráfica a trabajar a mayor velocidad.</p><p class="calibre5">Además del <i class="calibre6">overclocking</i> del procesador y memoria, otra forma de mejorar el rendimiento de la tarjeta gráfica es optimizar su funcionamiento. En el caso de las tarjetas AGP, debemos aprovechar el ancho de banda de este bus. Así, si nuestra tarjeta gráfica soporta AGP X4 y nuestra placa base también, podemos configurar en la BIOS del sistema para que aproveche la velocidad del BUS AGP X4. Por descontado esto también es aplicable para AGP X2. Incluso han salido al mercado tarjetas gráficas con BIOS propia accesible para el usuario y donde éste puede configurar la velocidad del bus, memoria y procesador gráfico, así como monitorizar el funcionamiento del componente, incluida la temperatura de la GPU para evitar problemas no deseados.</p><p class="calibre5">Dentro de unos valores razonables no tienen por qué producirse problemas por realizar el llamado overclocking del dispositivo de vídeo (forzar el ritmo de trabajo del procesador gráfico y la memoria por encima de los valores recomendados por el fabricante), pero hay que advertir que ningún fabricante de tarjetas gráficas da ningún tipo de garantía de funcionamiento. Por tanto esta práctica, aunque puede mejorar el rendimiento gráfico, también puede ser fuente de errores, cuelgues, e incluso averías en el hardware.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA4H4ZF" class="calibre2"></a>110 Mejorar la calidad de sonido del PC</h2><p class="calibre5">El modelo de tarjeta de sonido instalada en el sistema es la principal referencia a la hora de evaluar la calidad sonora que es capaz de ofrecer un ordenador personal. Lógicamente los modelos más avanzados, con mayor número de canales y efectos digitales, ofrecen mejores resultados que las tarjetas de sonido de gama baja. Aún así, y dejando al margen las características y prestaciones de cada modelo, hay algunos trucos de configuración que ayudan a mejorar la calidad de la señal de sonido.</p><p class="calibre5">Lo primero es configurar los <i class="calibre6">drivers</i> de la propia tarjeta y las propiedades de sonido de Windows para que ofrezcan la mejor calidad posible, normalmente 44 kHz, 16 bits, estéreo. Otra de las opciones que podemos configurar en el sistema operativo es la información sobre el tipo de altavoces instalados en el ordenador personal. Con esta información el driver de la tarjeta puede optimizar las salidas de sonido para adecuarlas al sistema de altavoces del usuario. Pulsando IniciolConfiguraciónlPanel de controllMultimedia, ya en esta ventana seleccionamos la opción de Propiedades avanzadas en el apartado Reproducción, para poder seleccionar el tipo de altavoces instalados.</p><p class="calibre5">Otro truco muy recomendable para mejorar la calidad del sonido con tarjetas de gama baja, sobre todo si utilizamos a menudo el sintetizador MIDI, es instalar un software de sintetización MIDI y prescindir del hardware de la tarjeta. Los modelos baratos de gama baja en este apartado dejan mucho que desear. Instalando un sintetizador por software, como puede ser el distribuido por Yamaha para sus chips de sonido, mejoraremos las características del dispositivo.</p><h2 class="calibre3"><a name="heading_c.oebdocIDARI4ZF" class="calibre2"></a>111 Colocación del sistema de altavoces (DIAPOSITIVA: SoundWorks csw2000)</h2><p class="calibre5">Si es el afortunado poseedor de un subwoofer y quiere sacarle el máximo provecho, debe observar algunos consejos: coloque el subwoofer lejos del monitor, pues estos dispositivos no suelen estar aislados electromagnéticamente, con lo que pueden provocar interferencias en nuestro monitor. Su posición ideal es en el centro de las líneas imaginarias que unen los satélites. Es también recomendable situarlo sobre una superficie que evite las vibraciones que este aparato produce. </p><p class="calibre5">Si tenemos 3 satélites, podemos colocar dos a ambos lados de la habitación, detrás del ordenador y el tercero detrás de nosotros. Si tenemos 4, podemos situarlos a nuestro alrededor, formando un cuadrado, dirigido hacia nosotros y a la altura de nuestros oídos. También podemos aprovechar el efecto que produce al rebotar el sonido en la pared, colgando los altavoces en los laterales de la habitación y orientándolos hacia la pared que está a nuestra espalda. De este modo recibimos el sonido indirectamente. La distancia a los satélites se considera idónea entre los 2 y los 3 metros.</p> <h2 class="calibre3"><a name="heading_c.oebdocIDA2I4ZF" class="calibre2"></a>112 CD de audio con salida digital </h2> <img src="img/image087.JPG" id="a86" alt="" class="calibre4"/> <p class="calibre5">Si quiere disfrutar de CD de audio en su equipo tendrá dos opciones. Normalmente, con el CD-ROM viene un cable que une éste con la tarjeta de sonido, con lo que dirige la señal analógica hacia ésta, que la convierte en digital, pudiendo utilizar los altavoces de nuestro PC para oír música. </p><p class="calibre5">La otra opción esta sólo disponible para CD que permitan la extracción de audio digitalmente y que tengan instalado el sistema Windows 98 ó 2000 (la mayor parte de los equipos cumplen estas características). La extracción la realizaremos por medios digitales mediante el propio bus de datos del equipo. Para ello sólo tendremos que hacer clic en Inicio•Configuración•Panel de control y seleccionar Multimedia y después la pestaña Música de CD. Aquí seleccionamos Habilitar el Cd de sonido Digital para este dispositivo de CD-ROM.</p><h2 class="calibre3"><a name="heading_c.oebdocIDAKJ4ZF" class="calibre2"></a>113 Grabación de CD </h2><img src="img/image088.JPG" id="a87" alt="" class="calibre4"/><p class="calibre5">Si al hacer la copia de un CD de audio se producen cortes o suena un ruido de fondo, primero debe asegurarse de que sus unidades de disco y su grabadora tienen los drivers adecuados. Debe también observar que el disco no esté fragmentado. Si aún así se producen sonidos, debe desalojar de la memoria todas las aplicaciones que el PC ejecuta al arrancar, asegurándose de no tener ningún programa en ejecución, aparte del software para copiar CD. Para ello pulsamos Ctrl+Alt+Supr y quitamos todos los programas que no utilicemos con Finalizar tarea. Únicamente debemos tener en uso el programa de duplicación y las entradas Systray y Explorer. </p><p class="calibre5">Si se producen cortes a la hora de hacer la grabación, puede ser debido a que el <i class="calibre6">buffer </i>no suministre los datos con la velocidad necesaria. Para evitar esto, puede intentar que la grabadora y el disco duro no se encuentren en el mismo bus. Para el caso de disponer de suficiente espacio en el disco duro (750 MB libres), intente realizar la copia haciendo primero una imagen del CD en el disco.</p><h2 class="calibre3"><a name="heading_c.oebdocIDA1J4ZF" class="calibre2"></a>114 Conversor Paralelo a USB </h2><img src="img/image089.jpg" id="a88" alt="" class="calibre4"/><p class="calibre5">Si ha comprado un ordenador en los últimos meses posiblemente tenga puertos USB. Lo más normal es que desee utilizar el resto de sus periféricos con su nuevo equipo; como escáneres e impresoras y modems, pero éstos sólo tendrán conectores para puertos paralelos o serie. De este modo, está desaprovechando las características que ofrece su equipo. Si se encuentra en ese caso puede adquirir unos económicos conversores paralelo- USB que, además de permitirnos aprovechar todos sus periféricos nos hará obtener de ellos un mejor rendimiento. Este adaptador nos permite aprovechar beneficios del USB, como la conexión ‘en caliente’.</p><p class="calibre5">Su modo de funcionamiento es muy sencillo. Únicamente debemos conectar un extremo al puerto paralelo y otro al conector USB. La configuración es <i class="calibre6">Plug&Play</i> así que no deberíamos tener ningún problema. Su precio ronda las 5.000 PTA (30 euros) para el conversor paralelo y unas 9.000 PTA (50,41 euros) para el conversor del puerto serie.</p><h2 class="calibre3"><a name="heading_c.oebdocIDALK4ZF" class="calibre2"></a>115 Añada puertos USB adicionales </h2><img src="img/image090.JPG" id="a89" alt="" class="calibre4"/><p class="calibre5">Si posee una placa que soporte puertos USB, lo más seguro es que utilice la mayoría de ellos, al ofrecer múltiples ventajas, como velocidad y comodidad de uso. De este modo, es posible que se haya quedado sin puertos USB y se vea obligado a utilizar los obsoletos puertos paralelo y serie. Sin embargo, eso no es necesario. Gracias a los concentradores USB podremos disponer de varios puertos USB más a nuestra disposición. Desde un mínimo de dos puertos más podemos llegar a formar una cadena conectando dispositivos sucesivos y conseguir hasta 127 puertos.</p><p class="calibre5">Podremos conectar ratones, teclados, joysticks, cámaras, impresoras, escáneres, etcétera. Actualmente hay fabricantes que nos permiten adquirir estos dispositivos desde 7.000 PTA (42 euros). Su conexión no reviste ninguna dificultad, ya que se configura de forma automática. También podemos disponer de más puertos USB si adquirimos determinado hardware; como monitores, pues algunos incorporan estos puertos. Las últimas placas también incorporan dos puertos USB opcionales que se conectan directamente a ésta mediante un chip USB incorporado. Existen muchas configuraciones a nuestra disposición: podemos elegir entre tarjetas USB que conectamos al zócalo PCI, al chip USB de la placa, hubs externos de dos y cuatro puertos, etcétera. </p><h2 class="calibre3"><a name="heading_c.oebdocIDAZK4ZF" class="calibre2"></a>116 Conectar dos ordenadores a través del puerto USB </h2><img src="img/image091.JPG" id="a90" alt="" class="calibre4"/><p class="calibre5">Uno de los métodos más utilizados para la conexión de dos equipos (sin instalar tarjetas de red), es utilizar un cable de conexión a través del puerto serie o paralelo. Estos cables disponen de conectores cruzados donde los pines de envío de datos de uno de los PC coinciden con los de recepción del segundo. La aparición de los puertos USB mejora la capacidad de transmisión de datos de los antiguos puertos de comunicaciones.</p><p class="calibre5">Aunque en principio estos puertos están pensados para la conexión de periféricos, también pueden aprovecharse para la conexión entre dos ordenadores personales. Existen a la venta programas de conexión entre dos ordenadores, que ya incluyen la posibilidad de utilizar el puerto USB con un cable de conexión especial, como modo de transmisión de datos. Incluso existen sistemas de emulación de una red local con ordenadores conectados con un hub USB.</p><p class="calibre5">Cambiar el modo de conexión desde los puertos serie o paralelo a los nuevos USB va a mejorar considerablemente la velocidad de transmisión de datos entre los dos ordenadores conectados. Todos los usuarios que utilizaban el antiguo sistema sabrán de la extrema lentitud en lo que al envío de archivos se refiere. Con la conexión USB estos problemas se solucionan. El proceso de instalación de cualquiera de estos sistemas es muy sencillo; instalando la aplicación de comunicación en ambos ordenadores personales, sólo queda conectarlos a través del puerto USB con el cable especial que se adjunta con el software.</p><p class="calibre5">Otra posibilidad de conexión entre ordenadores personales a través de puerto USB es utilizar tarjetas de red externas que utilizan este conector como medio de comunicación con el ordenador personal. Esta opción, aunque no conlleva ninguna manipulación interna del ordenador personal para instalar las tarjetas, sí que requiere un conocimiento de entornos de redes locales y su configuración, aunque para dos ordenadores personales la conexión se realiza con un cable de red cruzado sin necesidad de instalar un hub de control. Una vez instalado el cable cruzado de una tarjeta a otra sólo queda aplicar la configuración y los protocolos de red en el sistema operativo de ambos equipos.</p><div id="cmJJga27LSMPPWmrlfzb57" style="display:block !important; page-break-before: always !important; break-before: always !important; white-space: pre- wrap !important">
Excel para principiantes: Aprenda a utilizar Excel 2016, incluyendo una introducción a fórmulas, funciones, gráficos, cuadros, macros, modelado, informes, estadísticas, Excel Power Query y más
La psicología del trading de una forma sencilla: Cómo aplicar las estrategias psicológicas y las actitudes de los comerciantes ganadores para operar con éxito en línea.