Aquí tienen cómo crear un punto de restauración del sistema con Delphi.
Para comprobar que se ha creado correctamente tienen que ir a INICIO-
Todos los programas-Accesorios-Herramientas de sistema-Restaurar sistema.
Autor: chrisbhmg@gmail.com
Link de descarga
▻★★★ Blog sobre el lenguaje de programación delphi, incluye software, tutoriales, aplicaciones, videos, código fuente, trucos (about delphi, tips, tutorials, applications, source code, advanced programs, code snippets )
Matrix con Delphi
.

Autor: Pierre Castelain
Código fuente
Aquí tienen una imitación realizada en Delphi de la pantalla que muestra caracteres como si fuesen gotas de lluvia de la película Matrix.
Autor: Pierre Castelain
Código fuente
Solución de la ecuación de Schrödinger con Delphi
.
Esta aplicación calcula la ecuación de Schrödinger dependiente del tiempo y hace los cálculos de los estados y energía según Hamilton-Jacobi.
Como la ecuación tiene números complejos, separa la parte real y la imaginaria utilizando la unidad tMatrix (viene con su código fuente).
De la unidad tMatrix se usa una función para diagonalizar una matriz simétrica real con el fin de resolver la ecuación, pero contiene muchas otras que las pueden usar en sus programas como son:
Cálculo del determinante, matriz transpuesta, matriz nula, suma, resta, descomposición de una matriz M=L*U donde L y U son las matrices triangulares superior e inferior, descomposición de M=Q*L donde Q es la matriz unitaria y L es la matriz triangular inferior, Método de reducción de Hessenberg, etc...
Link del programa y código fuente
Relacionados:
Wikipedia: Ecuación de Schrödinger
Cálculo del determinante, matriz transpuesta, matriz nula, suma, resta, descomposición de una matriz M=L*U donde L y U son las matrices triangulares superior e inferior, descomposición de M=Q*L donde Q es la matriz unitaria y L es la matriz triangular inferior, Método de reducción de Hessenberg, etc...
Link del programa y código fuente
Relacionados:
Wikipedia: Ecuación de Schrödinger
Acceder a los contadores del sistema
La siguiente aplicación les permitirá acceder a los contadores de rendimiento de Windows. Para ello se utilizan las funciones de la librería PDH, que funcionan bajo 2X/XP.
Se pueden ver el % de utilización de la CPU, por procesos, utilización de memoria, rendimiento de disco (lectura / escritura), etc.
Está probado con Delphi 7 y recordar que tienen que incluir en el uses la unit uPDH.
Link de descarga
Emulador PIC 16F84 con Delphi
Es uno de los microcontroladores más populares del mercado, ideal para principiantes, debido a su arquitectura de 8 bits, 18 pines, y un set de instrucciones RISC muy amigable para memorizar y fácil de entender, internamente consta de:
- Memoria Flash de programa (1K x 14).
- Memoria EEPROM de datos (64 x 8).
- Memoria RAM de 68 registros x 8.
- Un temporizador/contador (timer de 8 bits).
- Un divisor de frecuencia.
- Varios puertos de entrada-salida (13 pines en dos puertos, 5 pines el puerto A y 8 pines el puerto B).
En este caso os presento un emulador freeware realizado en Delphi con código fuente incluido.
Link de descarga
Calcular el MD5
MD5 es un algoritmo de reducción criptográfico de 128 bits, que se usa ampliamente en informática para asegurar, entre otras cosas, que los archivos descargados desde internet no han sufrido cambios debidos a virus o troyanos.
Esta soft es una implementación del driver test descrita en RFC 1321. Se puede usar para comprobar las funciones MD5String y MD5File es decir para calcular el MD5 de un texto y de un fichero.
Código fuente en Delphi
Bloquear disco
Recordar que antes de cerrar la aplicación tienen que pulsar el botón "unlock" para desbloquear el disco.
Está probado en Delphi 7 y funciona incluso con unidades USB.
Código fuente
Port scanner en Delphi
Aquí tienen un escaner de puertos en modo línea de comandos, con su código fuente en Delphi.
El programa lanza un hilo para analizar cada puerto utilizando la función BeginThread, con lo que podrán comprobar la rapidez de este programa.
Se puede modificar el máximo número de puertos a analizar (por defecto analiza los 20000 primeros)
Para iniciarlo, desde la consola ms-dos teclear: portscan (ip)
Link de descarga
El programa lanza un hilo para analizar cada puerto utilizando la función BeginThread, con lo que podrán comprobar la rapidez de este programa.
Se puede modificar el máximo número de puertos a analizar (por defecto analiza los 20000 primeros)
Para iniciarlo, desde la consola ms-dos teclear: portscan (ip)
Link de descarga
Opciones de configuración de Delphi 2009
Aquí tienen pantallazos del nuevo entorno IDE de Delphi 2009 con las opciones de configuración más destacadas.
http://chee-yang.blogspot.com/2008/09/tough-path-migrate-to-delphi-2009.html
http://chee-yang.blogspot.com/2008/09/tough-path-migrate-to-delphi-2009.html
Skype con Delphi
Para los que utilizan skype, seguro que les interesará este componente que permite desarrollar aplicaciones propias utilizando la funcionalidad de skype. Incorpora una carpeta con muchos ejemplos de programación.
http://www.sokratez.de/downloads/skypecontrol.rar
Página en inglés con más información sobre skype
http://www.drbob42.com/examines/examin75.htm
Evitar que se inicie una aplicación varias veces
El iniciar la misma aplicación varias veces puede ser un problema si tenemos que interactuar con un recurso compartido, como el puerto serie, una base de datos, etc...
Para evitarlo, una de las formas más sencillas es crear un mutex cada vez que se inicie nuestro software.
El truco está en comprobar si la función CreateMutex devuelve un error, en caso afirmativo podemos tener la seguridad que la aplicación estaba abierta anteriormente y procederemos a detener su ejecución.
El código es el siguiente :
....
var
hnd:thandle;
IMPLEMENTATION
....
initialization
hnd := CreateMutex(nil, True, 'mutexprincipal');
if GetLastError = ERROR_ALREADY_EXISTS then Halt;
finalization
if hnd <> 0 then CloseHandle(hnd);
.....
end.
Fases de la Luna
Ahora que se celebra el 40 aniversario de la llegada del hombre a la Luna, este soft viene al pelo, ya que lo que hace es mostrar sobre una imagen las fases de la Luna.
En sí el programa muestra el uso del objeto TCanvas y de las funciones arc y floodfill sin hacer cálculos astronómicos que es lo que uno podría pensar a priori.
Cuando lo instalen les recomiendo pulsar el botón "show moon image" para conseguir que la animación sea más realista.
Descargar programa:
http://www.delphiforfun.org/Programs/Download/DrawMoonSource.zip
Código fuente:
http://www.delphiforfun.org/Programs/Delphi_Techniques/DrawMoonSource.html
NUEVO=============
Relacionados:
Página que proporciona una simulación del principal ordenador de viaje de las misiones lunares del programa Apolo de la NASA llamado A.G.C. (Apollo Guidance Computer) y de las misiones de aterrizaje. Tanto el módulo de control, como el módulo de aterrizaje tienen sus propios A.G.C. aunque con diferente software.
http://www.ibiblio.org/apollo/
http://code.google.com/p/virtualagc/
Código fuente del programa del apollo:
http://googlecode.blogspot.com/2009/07/apollo-11-missions-40th-anniversary-one.html
http://code.google.com/p/virtualagc/source/browse/trunk/Comanche055/CM_BODY_ATTITUDE.s?r=258
Ecuaciones de guia de aterrizaje lunar
http://code.google.com/p/virtualagc/source/browse/trunk/Luminary099/LUNAR_LANDING_GUIDANCE_EQUATIONS.s?r=258
http://code.google.com/p/virtualagc/source/browse/trunk/FP8/FP8.s?r=258
Cálculo de la fracción egipcia con Delphi
Una fracción egipcia es la suma de fracciones unitarias distintas, es decir, de fracciones de numerador 1 y cuyos denominadores sean enteros positivos distintos. Se puede demostrar que cualquier número racional positivo se puede escribir como fracción egipcia.
Los Egipcios (2000 A.C.) utilizaron una técnica particular para calcular el cociente de 2 números. Ellos establecen ciertos múltiplos para el denominador y multiplican el número obtenido por 2 hasta la obtención de un número superior como numerador.
Código fuente en Delphi para calcular la fracción egipcia de la división de dos números enteros:
http://www.darkskull.net/fichiers/tips/egypt.zip
Convertir caracteres de chino simplificado a tradicional
Existen 2 juegos de caracteres chinos: el simplificado y el tradicional.
Desde la revolución cultural china, los caracteres tradicionales se han simplificado (ya que son más fáciles de dibujar y de leer). El chino simplificado es el que se usa actualmente, mientras que el tradicional se utiliza en Hong-Kong y Taïwan.
En nuestro caso el truco está en utilizar la función LCMapStringW (unit Windows)El código sería el siguiente:
functionSimplificadoATradicional(Str:Widestring):Widestring;begin
SetLength(Result,Length(Str));
LCMapStringW($404,LCMAP_TRADITIONAL_CHINESE,
PWideChar(Str),Length(Str),
PWideChar(Result),Length(Result));
Result:=Result;end;functionTradicionalASimplificado(Str:Widestring):Widestring;begin
SetLength(Result,Length(Str));
LCMapStringW($804,LCMAP_SIMPLIFIED_CHINESE,
PWideChar(Str),Length(Str),
PWideChar(Result),Length(Result));end;
Optimizando la memoria del sistema
Cuando una aplicación se minimiza se libera parte de la memoria virtual no utilizada y eso es porque Windows realiza una llamada a la función SetProcessWorkingSetSize.
En el caso de Delphi existe un código de inicialización de las units que ocupa mucho espacio, pero que sólo se necesita durante el arranque del programa. Por consiguiente realizando regularmente llamadas a esta función podremos optimizar la utilización de memoria de nuestra aplicación.
El código sería el siguiente:
procedure Optimizar_memoria;
var
MainHandle : THandle;
begin
try
MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID);
SetProcessWorkingSetSize(MainHandle,DWORD(-1),DWORD(-1));
finally
CloseHandle(MainHandle);
end;
end;
El código sería el siguiente:
procedure Optimizar_memoria;
var
MainHandle : THandle;
begin
try
MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID);
SetProcessWorkingSetSize(MainHandle,DWORD(-1),DWORD(-1));
finally
CloseHandle(MainHandle);
end;
end;
Crear un salvapantallas con Delphi
Aquí tienen un interesante artículo sobre cómo realizar un salvapantallas en Delphi.
http://www.mindspring.com/~cityzoo/scrnsavr.html
Un salvapantallas no es más que un ejecutable típico de Windows al que se le ha renombrado con la extensión "scr" en lugar de "exe". Este ejecutable debe tener los siguientes requisitos imprescindibles:
1) Debe terminar cuando el usuario mueva el ratón y pulse una tecla.
2) No debe permitir que se ejecuten múltiples copias de sí mismo.
3) Tiene que tener un modo activo de funcionamiento del salvapantallas y un modo de configuración, que permita cambiar los parámetros que lo definen.
En esta página os explican cómo programar cada uno de estos apartados.
Código fuente en zip :
Apagar monitor pulsando una tecla
El siguiente software muestra la forma de utilizar hooks de teclado para apagar el monitor (pulsando la tecla "Pause" en este caso). Éste se volverá a encender cuando se pulse una tecla o se mueva el ratón.
Lo que hace el programa es:
- Hacer una llamada a LoadLibrary para cargar la Dll (MonitorOffDll).
LibHandle:=LoadLibrary('MonitorOffDLL.dll')
- Llama a GetProcAddres para conseguir la dirección de la DLL.
HookProcAddress:=GetProcAddress(LibHandle, pchar(1) ); InitializeHook:=GetProcAddress(LibHandle,pchar(2) );
- Llama a SetWindowsHookEx especificando WH_KEYBOARD como tipo de hook y con la dirección obtenida en el punto anterior. El parámetro ThreadID se pone a cero para indicar que es un hook global.
CurrentHook:=SetWindowsHookEx(WH_KEYBOARD,HookProcAddress,LibHandle,0);
- Llama al procedimiento de inicialización del DLL para pasar el handle asignado al hook.
InitializeHook(CurrentHook, Extractfilepath(application.exename));
(Pruebas realizadas en Delphi 7)
Link:
http://www.delphiforfun.org/Programs/Download/MonitorOffSource.zip- Hacer una llamada a LoadLibrary para cargar la Dll (MonitorOffDll).
LibHandle:=LoadLibrary('MonitorOffDLL.dll')
- Llama a GetProcAddres para conseguir la dirección de la DLL.
HookProcAddress:=GetProcAddress(LibHandle, pchar(1) ); InitializeHook:=GetProcAddress(LibHandle,pchar(2) );
- Llama a SetWindowsHookEx especificando WH_KEYBOARD como tipo de hook y con la dirección obtenida en el punto anterior. El parámetro ThreadID se pone a cero para indicar que es un hook global.
CurrentHook:=SetWindowsHookEx(WH_KEYBOARD,HookProcAddress,LibHandle,0);
- Llama al procedimiento de inicialización del DLL para pasar el handle asignado al hook.
InitializeHook(CurrentHook, Extractfilepath(application.exename));
(Pruebas realizadas en Delphi 7)
Link:
Utilizar hilos sin la clase vcl thread
Para utilizar hilos sin la clase Thread tenemos que hacer 2 cosas:
1) Crear el thread
La llamada para crear el hilo sería así:
procedure TForm1.Button1Click(Sender: TObject);
var
thr : THandle;
thrID : DWORD;
begin
thr := CreateThread(nil, 0, @HacerAlgo, nil, 0, thrID);
if (thr = 0) then ShowMessage('Error al crear el hilo);
end;
2) Proporcionar una función al hilo.
Requerimientos de la función:
- Se le puede dar el nombre que se quiera
- Debe tener un parámetro de tipo puntero
- La función devolverá un parámetro del tipo longint
- En la declaración se debe añadir la directiva stdcall, lo que le dice al compilador que la función le pasará los parámetros según la convención de Windows.
Ej.
FUNCTION HacerAlgo(Ptr : Pointer) : LongInt; STDCALL;
BEGIN
SetThreadPriority(DWORD(-2), THREAD_PRIORITY_IDLE); //Establece la prioridad del hilo
//Opcional. Evita el acceso simultáneo a las variables contenidas entre InterlockedIncrement e
// InterlockedDecrement
InterlockedIncrement(iValor);
--
--
--
InterlockedDecrement(iValor);
END;
1) Crear el thread
La llamada para crear el hilo sería así:
procedure TForm1.Button1Click(Sender: TObject);
var
thr : THandle;
thrID : DWORD;
begin
thr := CreateThread(nil, 0, @HacerAlgo, nil, 0, thrID);
if (thr = 0) then ShowMessage('Error al crear el hilo);
end;
2) Proporcionar una función al hilo.
Requerimientos de la función:
- Se le puede dar el nombre que se quiera
- Debe tener un parámetro de tipo puntero
- La función devolverá un parámetro del tipo longint
- En la declaración se debe añadir la directiva stdcall, lo que le dice al compilador que la función le pasará los parámetros según la convención de Windows.
Ej.
FUNCTION HacerAlgo(Ptr : Pointer) : LongInt; STDCALL;
BEGIN
SetThreadPriority(DWORD(-2), THREAD_PRIORITY_IDLE); //Establece la prioridad del hilo
//Opcional. Evita el acceso simultáneo a las variables contenidas entre InterlockedIncrement e
// InterlockedDecrement
InterlockedIncrement(iValor);
--
--
--
InterlockedDecrement(iValor);
END;
Tu aplicación en el systray con un clic
Investigando las utilidades de la suite "ABF components", he comprobado que tienen un componente llamado TabfTrayIcon que encapsula el código necesario para poner el icono de vuestra aplicación en el Systray.
Para ello arrastrar el componente "TabfTrayIcon" al form de vuestro programa y poner las siguientes propiedades a True.
MinimizeOnStart:=true;
MinimizeToTray:=true;
Así de fácil...
Esto lo agradecerán los usuarios de Delphi 7
MinimizeOnStart:=true;
MinimizeToTray:=true;
Así de fácil...
Esto lo agradecerán los usuarios de Delphi 7
Nunca ha sido tan fácil utilizar los threads
.
La suite VCL "abfcomponents" incorpora un componente llamado TabfThreadComponent que encapsula el objeto tThread que simplifica enormemente la programación con hilos.
Para utilizarlo instalar la suite como se hace habitualmente y arrastrar el componente anterior a vuestro form.
Incorpora 4 eventos: OnException, OnExecute, OnTerminate, OnFinish, pues bien para ejecutar un prodimiento cualquiera en un thread simplemente hay que colocarlo en el evento OnExecute, así de fácil y nos olvidamos de definir el thread y demás historias, ya que eso lo hace el componente por nosotros.
Definición del evento OnExecute:
procedure TForm1.abfThreadComponent1Execute(Sender: TObject);
begin
// incluir aquí la llamada al procedimiento que hayamos definido en nuestra unit
end;
Y para lanzar el hilo teclear:
abfThreadComponent1.Execute;
Dado que no he encontrado mucho código en internet, si mis estimados lectores pueden postear código o indicar alguna web que lo contenga sería de agradecer y muy útil para todos.
Link:
Suscribirse a:
Entradas (Atom)
Simulación del movimiento de los electrones en un campo electrico
Espectacular simulación realizada con OpenGL del movimiento de los electrones cuando atraviesan un campo eléctrico. Como muestra la image...
-
Aquí tienen cómo se envía un stream o un archivo con Indy10 dentro de una red de ordenadores . Incluye el procedimiento principal en el Cl...
-
Seguidamente os dejo una lista bastante amplia de funciones escritas en Delphi que se utilizan cuando estamos programando una aplicación q...
-
Los códigos QR son una forma eficiente de almacenar y acceder a información. Las ventajas de usarlos son: Facilidad de uso : Los códigos Q...