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
▻★★★ 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 )
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:
function
SimplificadoATradicional(Str:Widestring):Widestring;begin
SetLength(Result,Length(Str));
LCMapStringW($
404
,LCMAP_TRADITIONAL_CHINESE,
PWideChar(Str),Length(Str),
PWideChar(Result),Length(Result));
Result:=Result;end
;function
TradicionalASimplificado(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;
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...
-
Espectacular simulación realizada con OpenGL del movimiento de los electrones cuando atraviesan un campo eléctrico. Como muestra la image...
-
Este programa sirve para calcular los valores de un resistor en función del color de las bandas de colores que lleva serigrafiadas en su s...
-
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...