▻★★★ 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 )
Desarrollando aplicaciones 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
Probado en D2009.
Autor Thierry Laskar
Código fuente
Solucionar bug de archivos adjuntos en D2009
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.begin03.... 04. if LFileName <> '' then begin05. 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 begin13. 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 :
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
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.
http://www.ararat.cz/synapse/doku.php/start
Tarjeta controladora y tarjeta de desarrollo
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
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
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
El n-ésimo número de Catalan se obtiene, aplicando coeficientes binomiales a partir de la siguiente fórmula:
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
En caso de una no ocurrencia o una ocurrencia total del patrón se usa una función preprocesada para saltar:
- 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:
- Alinear cada carácter del alfabeto Σ con la ocurrencia más a la derecha en x[0, …, m-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.
- 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:
- 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:
- 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.
- 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.
- 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.
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
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=falseAhora 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/
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
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
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
Funciones matemáticas, estadísticas, XML en Delphi
Navegando por Internet me encontré con está página que contiene una extensa cantidad de utilísimas funciones:
Están agrupadas en units: cUtils.pas, cMaths.pas, cMaths3D.pas, cStrings.pas, cXMLparser.pas,
cUnicode.pas, cStreams.pas, cUnixUtils.pas, cXMLFunctions.pas, cStatistics.pas, cComplex.pas, cMatrix.pas, cVectors.pas
¡ Cuánto tiempo he perdido programando cosas parecidas sin darme cuenta que alguien altruistamente las ponía a disposición de todos !
Referencia:
http://www.eternallines.com
Última versión:
http://fundementals.sourceforge.net/dl.html
Sourceforge page:
http://sourceforge.net/projects/fundementals/
E-mail:
fundamentals@eternallines.com
david@e.co.za
LIBROS:
Matemáticas, el fascinante mundo de los números
Matrix computations (Matematical Science)
Geometría analítica del plano y del espacio
Mecánica de fluidos
Geometría Afín y Euclidea
Computación distribuida en Delphi
Para los interesados en computación distribuida aquí tienen un interesante artículo que muestra cómo utilizar la librería open-source hxGrid paso a paso.
En resumen lo que hace es:
Inicialmente cada uno de los equipos "Agente" envía paquetes de broadcast para localizar al equipo "Coordinador" y cuando lo encuentra le envía su status periódicamente (porcentaje de CPU libre, RAM libre, número de tareas en cola)
Para comenzar a usar el grid la aplicación inicializa la librería hxGrid, después conecta con un coordinador solicitando la lista de los agentes para conectarse a ellos. Desde ese momento el equipo está preparado para ejecutar tareas remotas, además solicita continuamente la lista de nuevos agentes que podrían unirse a la sesión activa.
La aplicación grid añade tareas a la cola de ejecución, dichas tareas son enviadas continuamente a los agentes en background. Si la conexión con algún agente se ha perdido, la equipo es capaz de reasignar tareas a otro agente.
Página web:
http://www.codeproject.com/KB/threads/hxgrid.aspx
ClubDelphi
http://www.clubdelphi.com/foros/showthread.php?t=69899
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...
-
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...
-
Para trabajar con archivos pdf dentro de tu aplicación Delphi tienen que seguir los siguientes pasos: 1) Asegurarte que tienes la última ver...