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


Codigo fuente en Delphi de un proxy



La biblioteca Synapse incorpora en la carpeta "demo" de su instalación el código fuente de un proxy realizado en Delphi, el cual me ha sorprendido por su estabilidad.
Para que funcione tenemos que configurar nuestro navegador, en el caso de IE8 desde Herramientas->Opciones->Pestaña Conexiones->Botón Configuración LAN-> servidor proxy indicando como dirección: 127.0.0.1 y puerto 3128.

Después iniciaremos la aplicación httproxy de Synapse pulsando el botón "Start" y desde ese momento todas las peticiones del navegador hacia Internet pasarán a través de nuestro proxy quedando registradas en un archivo llamado access.log.

Página web de Synapse:
http://www.ararat.cz/synapse/doku.php/start

Tarjeta controladora y tarjeta de desarrollo



DelphiController y DelphiDevBoard es un controlador de dispositivos y una tarjeta de desarrollo que permiten practicar la programación de sistemas embebidos y microcontroladores. Se proporcionan plantillas, compilador compatible en Pascal y un entorno de depuración y desarrollo basado en un IDE standard. (Delphi, FreePascal)
Más información en www.blaisepascal.eu

Hardware.
M324D40 DelphiCPU
www.blaisepascal.eu
A programmed AtMega324 40 pin dual in line controller chip measuring
50 x 17 x 4 mm. This chip contains all basic computer parts like :
- 32 kBytes Flash memory for program storage
- 2 kByte RAM for variables
- 32 general purpose registers
- 1 kByte of EeRom for non - volatile storage
- a AVR CPU
- a hardware multiplier for fast mathematics
- a clock oscillator able to run up to 20 MHz.
The chip also contains a set of input and output peripherals like :
- JTAG interface for real-time debugging
- 3 timer counters with interrupts for a system clock and delays
- 6 PWM channels which can be used for motor speed and direction
control
- 8 analog to digital converters 10 Bit with 1x, 10x and 200x amplifiers
for interfacing with analog sensors, voltages and potentiometers
- I2C interface for expanding the number of peripherals
- Watchdog timer for automatic reset when a failure is detected
- Analog comparator for accurate level detection
- 32 programmable digital in- and output lines for lamps, switches,
LCD, TCP/IP etc.
4 KByte of the 32 KByte flash is reserverved and
preprogrammed with the:
- OS : an operating system implementing a system clock, starting of
servers and user applications
- BIOS : I/O drivers for EeRom and standard hardware
- Hardware test : standard hardware test application
- M485A server : monitor for RAM and EeRom including a Flash
programmer for user applications
- I/O server : synchronized I/O with RAM records

Author:
Anton J. Vogelaar

Comprobar si un puerto remoto está abierto

uses
Winsock;

function PortTCP_IsOpen(dwPort : Word; ipAddressStr:AnsiString) : boolean;
var
client : sockaddr_in;
sock : Integer;
ret : Integer;
wsdata : WSAData;

begin
Result:=False;
ret := WSAStartup($0002, wsdata); //Inicializa Winsock
if ret<>0 then exit;
try
client.sin_family := AF_INET; //Establece el protocolo a usar en este caso (IPv4)
client.sin_port := htons(dwPort);
client.sin_addr.s_addr := inet_addr(PAnsiChar(ipAddressStr));
sock :=socket(AF_INET, SOCK_STREAM, 0); //crea un socket
Result:=connect(sock,client,SizeOf(client))=0; //Estable conexión con un socket
finally
WSACleanup;
end;
end;

Ejemplo:
if PortTCP_IsOpen(113,'127.0.0.1') then

Funciones para manipular bits

//lee si un bit determinado es igual a 1

function Get_a_Bit(const aValue: Cardinal; const Bit: Byte): Boolean;
begin
Result := (aValue and (1 shl Bit)) <> 0;
end;

//pone un bit determinado a 1

function Set_a_Bit(const aValue: Cardinal; const Bit: Byte): Cardinal;
begin
Result := aValue or (1 shl Bit);
end;

//pone un determinado bit a 0

function Clear_a_Bit(const aValue: Cardinal; const Bit: Byte): Cardinal;
begin
Result := aValue and not (1 shl Bit);
end;

//Activa o desactiva un bit

function Enable_a_Bit(const aValue: Cardinal; const Bit: Byte; const Flag: Boolean): Cardinal;
begin
Result := (aValue or (1 shl Bit)) xor (Integer(not Flag) shl Bit);
end;

Números de Catalan en Delphi

En combinatoria los números de Catalan forman una secuencia de números naturales que aparecen en varios problemas de conteo que habitualmente son recursivos. Obtienen su nombre del matemático belga Eugène Charles Catalan (1814–1894).

El n-ésimo número de Catalan se obtiene, aplicando coeficientes binomiales a partir de la siguiente fórmula:

C_n = \frac{1}{n+1}{2n\choose n} = \frac{(2n)!}{(n+1)!\,n!} \qquad\mbox{ con }n\ge 0.
Existen múltiples problemas de combinatoria cuya solución la dan precisamente estos números.

El código de la función recursiva en Delphi es:

function Catalan(n:integer):real ;
begin
if n=0 then
result :=1 //Condicion de parada
else result:=(2*((2*n)-1))/(n+1)*Catalan (n-1);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin //Calcular el 16 número de catalan p.ej.
showmessage(floattostr(catalan(16)));

end;

Info:
http://www.delphiforfun.org/Programs/Math_Topics/Catalan.htm

Algoritmo de Boyer-Moore-Horspool

El algoritmo de Boyer-Moore-Horspool se utiliza para encontrar eficientemente patrones en una secuencia. Es fácil de implementar y utiliza un preprocesamiento del texto a buscar, compara de derecha a izquierda y realiza la búsqueda del patrón en un tiempo O(MN). siendo M la longitud del texto. Es considerado el mejor algoritmo de búsqueda de un patrón en un texto en aplicaciones usuales.

En caso de una no ocurrencia o una ocurrencia total del patrón se usa una función preprocesada para saltar:

  1. Salto del mal carácter(bad-character shift) (o salto de ocurrencia).

Horspool propuso utilizar solamente el salto del mal carácter para calcular los saltos en el algoritmo de Boyer-Moore.

El salto del mal carácter consiste en:

  1. Alinear cada carácter del alfabeto Σ con la ocurrencia más a la derecha en x[0, …, m-2].
  2. Si el carácter no ocurre en el patrón x, la no ocurrencia de x puede incluir el carácter, y alinearlo en el lado más izquierdo del patrón.
  3. Esta operación (usada en el algoritmo BM) no es muy eficiente para alfabetos pequeños, pero cuando el alfabeto es grande comparado con la longitud del patrón llega a ser muy útil.

Se calcula el preprocesamiento del patrón de la siguiente forma:

  1. Se calcula la distancia mínima entre el último carácter y la ocurrencia de cada carácter del alfabeto de la hilera principal.

Para la búsqueda:

  1. Consiste en la comparación de cada carácter del texto con las posiciones del patrón en el orden m-1, 0, 1, 2, …, y m-2, si se da una ocurrencia del patrón o no.
  2. Cuando se encuentra una no ocurrencia, al hacer la primera comparación entre el patrón y el texto, el salto se calcula bmBc[c], donde c es el carácter del texto.
  3. Cuando se encuentra una no ocurrencia o una ocurrencia total, al hacer las siguientes comparaciones entre el patrón y el texto, el salto se calcula bmBc[c], donde c es el carácter del patrón.

Ref:

UCR –ECCI
CI-2414 Recuperación de Información
Prof. M.Sc. Kryscia Daviana Ramírez Benavides

Implementación en Delphi:

function search(pat: string; text: string): integer;
var
i, j, k, m, n: integer;
skip: array [0..MAXCHAR] of integer;
found: boolean;
begin
found := FALSE;
search := 0;
m := length(pat);
if m=0 then
begin
search := 1;
found := TRUE;
end;
for k:=0 to MAXCHAR do
skip[k] := m; {*** Preprocessing ***}
for k:=1 to m-1 do
skip[ord(pat[k])] := m-k;
k := m;
n := length(text); {*** Search ***}
while not found and (k <= n) do begin i := k; j := m; while (j >= 1) do
begin
if text[i] <> pat[j] then
j := -1
else
begin
j := j-1;
i := i-1;
end;
if j = 0 then
begin
search := i+1;
found := TRUE;
end;
k := k + skip[ord(text[k])];
end;
end;
end;


Si queremos una medida, en millonésimas de segundo, del tiempo consumido por un algoritmo, podemos utilizar lo siguiente:

const   UnMillon = 1000000;
var Frecuencia, X, Y: Int64;
begin
QueryPerformanceFrequency(Frecuencia);
QueryPerformanceCounter(X);
Algoritmo;
QueryPerformanceCounter(Y);
ShowMessage(FormatFloat('0,', (Y - X) * UnMillon div Frecuencia));
end;

Capacidades Touch and Gesture

El nuevo RAD Studio 2010 incorpora las capacidades "Touch and Gesture " permitiendo que las aplicaciones puedan ser totalmente independientes del teclado, como puede ser en el caso de una aplicación que se ejecute en modo kiosko, ya que incorpora un componente llamado TTouchKeyboard que simula un teclado en pantalla, para utilizar en pantallas táctiles.

Video-Tutorial de Andreano Lanusse en español donde explica detalladamente estas capacidades.
http://cc.embarcadero.com/Item/27622

Comentario en DrBob:
http://www.drbob42.com/examines/examinB6.htm

Código fuente con ejemplos para Delphi 2010




Google Static Map con Delphi



El servicio Google Static Map permite obtener una imagen estática de una localización sin requerir Javascript y sin cargar ninguna página web. Este servicio crea un mapa basado en los parámetros de la URL enviados desde una petición HTTP estándar.

Lo único que necesitamos es un componente TidHttp y un Timage.

Primeramente necesitamos poner la propiedad UserAgent de TidHttp p.ej: Mozilla/3.0, después se necesita construir la url con los parámetros correctos como puede ser lo siguiente:
http://maps.google.com/maps/api/staticmap?center=40.714728,-73.998672&zoom=12&size=400x400&sensor=false
Ahora utilizando el componente TidHttp enviamos la Url anterior y obtenemos la imagen del mapa.

var
StreamData :TMemoryStream;
JPEGImage : TJPEGImage;
begin
EditURL.Text:=buildUrl; //Construye la url con los parámetros
StreamData := TMemoryStream.Create;
JPEGImage := TJPEGImage.Create;
try
try
idhttp1.Get(EditURL.Text, StreamData); /Envía la petición y obtiene la imagen
StreamData.Seek(0,soFromBeginning);
JPEGImage.LoadFromStream(StreamData);//carga la imagen en el stream
ImageMap.Picture.Assign(JPEGImage);//Asigna la imagen al objeto ImageMap
Except On E : Exception Do
MessageDlg('Exception: '+E.Message,mtError, [mbOK], 0);
End;
finally
StreamData.free;
JPEGImage.Free;
end;
end;

Código fuente

Guía para desarrolladores de Google Static Map
http://code.google.com/intl/es-US/apis/maps/documentation/staticmaps/

Link relacionados:
Ver mapas de Google dando sus coordenadas
Utilizar Google Maps en Delphi




Programar add-in con Delphi para MS Outlook


Aquí tienen unos videos-tutoriales en inglés que enseñan a programar un complemento (add-in) para el programa MS Outlook con Delphi.
Para ello es necesario importar el componente Microsoft Add-in Designer desde el menú Component->Import Component. En la explicación muestra cómo utilizar los objetos ActiveX y los cambios que hay que hacer en el regedit.

Parte 1:
http://www.giesen-edv.com/~ogiesen/demos/Part1a.html

Parte 2:
http://www.giesen-edv.com/~ogiesen/demos/Part2.html


Descripción de los formatos de archivos

¿No han sentido curiosidad por saber cómo es el formato interno de un archivo doc , xls, pdf, wav, bmp, jpg, psd, etc.? pues en el siguiente link tienen la información que buscan, en algunos casos remiten a una página web y en otras a un documento de texto que contiene una descripción detallada de la estructura del fichero.
En algunos casos como excel, photoshop, word, postscript también describe el formato de archivo de antiguas versiones.
Es un link que deberían guardar en su carpeta de favoritos.

http://www.wotsit.org

Búsqueda de partners

El siguiente link nos ofrece un listado de partners tecnológicos de Embarcadero y que por tanto han desarrollado productos para Delphi, Delphi Prism, JBuilder, etc., podemos buscar por versión, plataforma, países, tipo de producto.
Ofrecen una descripción detallada del tipo de empresa que es, a qué se dedican, qué desarrollan y dan información del componente que han programado que es lo que nos interesa.


http://tp.embarcadero.com/partnercentral.exe/default


Detección de colisiones 2D


El componente TRSCollisionMap implementa las clases necesarias para la detección de colisiones en objetos 2D, así que si se animan a programar un juego aquí tienen parte del trabajo hecho.
Por lo que he visto en la documentación es útil en el caso de que no existan muchos objetos moviéndose en pantalla.

Código fuente y ejecutable:
http://www.riversoftavg.com/Files/RSCollisionDetection.zip


Relacionados:

Modelado 3D con Delphi 

Rotar un punto en 3D


Angulo creado por 3 segmentos en 3D


Chipmunk 2D physics engine

Integrar GoogleEarth en una aplicación Delphi


En esta web indican cómo integrar GoogleEarth en una aplicación realizada con Delphi. De antemano advierto que no es sencillo, es necesario seguir paso a paso cada uno de los 5 apartados en que se divide la explicación, lo bueno que tiene es que dan el código fuente.
Para que funcione hay que instalar el plugin de GoogleEarth, en caso de que no tenerlo, al iniciar la aplicación te muestra una pantalla desde la que se puede descargar.
Probado en Delphi 7.

Explicación (en inglés):
http://www.delphidabbler.com/articles?article=26&part=1

Código fuente:
http://www.delphidabbler.com/download?id=art-26


Relacionados:
Ver mapa de Google maps dando sus coordenadas

Calcular el pagerank con delphi


Buscar en Google con delphi