Ir al contenido



Foto

¿Cómo asignar el fondo de escritorio desde Delphi?


  • Por favor identifícate para responder
No hay respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.408 mensajes
  • LocationRepública Dominicana

Escrito 19 noviembre 2008 - 12:34

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:


delphi
  1.     uses
  2.       Registry, WinProcs, SysUtils;
  3.  
  4.     const
  5.       // WallPaperStyles
  6.       WPS_Tile      = 0;
  7.       WPS_Center    = 1;
  8.       WPS_SizeToFit = 2;
  9.       WPS_XY        = 3;
  10.  
  11.     //
  12.     // sWallpaperBMPPath
  13.     //   - Ruta de la imagen
  14.     //
  15.     // nStyle
  16.     //   - cualquiera de WallPaperStyles
  17.     //
  18.     // nX, nY
  19.     //   - son los nStyle establecidos en WPS_XY,
  20.     //     nX y nY pueden ser usados para establecer
  21.     //     la posición exacta del papel tapiz
  22.     //
  23.     procedure Asignarfondo(
  24.       sWallpaperBMPPath : string;
  25.       nStyle,
  26.       nX, nY : integer );
  27.     var
  28.       reg    : TRegIniFile;
  29.       s1     : string;
  30.       X, Y   : integer;
  31.     begin
  32.       //
  33.       // cambiar registro
  34.       //
  35.       // HKEY_CURRENT_USER\
  36.       //   Control Panel\Desktop
  37.       //     TileWallpaper (REG_SZ)
  38.       //     Wallpaper (REG_SZ)
  39.       //     WallpaperStyle (REG_SZ)
  40.       //     WallpaperOriginX (REG_SZ)
  41.       //     WallpaperOriginY (REG_SZ)
  42.       //
  43.       reg := TRegIniFile.Create(
  44.                'Control Panel\Desktop' );
  45.  
  46.       with reg do
  47.       begin
  48.         s1 := '0';
  49.         X  := 0;
  50.         Y  := 0;
  51.  
  52.         case nStyle of
  53.           WPS_Tile  : s1 := '1';
  54.           WPS_Center: nStyle := WPS_Tile;
  55.           WPS_XY    :
  56.           begin
  57.             nStyle := WPS_Tile;
  58.             X := nX;
  59.             Y := nY;
  60.           end;
  61.         end;
  62.  
  63.         WriteString( '',
  64.           'Wallpaper',
  65.           sWallpaperBMPPath );
  66.  
  67.         WriteString( '',
  68.           'TileWallpaper',
  69.           s1 );
  70.  
  71.         WriteString( '',
  72.           'WallpaperStyle',
  73.           IntToStr( nStyle ) );
  74.  
  75.         WriteString( '',
  76.           'WallpaperOriginX',
  77.           IntToStr( X ) );
  78.  
  79.         WriteString( '',
  80.           'WallpaperOriginY',
  81.           IntToStr( Y ) );
  82.       end;
  83.       reg.Free;
  84.  
  85.       //
  86.       // deje que todos sepan que hemos cambiado
  87.       // un sistema de parámetros
  88.       //
  89.       SystemParametersInfo(
  90.         SPI_SETDESKWALLPAPER,
  91.         0,
  92.         Nil,
  93.         SPIF_SENDWININICHANGE );
  94.     end;



Hay dos formas de llamar esa función:

 

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





delphi
  1. // establecer el origen del papel
  2.   // a (10, 200)
  3.   Asignarfondo(
  4.     'c:\winnt\winnt.bmp',
  5.     WPS_XY, 10, 200 );



Alguna duda y/o pregunta sobre este truco puedes abrir un hilo en el foro adecuado.

Saludos.
  • 0