Detector de movimiento con Delphi



Este software detecta el movimiento entre imágenes tomadas por una webcam, se pueden ajustar varios parámetros como la sensibilidad, pixels verificados y el retardo antes de avisar. Cuando salta un aviso nos enviará un email ( antes hay que cambiar el nombre del host SMTP ) y se guardará en la carpeta "detection" una imagen jpg de ese instante.

Es interesante observar cómo se inicializa el dispositivo de captura de imagen de la siguiente forma:



hcam:=capCreateCaptureWindowA('',0,0,0,320,240,handle,0);

sendmessage(hcam,1034,0,0);

form1.DoubleBuffered:=true;



Descargar codigo fuente


















Ejemplo de uso de un proxy con Delphi

Este es un ejemplo de utilización de un proxy con indy.
Es interesante observar cómo se programa el componente AntiFreeze que se utiliza para evitar el bloqueo de la aplicación, ya que indy trabaja en modo no asíncrono, de tal forma que cuando se intenta realizar una conexión la aplicación se quedará bloqueada hasta que lo consiga, añadiendo el componente AntiFreeze se consigue minimizar este comportamiento.
El procedimiento UTF8ToWideString está en la biblioteca JEDI VCL.
procedure TForm1.Button1Click(Sender: TObject);
Var
Resp : String;
begin
Resp := webSession('http://www.elmundo.es');
if Length(Resp)>0 then
MessageDlg('Got the body ok',mtInformation,[mbOk],0);
end;

function TForm1.webSession(sURL : ansistring) : ansistring;
var
SStream : Tstringstream;
HTTPCon : TIdHTTP;
AntiFreeze : TIdAntiFreeze;
begin
Result := '';
if Length(SettingsForm.edtProxyServer.text) >= 7 then // 0.0.0.0
Try
SStream := NIL;
AntiFreeze := NIL;
HTTPCon := NIL;
Try
SStream := tstringstream.Create('');
{ Create & Set IdHTTP properties }
HTTPCon := TIdHTTP.create;
HTTPCon.HandleRedirects := true;
{ Check Proxy }
if checkproxy('http://www.google.com') then
Begin
HTTPCon.ProxyParams.ProxyServer := SettingsForm.edtProxyServer.text;
HTTPCon.ProxyParams.ProxyPort := StrToInt(SettingsForm.edtProxyPort.Text);
HTTPCon.ProxyParams.BasicAuthentication := True;
HTTPCon.ProxyParams.ProxyUsername := SettingsForm.edtProxyServer.Text;
HTTPCon.ProxyParams.ProxyPassword := SettingsForm.edtProxyUserName.Text;
End;
{ Create another AntiFreeze - only 1/app }
AntiFreeze := TIdAntiFreeze.Create(nil);
AntiFreeze.Active := true;
HTTPCon.Get(sURL,SStream);
Result := UTF8ToWideString(SStream.DataString);
Finally
If Assigned(HTTPCon) then FreeAndNil(HTTPCon);
If Assigned(AntiFreeze) then FreeAndNil(AntiFreeze);
If Assigned(SStream) then FreeAndNil(SStream);
End;
Except
{ Handle exceptions }
On E:Exception do
MessageDlg('Exception: '+E.Message,mtError, [mbOK], 0);
End;
end;

function TForm1.checkproxy(sURL : ansistring) : boolean;
var
HTTPCon : TIdHTTP;
AntiFreeze : TIdAntiFreeze;
begin
Result := False;
Try
{ Inti vars }
AntiFreeze := NIL;
HTTPCon := NIL;
Try
{ AntiFreeze }
AntiFreeze := TIdAntiFreeze.Create(NIL);
AntiFreeze.Active := true;
{ Create & Set IdHTTP properties }
HTTPCon := TIdHTTP.Create(NIL);
HTTPCon.ProxyParams.ProxyServer := SettingsForm.edtProxyServer.text;
HTTPCon.ProxyParams.ProxyPort := StrToInt(SettingsForm.edtProxyPort.Text);
HTTPCon.ProxyParams.BasicAuthentication := True;
HTTPCon.ProxyParams.ProxyUsername := SettingsForm.edtProxyServer.Text;
HTTPCon.ProxyParams.ProxyPassword := SettingsForm.edtProxyUserName.Text;
HTTPCon.HandleRedirects := true;
HTTPCon.ConnectTimeout := 1000;
HTTPCon.Request.Connection := 'close';
HTTPCon.Head(sURL);
Finally
{ Cleanup }
if Assigned(HTTPCon) then
Begin
{ Return Success/Failure }
Result := HTTPCon.ResponseCode = 200;
If HTTPCon.Connected then HTTPCon.Disconnect;
FreeAndNil(HTTPCon);
End;
if Assigned(AntiFreeze) then FreeAndNil(AntiFreeze);
End;
Except
On E:EIdException do ;
{ Handle exceptions }
On E:Exception do
MessageDlg('Exception: '+E.Message,mtError, [mbOK], 0);
End;
end;

Leer los datos del visor de sucesos

Este software permite leer los datos del visor de sucesos de windows xp o windows 7 Aplicación, seguridad y sistema.





Fuente: http://nono40.fr.st

nono40@fr.st

Descargar código





Actualizar la hora en el PC

Function PonerEnHora(Fecha:TDateTime):Boolean;
Var Infos :TSystemTime;
Zone :TTimeZoneInformation;
Rdo :Integer;
Begin

Result:=False;
Rdo:=GetTimeZoneInformation(Zone);
// Fecha es Hora local =>se ajusta el decalaje para obtener la hora absoluta
Case Rdo Of
TIME_ZONE_ID_UNKNOWN : Fecha:=Fecha+( Zone.Bias /(24*60));
TIME_ZONE_ID_STANDARD : Fecha:=Fecha+((Zone.Bias+Zone.StandardBias)/(24*60));
TIME_ZONE_ID_DAYLIGHT : Fecha:=Fecha+((Zone.Bias+Zone.DaylightBias)/(24*60));
Else
Exit;
End;
Infos.wYear :=YearOf (Fecha);
Infos.wMonth :=MonthOf (Fecha);
Infos.wDayOfWeek :=DayOfWeek (Fecha);
Infos.wDay :=DayOf (Fecha);
Infos.wHour :=HourOf (Fecha);
Infos.wMinute :=MinuteOf (Fecha);
Infos.wSecond :=SecondOf (Fecha);
Infos.wMilliseconds :=MillisecondOf (Fecha);
Result:=SetSystemTime(Infos);
End;

(se necesita tener derechos administrativos para actualizar la hora del sistema)

y la llamada sería:

If PonerEnHora(EncodeDate(2011,4,22)
+EncodeTime(17,0,0,0))
Then ShowMessage('Puesta en hora OK')
Else ShowMessage('Error al poner en hora');

Utilizar el componente Windows Media Player en Delphi


Lo que vamos a hacer es incorporar el objeto tWindowsMediaPlayer en Delphi 2009 . Al final de este proceso aparecerá en la "Tool Palette" dentro de la pestaña "ActiveX".



Desde el menú Component->Import Component

- Seleccionar “Import ActiveX Control” y pulsamos “Next”

- Marcamos “Windows Media Player” y pulsamos “Next”

- En la casilla “Palette page” marcamos “ActiveX” y pulsamos “Next”

- Dentro de las opciones disponibles hacemos clic en “Install to existing package”

Pulsamos el botón “Browse” y localizamos el archivo “dclusr.dpk” que en Delphi 2009 está en C:\Archivos de programa\Codegear\Rad Studio\6.0\lib y pulsamos “Finish”.



Si todo es correcto tendremos lo siguiente:





Los componentes los tendremos en View-> Tool Palette->ActiveX



No olvidar indicar desde Tools->Options->Delphi Options->Library Path

El siguiente path: “C:\documents and settings\ .....\mis documentos\rad studio\6.0\Imports, ya que allí es donde se encuentra la unit WMPLib_TLB necesaria para compilar nuestro programa

Para crear un nuevo programa vamos a File->New->VCL Forms application Delphi
Y en el form de la aplicación arrastramos el componente tWindowsMediaPlayer desde la paleta de componentes (ActiveX)




Y en la propiedad URL indicamos el archivo de música que queremos reproducir.
También se puede poner un tButton para ejecutar la función “Play”, “Pause” o “Stop”

//Funcion Play
WMP.URL:='Cancion1.mp3';
WMP.controls.play;
ArchivoQueSeEstaReproduciendo.Caption:=WMP.currentMedia.name;

//Funcion Pause
WMP.controls.pause;

//Funcion Stop
WMP.controls.stop;

//Estado
CASE WMP.playState of
wmppsUndefined: ;
wmppsStopped: ;
wmppsPause: ;
end;

//Gestión del volumen
WMP.Settings.volume:=50;

//Crear una nueva playlist
WMP.playlistCollection.newPlaylist(EdTitrePlayList.Text)

//controles
WMP.controls.previous;
WMP.controls.next;

//repetir modo aleatorio
WMP.settings.setMode('shuffle',true);

//repetir modo loop
WMP.settings.setMode('loop',true);










Simulación del enfriamiento de una partícula


Este es un algoritmo para calcular el grado de enfriamiento de una partícula que se mueve en el espacio 2D.
Se calcula aplicando una ecuación diferencial de Newton para el enfriamiento de la materia. Lo interesante es que si una partícula cruza el camino de otra, en su intersección se calentará más de lo que la segunda partícula habría calentado habitualmente. Esto es debido a que el calor residual que ya estaba allí, se suma al calor de la nueva partícula que está llegando.

Web: http://www.partow.net/projects/virtualpflame/index.html
Código fuente: http://www.partow.net/downloads/particleflame-source.zip

Cómo utilizar Delphi Prism XE para crear aplis para iPhone, iPod Touch y iPad


Manual en inglés de 73 páginas desarrollado por Brian Long de Embarcadero en el que muestra cómo desarrollar aplis para iPhone, iPod y iPad con Delphi Prism XE, imprescindible para los interesados en este tema.

Clic aquí para descargar el manual

Netstat


Este programa muestra la salida del comando "netstat" dando información de las conexiones activas mostrando la Ip local, Ip remota, puerto, estado (listening, established, close_wait, closed, time_wait), pid y proceso asociado a la conexión.


Lo más fácil sería abrir un shell, ejecutar el comando netstat y mostrar su salida, pero para los quieren saber más aquí tienen su programación en Delphi utilizando la unit iphelp.pas



Referencia: club delphi

Enlace

Código fuente














Driver para Kinect en Delphi

Driver y funciones de ayuda del controlador Kinect de Microsoft para Windows. El driver Dll se puede descargar desde aquí http://codelaboratories.com/get/nui/
El código está realizado en Delphi 2010.

Referencia: http://www.delphifr.com/codes/KINECT-TEST-V1_52494.aspx

Codigo fuente Delphi

Además tienen en el siguiente link información de un programador que ha creado el componente TKinect
http://www.lakraven.com/delphi-stuff/tkinect/

Componente definitivo para tratamiento de imágenes en Delphi


ImageEn es uno de los mejores componentes freeware para tratamiento de imágenes en Delphi que existe actualmente. Además incorpora funciones de video captura, impresión y procesamiento de imágenes, renderizado, miniaturas, manejo de base de datos con campos blob, tratamiento de imágenes vectoriales.

Merece la pena que echen un vistazo a todas las característcas del software desde aquí:

http://www.hicomponents.com/main/products/products-imageenvcl/imageenvcl-features



Página web:

http://www.hicomponents.com




Simular teclado de un piano con Delphi




Este soft simula el teclado de un piano, generando con el altavoz las diferentes frecuencias de la escala musical, además puede producir señales sinusoidales, triangulares, cuadradas o en diente de sierra.



Autor: jcniloc

Descargar código






Eliminar el ejecutable desde el propio ejecutable

El siguiente código elimina el ejecutable desde el propio programa,
para ello se construye un fichero .bat que se inicia con la
función WinExec.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, 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;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
f : TextFile;
ficheroBat : string;
begin
ficheroBat := ChangeFileExt(Application.ExeName, '.bat');
AssignFile(f, ficheroBat);
FileMode := fmOpenWrite;
rewrite(f);
try
Writeln(f, format('Erase "%s"',[Application.exename]));
Writeln(f, format('Erase "%s"',[ficheroBat]));
finally
CloseFile(f);
end;
WinExec (Pchar(ficheroBat), 1);
Application.terminate;
end;


end.

o aquí tienen otra función que copia el propio ejecutable al directorio raíz c:\ y lo ejecuta desde allí



PROGRAM Project1;

{©Drkb v.3(2007): www.drkb.ru,

®Vit (Vitaly Nevzorov) - nevzorov@yahoo.com}



USES

Forms, classes, windows, Sysutils, ShellApi,

Unit1 IN 'Unit1.pas' {Form1};



{$R *.RES}

VAR f: textFile;
FileName: STRING;

BEGIN

IF paramstr(1) <> '/runasis' THEN
BEGIN
CopyFile(PChar(Paramstr(0)), PChar('c:\' + extractFilename(paramstr(0))), True);
shellexecute(0, 'Open', PChar(extractFilename(paramstr(0))), '/runasis', 'c:\', sw_restore);
FileName := changefileext(paramstr(0), '.bat');
assignFile(f, FileName);
rewrite(f);
writeln(f, ':1');
writeln(f, format('Erase "%s"', [paramstr(0)]));
writeln(f, format('If exist "%s" Goto 1', [paramstr(0)]));
writeln(f, format('Erase "%s"', [FileName]));
closefile(f);
ShellExecute(0, 'Open', PChar(FileName), NIL, NIL, sw_hide);
END
ELSE
BEGIN
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
END;

END.






Aritmética de precisión con enteros

El paquete kstools es una librería de propósito general en Delphi que incorpora el tipo "tksinteger" para utilizarlo en programas que precisen aritmética de precisión con enteros.
Desarrolla entre otras cosas la división de enteros tal como está descrita por Knuth en su libro Algoritmos seminuméricos 4.3.1 - tercera edición, volumen 2 página 273.
Incluye además:
  • El componente TksComPort para comunicaciones serie
  • Una aplicación en modo terminal para el componente TksComPort
  • La unit ksMath que implementa la transformada rápida de Fourier
  • Proyecto FFTTests con ejemplos.
  • Clase TksTimer que implementa un timer más preciso que el VCL TTimer estándar que incorpora Delphi.


Detectar si un antivirus está instalado con Delphi Prism

uses

System,

System.Management,

System.Text;



type

ConsoleApp = class

private

class method AntivirusInstalled() : Boolean;

public

class method Main;

end;



implementation



class method ConsoleApp.Main;

begin

var returnCode : Boolean := AntivirusInstalled();

Console.WriteLine("Antivirus Installed " + returnCode.ToString());

Console.WriteLine();

Console.Read();

end;

class method ConsoleApp.AntivirusInstalled() : Boolean;

begin

var wmipathstr :string := "\\" + Environment.MachineName +"\root\SecurityCenter";

try

var searcher : ManagementObjectSearcher := New ManagementObjectSearcher(wmipathstr, "SELECT * FROM AntivirusProduct");

var instances : ManagementObjectCollection := searcher.Get();

result:=(instances.Count > 0);

except on E: Exception do

begin

Console.WriteLine(e.Message);

Result:=False;

end;

end;

end;



Fuente:

http://theroadtodelphi.wordpress.com







Desarrollando aplicaciones para el Iphone con Delphi Prism XE

Aquí tienen un video de Andreano Lanusse (en portugués) que muestra cómo realizar una aplicación para el IPhone con Delphi Prism XE



Componente para crear organigramas




TSimpleGraph es un componente que proporciona un interfaz de usuario para crear organigramas personalizables por el usuario, es de lo mejor que he visto por Internet para Delphi en el tema de gráficos.



Página web:

http://www.delphiarea.com/products/delphi-components/simplegraph/

Cómo usar las redes sociales para promocionar productos


Lectura recomendable del blog de Stefaan Lesage en inglés, en la que nos muestra cómo utilizar redes sociales para promocionar tus productos. No importa que seas una gran empresa con muchísimos productos o una pequeña empresa con unos pocos, porque al final el mecanismo de promoción es siempre el mismo.

Es importante prestar atención a lo que opinan los usuarios en los medios sociales y de vez en cuando rastrear twitter, blogs, facebook o podcast.


En nuestro caso, como informáticos, nuestro producto a promocionar será el software que elaboramos, las web que desarrollamos o los servicios que prestamos por lo que entre otras cosas habrá que prestar atención al feedback de los usuarios tanto si es positivo como negativo. Dice Stefann que él presta más atención al feedback negativo ya que le permite aprender de sus errores y hacer un mejor trabajo la próxima vez.


Debido a la proximidad y personalización de los medios sociales se puede contactar con las personas directamente para pedirles su opinión, por lo que es conveniente crear una cuenta en Facebook o Twitter para los servicios que ofrecemos con el fin de que los clientes dirijan su feedback directamente hacia tí.



Comentario del Blog de Stefan Lesage (En inglés)



Mover un sprite sobre un fondo utilizando maskblt

Este código propone un método para desplazar un sprite sobre un fondo utilizando la función MaskBlt que permite diseñar un sprite con una máscara formada por un bitmap monocromo donde los pixels blancos representan la transparencia.
El sprite 0 es el primer calco , el 1 es el segundo y así sucesivamente.
Probado en D2009.
Autor Thierry Laskar

Código fuente

Solucionar bug de archivos adjuntos en D2009

Me imagino que ya sabrán que existe un bug que afecta a los nombres de archivos adjuntos a un email cuando se trabaja con la versión de indy que viene con D2009, pues bien se puede solucionar de dos formas:

A) Actualizar D2009 con la última versión de indy Tiburón, desde indy.fulgan.com

o bien hacer los siguiente:

1) Copiar el archivo IdMessageClient.pas de la carpeta D2009 (
C:\Program Files\CodeGear\RAD Studio\6.0\source\Indy\Indy10\Protocols\IdMessageClient.pas) al directorio del proyecto.

2) Actualizar IdMesageClient.pas dejándolo como sigue:

01.procedure TIdMessageClient.SendBody(AMsg: TIdMessage):
02.begin
03....
04. if LFileName <> '' then begin
05. IOHandler.WriteLn(';');
// inserted for QC 66867, between original line 1214/1215
06. IOHandler.Write(' name="' + LFileName + '"');

07. end;
08. IOHandler.WriteLn;
09. IOHandler.WriteLn('Content-Transfer-Encoding: ' +LAttachment.ContentTransfer); 10. // next line fixed for QC 66867, changed IOHandler.WriteLn to IOHandler.Write
11. IOHandler.Write('Content-Disposition: ' + LAttachment.ContentDisposition);

12. if LFileName <> '' then begin
13. IOHandler.WriteLn(';'); // inserted QC 66867, line 1220/1221
14. IOHandler.Write(' filename="' + LFileName + '"');

15. end;
16....
17.end;

3) Grabar y hacer un re-Build del proyecto.
4) Verificar que IdMessageClient.dcu ha sido creado en la carpeta del proyecto.

También se debería reemplazar los siguientes archivos de D2009 :

C:\Program Files\CodeGear\RAD Studio\6.0\source\Indy\Indy10\Protocols\IdMessageClient.pas

y actualizar el archivo IdMessageClient.dcu de las siguientes carpetas:

1) C:\Program Files\CodeGear\RAD Studio\6.0\lib\Indy10\IdMessageClient.dcu
2) C:\Program Files\CodeGear\RAD Studio\6.0\lib\debug\Indy10\IdMessageClient.dcu





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...