Link de la página (inglés)
▻★★★ 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 )
El juego del Tangram con Delphi
Link de la página (inglés)
Simular un clic sobre un link de una página web
Para recuperar los links de una página html es necesario abrir una instancia de Internet Explorer y utilizar las funciones OLE como muestra el siguiente ejemplo:
procedure ListarLinks(List: TStrings; IEApp: OLEVariant; aURL:string);
var
IEApp: OLEVariant;
nbLinks,i:Integer;
begin
//Si el objeto OLE no ha sido creado
if(VarIsEmpty(IEApp))then
begin
//crear el objeto
IEApp := CreateOleObject('InternetExplorer.Application');
//hacerlo visible
IEApp.Visible := true;
//Abrir la página especificada
IEApp.Navigate(aURL);
end;
//Esperar a que la página sea completamente cargada
// READYSTATE_COMPLETE = 4
while Cardinal(IEApp.readyState) <> 4 do sleep(1000);
//Recuperar el nombre de los links
nblinks := Cardinal(IEApp.Document.links.length);
//Volcar los links en un tString
List.Add(Format('Nombre de los links = %d',[nblinks]));
for i := 0 to nblinks - 1 do
Self.MemoLog.Lines.Add(string(IEApp.Document.links.item(i).href));
end;
Para simular un clic hacer lo siguiente:
procedure ClicSobreLink(LinkIndex:Integer);
begin
IEApp.Document.links.item(LinkIndex).click;
end;
Transformación de un metafile Windows
Esta unidad contiene procedimientos de transformación de un metafichero Windows (son ficheros de imágenes que contienen la descripción vectorial de un diseño.) Tienen la ventaja de poder ser redimensionados sin perder calidad, por contra su modificación en memoria es muy complicada.
Link de descarga
Leer las pistas de un CD de audio
Los ficheros ".cda" describen las pistas contenidas en un CD audio. Estos ficheros están visibles en el explorador de Windows cuando abres una ventana correspondiente a un CD.
No existe una función del API que permita consultar el contenido de estos ficheros pero podéis utilizar las procedimientos contenidos en el siguiente fichero:
Autor: Pierre Castelain
Link de descarga
Monitor de red con Delphi
Monitor de red que utiliza la Dll "IPHLPAPI.DLL" del API de Microsoft.
Para cada interfaz de red el programa muestra:
-Su nombre.
-Su dirección MAC.
-Su velocidad.
-MTU.
-Total de bytes enviados y recibidos.
-Diagrama con la tasa de transferencia instantánea.
Link de descarga del programa
Salvapantallas programado en Delphi
Para ver cómo funciona hay que hacer clic con el botón derecho del ratón sobre el archivo anterior y en el menú emergente activar la opción "Probar".
Link de descarga
Espectacular actuación de Mariachis
...Dedicado a mis amigos mexicanos...
Link en youtube: http://www.youtube.com/watch?v=dZPYKcIZqH8
Crear un punto de restauración del sistema
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
Matrix con Delphi
Autor: Pierre Castelain
Código fuente
Solución de la ecuación de Schrödinger con Delphi
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
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
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
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.
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.
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
- 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
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
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
Ejecutar directx con Delphi
DirectX es un conjunto de APIs creadas para facilitar la programación multimedia. La última versión es la 10 incluida en Windows Vista.
En la próxima versión (la 11) se incluirá una nueva tecnología de computación de shaders para permitir que la GPU no sea solamente usada para gráficos 3D y así puedan los desarrolladores tomar ventaja de las tarjetas gráficas como procesadores en paralelo.
Al final del post deja para su descarga el código fuente, el ejecutable y una captura del ejecutable.
Link:
http://www.clubdelphi.com/foros/showthread.php?t=61992
10 trucos para optimizar el código en Delphi
Los nombres de las constantes son en mayúsculas (iIMPUESTO, sCONDICION)
2) Mantén la directiva {$O+} (or {$Optimización On})
3) Puedes compilar tus programas sin los paquetes run-time. Pero si quieres distribuir tu aplicación necesitarás de esas dll's.
4) No crees todos los forms al arrancar el programa, en vez de eso constrúyelos dinámicamente.
5) Utiliza las funciones del API de Windows en vez de crearlas tú mismo, generalmente son mucho más rápidas
6) Cuando incluyas imágenes en tus programas optimízalas primero (Puedes convertirlas al formato gif para ahorrar espacio)
7) Si usas una o dos funciones de una unidad no la incluyas en la sección "unit" de tu programa. Esto evitará que Delphi añada al ejecutable todas las rutinas de esta unidad. (Es mejor usar Windows.CreateDirectory, que utilizar CreateDirectory y añadir "Windows" en la sección "Unit"
8)En vez de utilizar componentes no-visibles es mejor incluir su código en el programa. No existe necesidad de usar un componente que muestra un directorio cuando se puede hacer con unas pocas líneas de código.
9) Si tienes una función crítica deberías ir con cuidado. Lo que parece rápido en tu equipo puede no serlo en otros PC's.
10) Generalmente los programas tienden a hacer cálculos rudimentarios. Si simplificas tu código para utilizar las mejores funciones optimizarás tu código. Por ejemplo en el tema de búsquedas es mejor usar búsquedas binarias que lineales.
Detectar inactividad en el sistema
Aquí os dejo un programa que he realizado para apagar la pantalla del ordenador cuando se detecte inactividad a nivel del sistema.
Para ello he utilizado la función GetLastInputInfo presente en el WinAPI desde Windows 2000 que devuelve el tiempo desde el último evento de entrada en el sistema en la sesión del usuario actual.
El siguiente código arranca un tTimer al inicio y cuando detecta que el usuario no ha tecleado nada y tampoco ha movido el ratón procede a apagar la pantalla pasados 10 segundos.
UNIT Unit1;
INTERFACE
USES
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
TYPE
TForm1 = CLASS(TForm)
Button1: TButton;
Timer1: TTimer;
Label1: TLabel;
PROCEDURE Timer1Timer(Sender: TObject);
PROCEDURE FormCreate(Sender: TObject);
PROCEDURE FormDestroy(Sender: TObject);
PRIVATE
{ Private declarations }
PUBLIC
{ Public declarations }
END;
VAR
Form1: TForm1;
MonitorApagado: boolean;
IMPLEMENTATION
{$R *.dfm}
//Función que detecta la inactividad del sistema
FUNCTION SecondsIdle: DWord;
VAR
liInfo: TLastInputInfo;
BEGIN
liInfo.cbSize := SizeOf(TLastInputInfo);
GetLastInputInfo(liInfo);
Result := (GetTickCount - liInfo.dwTime) DIV 1000;
END;
PROCEDURE apagarMonitor;
BEGIN
SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1);
END;
PROCEDURE TForm1.Timer1Timer(Sender: TObject);
VAR
segundos: integer;
BEGIN
segundos := SecondsIdle;
label1.Caption := IntTostr(segundos);
IF segundos > 10 THEN
BEGIN
IF NOT MonitorApagado THEN
BEGIN
ApagarMonitor;
MonitorApagado := true;
END;
END;
END;
PROCEDURE TForm1.FormCreate(Sender: TObject);
BEGIN
MonitorApagado := false;
timer1.enabled := true;
END;
PROCEDURE TForm1.FormDestroy(Sender: TObject);
BEGIN
timer1.enabled := false;
END;
END.
La historia de Delphi
Recuerdan hace años cuando cada vez que aparecía una versión nueva de Turbo Pascal en su publicidad indicaba que compilaba un 30% más rápido que su predecesor y que incluso se publicó un comic llamado "Turboman" donde mostraba las bondades de este entorno de programación.
Por cierto ¿saben quién es Frank Borland? o de donde procede el nombre "Delphi", en resumen una página interesante para los interesados en la historia de este espectacular IDE.
http://dn.codegear.com/museum
Utilizar Amazon S3 (Simple Storage Service)
Computación en Grid con Delphi (librería hxgrid)
http://www.deep-shadows.com/hax/hxgrid.htm
Cálculo parabólico
Delphi se puede utilizar para desarrollos matemáticos, como el tema que os presento ahora, en el que se muestra de una forma gráfica las propiedades de las parábolas.
Programa los siguientes temas:
-Ecuación de una parábola dado el vértice y su foco.
-Punto de intersección B de un rayo AB con la parábola.
-Línea tangente a la parábola CBD en el punto B.
-Ángulo de incidencia del rayo AB respecto a la recta tangente.
-Rayo reflejado desde el punto B hasta el eje FV de la parábola.
Link:
http://www.delphiforfun.org/Programs/Download/ParabolicReflectionSource.zip
Redes neuronales con Delphi
Os presento una página donde muestra cómo se implementa en delphi una red neuronal utilizando backpropagación como algoritmo de aprendizaje.
Una red neuronal la forman varias capas, una de ellas es la capa de entrada, otra la capa de salida y una o varias capas ocultas. Cada capa se interconecta con la previa desde sus nodos (neuronas) simulando de alguna manera los sistemas neuronales biológicos.
La salida viene dada por tres funciones:
-función de propagación: Sumatorio de cada entrada multiplicado por el peso de su interconexión.
-función de activación: Suele ser la salida de la función de propagación
-función de transferencia: Acota la salida entre [-1,1] (en este caso utiliza la tangente hiperbólica - tanh-, aunque en otros casos se utiliza la función sigmoidea)
Link:
http://www.ibrtses.com/delphi/neuralnets.html
Extracción segura de un pendrive
También se puede extraer el pendrive mediante llamada a la función HotPlugEjectDevice de la librería hotplug.dll de Windows.
Su definición en Delphi es:
function HotPlugEjectDevice(hwndParent: Cardinal; lpDeviceInstanceId: PWideChar): LongBool; stdcall external 'hotplug';
El código con WinExec es el siguiente:
WinExec(PChar('c:\windows\system32\rundll32 hotplug.dll,HotplugEjectDevice
y para hacer aparecer la ventana de desconectar hardware sería:
WinExec(PChar('c:\windows\system32\rundll32 shell32.dll,Control_RunDLL hotplug.dll'),SW_SHOWNORMAL);
Crear un antivirus con Delphi
Aquí tenéis un interesante artículo con código fuente en Delphi incluido, sobre cómo usar el interface de Microsoft IOfficeAntiVirus para desarrollar un antivirus para Microsoft Office.
Traducir mensajes de Outlook con Delphi
http://es.wikipedia.org/wiki/Add-in
Apagar servidor de red cuando se apaguen los terminales
Continuando con los posts sobre ahorro de energía os presento este software. Su función es ir comprobando continuamente el estado (ON, OFF) de cada uno de los equipos y en el momento que detecta que todos ellos están OFF ejecutará la acción de apagado del servidor que se haya definido (por defecto "shutdown -s").
Desde el archivo "parametros.ini" podemos configurar las variables necesarias para su funcionamiento (ip del servidor, acción de apagado, intervalo de comprobación, IPs de los equipos de red). Hay que tener en cuenta que este programa se deberá iniciar desde el servidor de red.
Seguramente en vuestro trabajo como administradores de redes tendréis momentos en los que están todos los terminales de red apagados y sin embargo está encendido el servidor por lo que evidentemente es un gasto energético innecesario, por tanto si aplicamos este software ahorraremos energía, evitaremos emisiones de CO2, y se amplia la vida útil del equipo al estar encendido menos horas. Un servidor de red consume aprox. 250 watios/hora por lo que el ahorro energético acumulado en un año podría llegar a ser muy importante.
Link para su descarga (código fuente en Delphi y ejecutable)
http://JJavierPareja.googlepages.com/Apagarservidor.zip
Software para backup en Delphi
Google Maps - API Codificación Geográfica
El link es:
http://neftali.clubdelphi.com/?p=335
Integración con Google Maps:
http://neftali.clubdelphi.com/?p=380
Obtener las modificaciones que un usuario realiza sobre el Mapa y trasladarlas a nuestro programa en delphi:
http://neftali.clubdelphi.com/?p=413
Osciloscopio en tiempo real
Es un componente de dibujo en tiempo real y un osciloscopio virtual.
Tiene ejemplos de código para Cpp, Visual, Mathworks y por supuesto Delphi.
Se puede descargar desde aquí:
http://www.oscilloscope-lib.com/oscilloscope_DLL.zip
Página principal:
http://www.oscilloscope-lib.com/
Crea espectaculares fractales con Delphi
Con este software podrán editar, crear y renderizar fractales. Viene con muchísimos ejemplos prediseñados, a cada cual más original, pudiéndose modificar diferentes parámetros (color, gradiente, posición de la cámara, perspectiva, escala, etc.) para conseguir nuevos efectos.
Se puede descargar desde aquí, (con código fuente incluido)
http://sourceforge.net/projects/apophysis/
Links relacionados:
The fractal flame algorithm http://flam3.com/flame.pdf
Ahorrar energía con Delphi
//pasar monitor a modo de ahorro de energía
procedure modoAhorroDeEnergia;
begin SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1);
end;
//apagar monitor
procedure apagarMonitor;
begin SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
end;
//Encender monitor:
procedure encenderMonitor;
begin SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1);
end;
//Apagar equipo (requiere permisos administrativos)
PROCEDURE apagarEquipo;
begin
IF NOT (ExitWindowsEx(EWX_SHUTDOWN + EWX_FORCE, 0)) then
showmessage('No puedo apagar el equipo');
end;
//Reiniciar equipo
PROCEDURE ReiniciarEquipo;
begin
IF NOT (ExitWindowsEx(EWX_REBOOT, 0)) then
showmessage('No puedo reiniciar el equipo');
end;
//Devuelve TRUE si el sistema puede Hibernar
FUNCTION TForm1.SystemCanHibernate(): boolean;
RESOURCESTRING
rsDll = 'powrprof.dll';
rsFunc = 'IsPwrHibernateAllowed';
TYPE
TFunc = FUNCTION: boolean; stdcall;
VAR
func: TFunc;
hDll: THandle;
BEGIN
result := false;
hDll := LoadLibrary(PChar(rsDll));
IF (hDll <> 0) THEN
TRY
@func := GetProcAddress(hDll, PChar(rsFunc));
result := Assigned(func) AND func();
FINALLY
FreeLibrary(hDll);
END;
END;
//Devuelve TRUE si el sistema puede ser suspendido
FUNCTION tform1.SystemCanSuspend(): boolean;
RESOURCESTRING
rsDll = 'powrprof.dll';
rsFunc = 'IsPwrSuspendAllowed';
TYPE
TFunc = FUNCTION: boolean; stdcall;
VAR
func: TFunc;
hDll: THandle;
BEGIN
result := false;
hDll := LoadLibrary(PChar(rsDll));
IF (hDll <> 0) THEN
TRY
@func := GetProcAddress(hDll, PChar(rsFunc));
result := Assigned(func) AND func();
FINALLY
FreeLibrary(hDll);
END;
END;
OCR con Delphi
Tiene la capacidad de aprender patrones desde un tipo y tamaño de font determinado utilizando una red neural con el algoritmo de backpropagación.
Hay que tener encuenta que el OCR no ha sido entrenado, por lo que lo primero que hay que hacer es entrenarlo para que pueda reconocer el texto.
Para ello hay que abrir la ventana "Process->Training...", seleccionar los patrones desde los fonts disponibles y el tamaño de letra (Manteniendo pulsado shift o Ctrl se seleccionan varios items), o también se puede dibujar con el ratón un patrón, y para finalizar pulsar el botón "Add Training Pairs".
Cuando estén todos items definidos (podemos probar p.ej. con los números "1,2,3,4")
pulsamos el botón "Train".
El botón "Test" prueba la red. (Es conveniente pulsarlo para ver el tanto por ciento de coincidencia del patrón con el dato de prueba)
Ventana de entrenamiento:
Seleccionar el Font, Char y Size y después pulsar "Add Training Pairs"
Ventana para teclear los datos:
Escribir con el ratón en la parte superior alguno de los números seleccionado en la pantalla anterior (con cuidado de imitar el font y su tamaño) y después activar el menú "Process->Recognize"
En la parte inferior de la ventana aparecen los caracteres reconocidos por el programa.
En este caso la coincidencia ha sido del 100 por ciento.
Descargar el programa con su código fuente:
Pruebas realizadas con Delphi 7
El programa utiliza el componente TBackProp
Autor: Theo Zacharias (theo_yz@yahoo.com)
Descripción : TBackProp es una clase que encapsula un objeto de red neuronal backpropagation
Eventos: OnTraining, OnTrainingFinish
Propiedades: ErrorThreshold (r/w), InputLayer (r/w),
InputPatternHeight (r/o), InputPatternWidth (r/o),
KnownSymbol (r/o), LearningRate (r/w), MaxEpoch (r/w),
Modified (r/o), NHiddenNeuron (r/o), NInputNeuron (r/o),
NNeuronError (r/o), NOutputNeuron (r/o), NTrainingEpoch (r/o),
NTrainingNeuron (r/o), NTrainingPair (r/o), OutputLayer (r/o),
StopTraining (r/w), TargetClassificationError (r/w),
TargetPatternHeight (r/o), TargetPatternWidth (r/0),
TargetSquaredError (r/o), TrainingError (r/o),
WeightsInitFactor (r/w)
Métodos: : AddTrainingPairs, Apply, GetResult, NewKnowledge,
OpenKnowledge, Retrain, SaveKnowledge, Train
Descargar el componente tBackProp
Calcular el enésimo número de fibonacci
Fibonacci integers are defined as:
Fibonacci Zahlen sind wie folgt definiert:
fib[n+2] = fib[n+1] + fib[n];
fib[1] = 1;
fib[0] = 1;
Example/Beispiel: fib[4] = fib[3] + fib[2] = fib[2] + fib[1] + fib[1] + fib[0] =
fib[1] + fib[0] + fib[1] + fib[1] + fib[0] = 5
}
function fibit(n: Integer): Integer;
var
a, b, i, temp: Integer;
begin
temp := 1;
a := 1;
b := 1;
for i := 1 to n - 1 do
begin
temp := a + b;
a := b;
b := temp;
end;
Result := temp;
end;
function fibrec(n: Integer): Integer;
var
temp: Integer;
begin
temp := 0;
if (n = 0) then temp := 1;
if (n = 1) then temp := 1;
if (n > 1) then temp := fibrec(n - 1) + fibrec(n - 2);
Result := temp;
end;
// Example:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(fibit(10)));
ShowMessage(IntToStr(fibrec(10)));
end;
Autor: Dev4u.ch
Homepage: http://www.dev4u.ch
Obtener punto 3 de un triángulo equilátero desde los otros 2
const
Sin60 = 0.86602540378443864676372317075294;
const
Cos60 = 0.50000000000000000000000000000000;
begin
{ Translate for x1,y1 to be origin }
x2 := x2 - x1;
y2 := y2 - y1;
{ Rotate 60 degrees and translate back }
x3 := ((x2 * Cos60) - (y2 * Sin60)) + x1;
y3 := ((y2 * Cos60) + (x2 * Sin60)) + y1;
end;
(* End Of Create Equilateral Triangle *)
Autor: Arash Partow
Homepage: http://www.partow.net
Ángulo creado por 3 segmentos 3D
var
Dist: Double;
begin
(* Quantify coordinates *)
x1 := x1 - x2;
x3 := x3 - x2;
y1 := y1 - y2;
y3 := y3 - y2;
z1 := z1 - z2;
z3 := z3 - z2;
(* Calculate Lay Distance *)
Dist := (x1 * x1 + y1 * y1 + z1 * z1) * (x3 * x3 + y3 * y3 + z3 * z3);
if IsEqual(Dist, 0) then Result := 0.0
else
Result := ArcCos((x1 * x3 + y1 * y3 + z1 * z3) / sqrt(Dist)) * _180DivPI;
end;
(* End Of VertexAngle *)
Ángulo creado por 2 segmentos 2D
var
Dist: Double;
begin
(* Quantify coordinates *)
x1 := x1 - x2;
x3 := x3 - x2;
y1 := y1 - y2;
y3 := y3 - y2;
(* Calculate Lay Distance *)
Dist := (x1 * x1 + y1 * y1) * (x3 * x3 + y3 * y3);
if Dist = 0 then Result := 0.0
else
Result := ArcCos((x1 * x3 + y1 * y3) / sqrt(Dist)) * _180DivPI;
end;
(* End Of VertexAngle *)
Autor: Arash Partow
Homepage: http://www.partow.net
Conversor MPEG4 a AVI con Delphi
Viene con código fuente y licencia GNU.
Se puede descargar desde aquí:
http://sourceforge.net/projects/mp4cam2avi/
Cosas que se pueden hacer:
- Convertir y unir videos MPEG-4 ASP desde tu cámara a un único video DivX-compatible MPEG-4 para ser visto en un PC o DVD-MPEG4 player, preservando la calidad original;
- Modo Batch para convertir varios ficheros secuencialmente;
- Convierte películas*.MP4 (MPEG4 ASP) desde Nero Recode a un formato AVI compatible para un reproductor DVD-MPEG4;
- Convierte películas MJPEG desde cámaras de fotos a un DivX-AVI compatible MPEG-4 con un clic;
- Convierte videos H.264 (MPEG-4 AVC) *.MP4 al formato H.264 AVI, que podrán ser editables con VirtualDub y reproducibles con Windows Media Player (H.264 VfW se necesitará el codec(p.ej. el último FFDShow);
- Comprueba los clips MPEG-4 ASP/MJPEG antes de la conversión usando vista previa;
- Edita clips antes de la conversión usando timeline;
- Corrige el audio/video lag de algunas cámaras como el modelo Minolta A200
- Incorpora un filtro pasa-bajo (viene perfecto para la Sanyo Xacti C1)
Formatos de cámaras soportados:
MPEG4-AVC camcorders:
Sanyo: CG65
Casio: EX-V7, EX-S880, Z1200
Others: Aiptek GO-HD
MPEG4-ASP camcorders:
Sanyo: VPC-Ñ1, C4, C40, C5, C6, HD-1, HD-2
Olympus: C770 Movie
Sony: Sony DSC-M1, M2
Pentax: OptioMX, MX4, S5n, S5z, S6, A10
Samsung: Digimax V40, V50, V70, V700, V800, U-CA5, L85, VP-MX10A
Casio: EX-P505, EX-Z750, EX-Z850, EX-S500, EX-S600
Kodak V603, Z612, Z760, Z1275
Photo cameras with H.263 video:
Kodak DX4530
Photo cameras with MOV MJPEG video
Canon Tx1, Kodak LS753, Minolta A2, Minolta Dimage Z3, Nikon Coolpix 5200, Nikon 8400, Nikon E8800, Panasonic FX7, Panasonic FZ-1, Panasonic TZ5, Pentax 750Z, Olympus C-5000/C-5050/C-8080, Olympus mini digital, Pentax Optio X, Sanyo Xacti J1, Fuji S7000.
Formatos de entrada:
File type: *.MP4, *.MOV, *.AVI, *.3GP
(3gp support is experimental, no AMR audio)
Video: MPEG4 ASP, MPEG-4 AVC, MJPEG, H.263, Sorenson Video 3
Audio: AAC, PCM, u-Law, ADPCM, MP3
Formatos de salida:
File types: *.AVI
Video: Source video or XviD MPEG-4 ASP
Audio: Source audio, PCM or MP3
Usar archivos pdf con Delphi
1) Asegurarte que tienes la última versión del programa "Adobe Acrobar Reader" (Se puede descargar gratuitamente desde la página de Adobe
2) Abrir Delphi e Importar el control ActiveX Adobe Acrobat
Menú Component->Import ActiveX Control...
Pulsa el botón "Install..." y aparecerá en la carpeta "Samples" un componente llamado TPdf.
3) Ahora ya podemos crear una nueva aplicación con un TButton, TOpenDialog y TPDF
Dentro del método Onclic del Tbutton pondremos el siguiente código:
OpenDialog1.Filter := 'PDF Files (*.pdf)*.pdf';
if OpenDialog1.Execute then Pdf1.src := OpenDialog1.FileName;
No olvidar que hay que redimensionar el componente tpdf para poder visualizar correctamente el documento pdf.
Se pueden añadir botones con las funciones: gotoFirstPage, gotoLastPage, setZoom(percent: Single) para ir a la primera, última página o para establecer un zoom.
Videos sobre Delphi 2009
- Centralizando acciones com ActionManager
- Compitiendo a nivel internacional con Delphi 2009
Componente para manipulacion de imagenes en Delphi
Aquí tienen un impresionante componente llamado " TEffects " para manipulación de imágenes en Delphi.
Con él se pueden realizar efectos que se ven en programas de retoque fotográfico o edición de imágenes como Corel Paintshop o Adobe Photoshop.
Notas de instalación
El uso de los ejemplos necesita previamente la instalación de las siguientes unit.
que deben ser instaladas en el siguiente orden
- MemUtils
- ExactTimer
- Waiter
- GrayBitmap
- Shape
- Effects
- GraphUtils
- FunThings
Entre otras cosas se pueden implementar los siguientes temas:
(Copiado de la página del autor)
Adjusts color information
Inverts colors
Filters colors
Rotate image to any degree
Adjusts channel colors
Fills channels
Implements transparency effect
Implements blur effect
Implements rough blur effect
Implements pixelization effect
Uploads and extracts a data of any type into a single image at binary level (cryptography)
A few fun things are in TGraphUtils and TFunThings units. These units include:
TBitmapConvertor is intended for conversions between TBitmap class and TSmallBitmap structure (TSmallBitmap is type of dynamic array that represents 32 bit image of any size)
TCustomTextConvertor is abstract class that contains base code for conversion from bitmap into colored text
TCustomTextDrawer is one more abstract class with a code for drawing of colored text on a display device context
TTextConvertor converts image into html document
TTextDrawer is descendant of TCustomTextDrawer class
TDesktopDrawer is descendant of TCustomTextDrawer class which draws text directly on the desktop.
Link de descarga del Componente:
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...