Cómo enviar E-mail con el cliente de correo electrónico por defecto desde Delphi

¿Cómo puedo enviar un E-Mail desde Delphi usando el cliente de correo electrónico por defecto instalado en tu pc (Outlook por ejemplo) si no tengo un navegador instalado?, pues es muy sencillo, utilizando un TMemo generamos el siguiente código:

uses
  ShellAPI, Windows;
...
ShellExecute(0, 'open', PChar('mailto:bugreports@youremail.com?subject=
Bug%20Report&Body=' + MemoBugText.Text),
  nil, nil, SW_SHOWNORMAL);

Saludos.

Calculando el Signo Zodiacal desde Delphi

Hola amigos, en esta entrada les voy a tratar acerca de una función que encontré en la red cuya objetivo es determinar a cual signo zodiacal pertenece determinada fecha, la función se llama «ZodiacSign» :

function ZodiacSign(const dateOfBirth: TDate): string;
type
TZodiacSign = record
Name : string;
Day : integer;
end;

const
ZodiacSigns : array[1..12] of TZodiacSign =
(
(Name : ‘Acuario’; Day : 50), // Termina el 02/19
(Name : ‘Piscis’; Day : 79), // Termina el 03/20
(Name : ‘Aries’; Day : 110), // Termina el 04/20
(Name : ‘Tauro’; Day : 131), // Termina el 05/21
(Name : ‘Gemini’; Day : 172), // Termina el 06/21
(Name : ‘Cancer’; Day : 203), // Termina el 07/22
(Name : ‘Leo’; Day : 233), // Termina el 08/21
(Name : ‘Virgo’; Day : 266), // Termina el 09/23
(Name : ‘Libra’; Day : 296), // Termina el 10/23
(Name : ‘Scorpio’; Day : 326), // Termina el 11/22
(Name : ‘Sagittarios’; Day : 357), // Termina el 12/22
(Name : ‘Capricornio’; Day : 385) // Termina el 01/20
) ;
var
d : word;
idx : integer;
begin
d := DayOfTheYear(dateOfBirth) ;

if (d > 59) AND IsLeapYear(YearOf(dateOfBirth)) then Inc(d) ;
if (d < 21) then d := d + DaysInYear(dateOfBirth) ;

for idx := 1 to 12 do
begin
if d <= ZodiacSigns[idx].Day then
begin
result := ZodiacSigns[idx].Name;
exit;
end;
end;
end; (*ZodiacSign*)

A continuación pongo un ejemplo de como se usa:

var
dob : TDateTime;
begin
dob := EncodeDate(1973, 1, 29) ;

//Debe retornar Acuario
ShowMessage(ZodiacSign(dob)) ;
end;

Espero la disfruten,

Saludos 😉

Tutorial creación de Webservices con Delphi

Aquí os dejo un  excelentissimo tutorial sobre la creación de un webservice con Delphi realizado por Eliseo González (Egostar) miembro de DelphiAccess, para verlo sólo tienes que visitar al siguiente link de su blog:

http://www.delphiaccess.com/forum/index.php?topic=210.0

Saludos.

Asignar fondo de escritorio desde Delphi

Este truco sólo sirve para windows XP, aquí enseñaré cómo asignar el fondo de escritorio de tu windows desde tu aplicativo, vamos a crear un procedimiento llamada «Asignarfondo()», con ella tendremos la capacidad de establecer la posición exacta del papel tapiz y la capacidad de cambiar el tamaño de la imagen de fondo para la pantalla, a continuación el código:

uses
  Registry, WinProcs, SysUtils;

const
  // WallPaperStyles
  WPS_Tile      = 0;
  WPS_Center    = 1;
  WPS_SizeToFit = 2;
  WPS_XY        = 3;

//
// sWallpaperBMPPath
//   - Ruta de la imagen
//
// nStyle
//   - cualquiera de WallPaperStyles
//
// nX, nY
//   - son los nStyle establecidos en WPS_XY,
//     nX y nY pueden ser usados para establecer
//     la posición exacta del papel tapiz
//
procedure Asignarfondo(
  sWallpaperBMPPath : string;
  nStyle,
  nX, nY : integer );
var
  reg    : TRegIniFile;
  s1     : string;
  X, Y   : integer;
begin
  //
  // cambiar registro
  //
  // HKEY_CURRENT_USER\
  //   Control Panel\Desktop
  //     TileWallpaper (REG_SZ)
  //     Wallpaper (REG_SZ)
  //     WallpaperStyle (REG_SZ)
  //     WallpaperOriginX (REG_SZ)
  //     WallpaperOriginY (REG_SZ)
  //
  reg := TRegIniFile.Create(
           'Control Panel\Desktop' );

  with reg do
  begin
    s1 := '0';
    X  := 0;
    Y  := 0;

    case nStyle of
      WPS_Tile  : s1 := '1';
      WPS_Center: nStyle := WPS_Tile;
      WPS_XY    :
      begin
        nStyle := WPS_Tile;
        X := nX;
        Y := nY;
      end;
    end;

    WriteString( '',
      'Wallpaper',
      sWallpaperBMPPath );

    WriteString( '',
      'TileWallpaper',
      s1 );

    WriteString( '',
      'WallpaperStyle',
      IntToStr( nStyle ) );

    WriteString( '',
      'WallpaperOriginX',
      IntToStr( X ) );

    WriteString( '',
      'WallpaperOriginY',
      IntToStr( Y ) );
  end;
  reg.Free;

  //
  // deje que todos sepan que hemos cambiado
  // un sistema de parámetros
  //
  SystemParametersInfo(
    SPI_SETDESKWALLPAPER,
    0,
    Nil,
    SPIF_SENDWININICHANGE );
end;

Hay dos formas de llamar esa función:

  // establecer el fondo a winnt.bmp y
  // el tramo para que se adapte a la pantalla
  Asignarfondo(
    'c:\winnt\winnt.bmp',
    WPS_SizeToFit, 0, 0 );

  // establecer el origen del papel
  // a (10, 200)
  Asignarfondo(
    'c:\winnt\winnt.bmp',
    WPS_XY, 10, 200 ); 


Hasta ahora sólo he podido hacer funcionar con archivos .BMP, cualquier ayuda le será agradecido. Espero que la puedan disfrutar 😉

Saludos.

Link relacionados:

http://www.delphiaccess.com/forum/index.php?topic=101.0;topicseen