Registro de Windows
Hola a todos,
ADVERTENCIA: NO me hago responsable de los daños que sufras como consecuencia de una manipulación incorrecta de la información contenida en este artículo.
Como hablábamos ayer, se pueden usar los ficheros ini para almacenar determinados valores que necesite nuestra aplicación, aunque microsoft recomienda el uso del registro de windows, pero, ¿qué es el registro de windows y como se usa?
A grandes rasgos, podemos decir que es un macro fichero ini para todo el sistema operativo a partir de sus versiones de 32 bits; cualquier cosa que altere el sistema, en cualquiera de sus aspectos, ya sea software o hardware modificará el registro.
Yo, personalmente, prefiero usar los ficheros ini en mi aplicación, ya que los creo o destruyo según mi propio criterio sin modificar para nada el sistema del usuario final, pero puede que tu quieras, o necesites, modificar el registro de windows por alguna circunstancia.
Aunque su apariencia puede desatar en nosotros un escalofrío, sobre todo si lo miramos a través del programa, proporcionado por microsoft, regedit, en realidad solo nos interesa una rama del mismo.
HKEY_CURRENT_USER\software
Esta ruta es donde, generalmente, guardaremos la información. Sin embargo, si te fijas bien, verás que otros programas también tiene claves y valores en otros lados, como en “HKEY_LOCAL_MACHINE\Software”. Puedes almacenar datos en donde quieras, pero se recomienda que sea en esta clave.
Antes de continuar, una observación, el constructor del objeto TRegistry se inicializa en HKEY_CURRENT_USER, en caso de que quieras utilizar una rama distinta del registro deberás modificar la propiedad RootKey.
ATENCIÓN: Recuerda que el registro de windows es su corazón, cualquier cambio fuera de los límites de la rama que hemos mencionado, puede dejar tu sistema inutilizado
Si sufres algún problema que te impide acceder al sistema, prueba lo siguiente:
- Ve a Inicio -> Apagar el equipo
- Reiniciar el equipo con un disco que contenga MSDOS y el programa scanreg por ejemplo un disco de Windows95 o windows98.
- Una vez en MS-DOS debes escribir scanreg /restore, presiona enter y reinicia el equipo.
Si sigues este procedimiento, restaurarás el Registro al estado en que estaba la última vez que el sistema se inició correctamente.
Vamos entonces a aprender a usar este fichero en nuestra aplicación.
Delphi nos proporciona una unidad que encapsula las llamadas a la API de windows, de forma que nos resulta bastante fácil manipular el fichero del registro, Registry, que crea la clase TRegsitry (que originales, ¿verdad?). Su uso es bastante fácil:
procedure TForm1.FormCreate(Sender: TObject);
var
Registro: TRegistry;
Abierto: boolean;
begin
Registro := TRegistry.Create;
Una vez que tenemos creada nuestra instancia de registro, ya podemos usarla para acceder a el, para ello debemos abrirla
Abierto := Registro.OpenKey(Clave, False);
OpenKey devuelve un valor booleano para indicar si se abrió correctamente la clave, pero si la clave no existe puedes cambiar el segundo parámetro de forma que con true, forzarás al sistema a crearla.
Ahora ya podemos leer, o escribir, en esa clave usando las funciones tipo Registro.Readtipodedato y Registro.Writetipodedato
if Abierto then
color := Registro.Readstring('ColorFondo');
tal y como hacíamos con los fichero ini.
Recuerda, al terminar de usar el registro, eliminar la referencia al objeto Registro con el procedimiento Free
Registro.Free;
end;
Saludos
Ficheros ini
Hola a todos,
hoy vamos a hablar de unos ficheros que pueden resultar muy útiles para guardar cosas entre un uso y otro de nuestra aplicación, me refiero a los ficheros ini.
Estos ficheros, que no son más que texto plano, están estructurados en forma de secciones y, dentro de cada sección, se encuentran las entradas y sus correspondientes valores con el siguiente formato:
[Colores]
Fondo=000000
Cabecera=ffff00
Vamos a ver como podemos usarlos en nuestras aplicaciones.
Lo primero de todo es agregar en la cláusula uses de nuestra aplicación una referencia a la unidad INIFiles.
Ahora, ya podemos crear, en el procedimiento que vaya a hacer uso de el, una instancia al fichero en cuestión:
var
ficheroINI : TINIFile;
begin
ficheroINI := TINIFile.Create( ExtractFilePath( Application.EXEName )+'mifichero.ini' );
{}
ficheroINI.Free;
end;
Si el fichero no existe Delphi lo creará sobre la marcha.
Como puedes ver, he asociado la creación del fichero ini al mismo directorio donde se encuentra la aplicación que lo crea, aunque puedes crearlo en cualquier sitio.
Date cuenta de que al acabar de usarlo se debe llamar al procedimiento Free, que libera la memoria.
Vamos ahora a ver las funciones para leer y escribir en el fichero ini.
Para escribir una cadena de valores se usa el procedimiento:
ficheroINI.WriteString('Seccion', 'Identificador', 'Valor');
Como observaciones, los valores Sección e Identificador pueden, o no, existir en el fichero ini, pero si no existen serán creados de forma automática.
De forma análoga, para leer un valor desde un fichero ini se usará la sentencia:
Edit1.Text := ficheroINI.ReadString('Seccion', 'Identificador', 'Valor por defecto');
La gran diferencia con respecto a la anterior sentencia, es que si no encuentra el Identificador devolverá el Valor por defecto.
Otras funciones usadas para leer valores en los fichero ini son:
y sus correspondientes contrapartidas para escribir el los fichero ini:
Hay algunas más que puedes encontrar buscando en la ayuda de Delphi.
Saludos
Números romanos
Hola a todos,
hace algún tiempo tuve la necesidad de escribir una rutina para convertir números enteros en números romanos, no fue muy difícil y lo más probable es que nadie la necesite, pero uno nunca sabe lo que puede hacernos falta.
function CambiarARomano(iNumero: integer): string;
const
Numeros: array[1..13] of integer= (1,4,5,9,10,40,50,90,100,400,500,900,1000);
Romanos: array[1..13] of string= ('I','IV','V','IX','X','XL','L','XC','C','CD','D','CM','M');
var
bCont: Byte;
begin
for bCont := 13 downto 1 do
while (iNumero >= Numeros[bCont]) do begin
iNumero := iNumero - Numeros[bCont];
Result := Result + Romanos[bCont];
end;
end;
Navegando por la web
Hola a todos,
¿Te parecen pesados los actuales navegadores web? ¿No te gusta navegar por la World Wide Web, con los navegadores habituales del mercado? ¿Has pensado en hacerte tu propio navegador?
Con nuestro querido Delphi, y en solo unos pocos clicks de ratón, podrás estar navegando antes de darte cuenta.
Vamos al lío, crea un nuevo proyecto con la opción New Application del menú File, inserta ahora un TWebBrowser que encontrarás en la paleta Internet, redimensionalo dejando espacio en la parte superior, donde deberás colocar un TEdit que nos servirá para escribir la dirección web.
La parte de diseño ya esta terminada, ¿fácil, verdad?
Vamos ahora a implementar el código propiamente dicho.
Edita la propiedad KeyPreview del formulario y cámbiala a true, de esta forma, cuando escribamos una dirección web en el TEdit y pulsemos Enter directamente se ejecutará nuestro procedimiento.
Haz una doble pulsación sobre el evento OnKeyPress y escribe el código que aparece a continuación.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
{Detectamos la pulsación de la tecla Enter}
if key = #13 then begin
{Cargamos la dirección en el navegador}
WebBrowser1.Navigate(WideString(Edit1.Text));
{Limpiamos el buffer del teclado}
key:= #0;
end;
end;
Como verás es muy fácil implementar un pequeño navegador web, lógicamente, no tendrás navegación por pestañas, ni soporte javascript, pero claro, para eso ya existen otros navegadores.
Te dejo a ti la implementación de otras utilidades, como un botón para retroceder en el historial, almacenar las páginas visitadas, o crear marcadores.
Saludos
Atajos de teclado
Hola a todos,
hoy vamos a hablar de los atajos de teclado que tiene Delphi, una ayuda inestimable que muchas veces pasamos por alto y que podría hacer que nuestra productividad se viera incrementada.
Una de las cosas que generan más perdida de tiempo es el tener que levantar las manos del teclado para, usando el ratón, realizar alguna actividad complementaria, usando los atajos de teclado ganaremos algo de ese tiempo.
La opción más fácil es usar la ayuda que el propio Delphi nos brinda, pero si eres un poco como yo, que estaba tan deseoso de empezar a usarlo que ni siquiera me molesté en leerla, seguro que se te habrá pasado por alto.
Doy por supuesto que estás usando el mapa de teclado por defecto que trae configurado Delphi, si no es así busca en la ayuda cuales son los atajos de tu mapa.
Veamos alguno de esos atajos que nos pueden resultar interesantes,
- Ctrl+E Nos muestra el cuadro de diálogo de búsqueda.
- Ctrl+F Nos permite realizar una búsqueda sencilla (observa la barra de estado del editor)
- Ctrl+R Abre el diálogo de búsqueda y reemplazo
- Ctrl+J Abre el diálogo de plantillas
- Ctrl+S Guarda la unidad activa
- Ctrl+Y Borra la linea sobre la que se encuentra el cursor
- Ctrl+Z Deshace la última acción realizada
- Ctrl+Shift+I Indenta un bloque de texto seleccionado
- Ctrl+Shift+U De-indenta un bloque de texto seleccionado
- Ctrl+Shift+Y Borra hasta el final de la línea
- Ctrl+Enter Abre un fichero
- Ctrl+K+[0-9] Establece hasta 10 puntos de salto
- Ctrl+Q+[0-9] Salta hasta el punto marcado con ese número
- Ctrl+K+E Cambia la palabra que hay bajo el cursor a minúsculas
- Ctrl+K+F Cambia la palabra que hay bajo el cursor a mayúsculas
- Ctrl+O+U Cambia la letra que delante del cursor a mayúsculas
- Ctrl+D Abre la ventana de generación de Diálogos
- Alt+0 (cero) Abre una lista con las ventanas abiertas
- Ctrl+Alt+A Inserta la fecha en la posición del cursor, con formato dd/mm/yy
- Ctro+Alt+P Inserta el esqueleto de comentarios para la entrada de un procedimiento
- Ctrl+F1 Muestra la ayuda sobre la palabra que hay bajo el cursor
Estoy contento
Hola a todos,
hoy estoy muy contento, después de muchos años usando Linux en mi portátil y Windows en el de sobremesa, he decidido instalar una máquina virtual en mi Ubuntu e instalarle un Windows XP, ¿resultado?

Todo esto no tiene mucho que ver con Delphi, ¿o si?

Pues si señores, he instalado mi licencia de Delphi sobre una máquina virtual en Ubuntu (Linux) a través de VirtualBox, que he de reconocer, ha mejorado mucho desde que lo usé hace algunos años.
Ahora va por su versión 2.1, muy estable y con soporte nativo para dispositivos USB, además ya están añadiendo soporte para aceleración gráfica, lo que lo hace muy adecuado para virtualizar juegos.
De momento, yo me quedo con mi Delphi para poder trabajar cómodamente sentado en el sofá y no en el frío despacho de casa.

Internacionalización II
Hola a todos,
¿supongo que ya habrás acabado de traducir todos los ficheros dfm de tu aplicación, en sus distintos idiomas?
Vamos ahora a preparar las bibliotecas de enlace dinámico para que puedas distribuirlas junto con tu aplicación.
Ve al menú File y selecciona la opción Open, busca la carpeta de tu proyecto y dentro de ella, veras que se ha creado una carpeta para cada uno de los idiomas que seleccionaste en los pasos anteriores, dentro de ellas tienes una copia del fichero dpr de tu aplicación.
Si abres el fichero, verás el esqueleto de una librería DLL generado de forma automática por el “Resource DLL wizard”, solo debes compilarla, usando la opción Build Project1 del menú Project.
A partir de aquí, solo te queda, a la hora de enviar tu aplicación, acompañarla de los ficheros DLL correspondientes. Date cuenta de que Delphi intentará abrir el fichero DLL que se corresponde con el idioma del usuario, y para ello lo buscara, primero en el directorio de la aplicación y, si no lo encuentra, en el del sistema.
Saludos
Internacionalización
Hola a todos,
como ya hablamos en la entrada Bibliotecas de enlace dinámico, uno de los usos que se les puede dar a las DLLs es crear versiones en distintos idiomas para distribuir junto con tu aplicación, de forma que un solo programa puede utilizarse en diversos países.
Para empezar, debemos aprender a usar una técnica que nos permita traducir de forma fácil las cadenas de texto de nuestro programa.
La aparición de una cadena en cualquier sentencia, del tipo:
if condicion then
sCadena:= 'La solución mañana';
debería ser substituida por
resourcestring
sSolucion = 'La solución mañana';
if condicion then
sCadena:= sSolucion;
La directiva resourcestring define las cadenas de texto en un fichero de recursos, donde se identificarán con un número único, nosotros en nuestra aplicación la usaremos como cualquier constante de cadena.
Una vez realizado este paso con todas las cadenas de nuestra aplicación, debemos generar los ficherode recursos, para eso vamos a utilizar una utilidad proporcionada por el propio Delphi, abre el menú File, y selecciona la opción New…, pulsa sobre “Resource DLL wizard”

Al llegar a la pantalla de idiomas, selecciona aquellos para los que quieres generar el fichero de recursos

Pulsa sobre AddFile y selecciona todos aquellos ficheros de formulario (dfm) que quieras traducir.
Despues de algunas preguntas, se te mostrará la pantalla de gestión de traducciones

Ve traduciendo todas las cadenas y recursos, hasta completar la versión para cada idioma.
Como es un proyecto que requiere su tiempo, te dejo que trabajes tranquilo, mañana te enseñaré a generar las DLL traducidas.
Saludos.
Ventanas deslizantes
Hola a todos,
hoy vamos aver un pequeño truco que puede resultar muy aparente para tus aplicaciones, las ventanas deslizantes.
Crea una nueva aplicación con dos formularios, o selecciona alguna que ya tengas preparada, selecciona el formulario que quieres deslizar y cambia su posición en alguna de las propiedades Top o Left, según quieras que la ventana se mueva de forma vertical o se desplace de forma lateral, de manera que quede fuera de los margenes de la pantalla.
Vamos a escribir el código que desplazará la pantalla, para ello debes agregar un botón o una opción de menu en el primer formulario y escribir en su evento Click.
{Vamos a desplazar el formulario para que se desplace hacia el centro de la pantalla, apareciendo por la derecha} procedure TForm1.Dentro1Click(Sender: TObject); var Posicion: integer; begin {Colocamos el formulario a desplazar encima de todos los demás} Form2.FormStyle:= fsStayOnTop; {Y lo mostramos} Form2.show; {Recuperamos la posición actual del formulario y calculamos el centro de la pantalla} for posicion:= Form2.Left downto (Screen.width -Form2.Width) div 2 do begin {Desplazamos el formulario} Form2.Left:= posicion; {Colocamos un retardo para que no parpadee} sleep(10); end; end;
(Nota: Si quieres que aparezca desde la parte izquierda de la pantalla, deberás cambiar downto por to)
Ahora vamos a hacer desaparecer el formulario de la misma forma.
{Procedimiento que en vez de cerrar el formulario hara que desaparezca por la derecha de la pantalla} procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); var Posicion: integer; begin {Recuperamos la posición actual del formulario y calculamos el punto máximo de la pantalla} for posicion:= Form2.Left to Screen.width + 10 do begin {Desplazamos el formulario} Form2.Left:= posicion; {Colocamos un retardo para que no parpadee} sleep(10); end; end;
(Nota: Si quieres que desaparezca por la parte izquierda de la pantalla, deberás cambiar to por downto y usar la propiedad Form2.width cambiandola a signo negativo)
Si deseas que el formulario se desplace de forma vertical, debes utilizar la propiedad Top en las rutinas.
Saludos
Bibliotecas de enlace dinámico
Hola a todos,
Hoy vamos a ver las llamadas bibliotecas de enlace dinámico (DLL).
Las DLL no son más que ejecutables compilados que contienen funciones a las que puedes llamar desde tus programas en tiempo de ejecución.
Algunas de sus ventajas es que puedes tener un programa ya en explotación , al que, modificando sus DLL’s, puedes cambiar en alguno de sus aspectos; podrías también tener varias versiones del mismo programa en distintos idiomas; o incluso personalizar un programa genérico de forma que se adapte a un cliente particular; solo échale imaginación…
Vamos ahora a ver como podemos implementar nuestras propias DLL’s, para eso crearemos una que solamente nos va a proporcionar un mensaje en pantalla, más adelante iremos implementando otras funcionalidades.
Inicia Delphi y escoge la opción de crear una nueva DLL en el menú File opción New…
Se nos abrirá el editor con un esqueleto denominado Library project1, vamos a modificarlo de forma que nos quede con el siguiente código:
Library Ejemplo;
uses
Sysutils,
Classes,
Dialogs;
procedure MostrarMensaje(Texto: string); stdcall;
begin
ShowMessage(Texto);
end;
{Aquí definiremos las funciones que van a ser exportadas}
exports
MostrarMensaje;
begin
end.
Ahora podemos guardar nuestro proyecto y despues compilarlo para crear nuestra nueva DLL usando la opción build Project1 que aparece en el menú Project

Ya tenemos lista la biblioteca, para probarla crea una nueva aplicación, desde el menú File, opción New application, agrega un botón y modifica el código del proyecto para que aparezca como este:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
{Declaramos el procedimiento externo de la DLL}
procedure MostrarMensaje(Texto: string); stdcall external 'Ejemplo.dll';
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
{Llamamos al procedimiento de nuestra DLL}
MostrarMensaje('Probando nuestra nueva DLL');
end;
end.
Y aquí tenemos el resultado

-
Archivos
- febrero 2009 (3)
- enero 2009 (12)
-
Categorías
-
RSS
RSS de las entradas
RSS de los Comentarios
