Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-10-2007
madiazg madiazg is offline
Miembro
 
Registrado: sep 2005
Ubicación: Canarias
Posts: 120
Poder: 19
madiazg Va por buen camino
Color de fondo de pantalla

Hola, estoy intentando establecer el color del fondo de pantalla. He localizado el registro de Windows donde se almacena este valor y puedo modificarlo.
Código:
procedure TForm1.Button2Click(Sender: TObject);
resourcestring
  rsClaveRegistro = 'Control Panel\Colors\';
  rsBackground = 'Background';
begin
  with TRegistry.Create() do
  try
    RootKey := HKEY_CURRENT_USER;
    OpenKey(rsClaveRegistro,false);
        WriteString(rsBackground, '0 0 0');
  finally
    Free();
  end;
end;
El problema es que, aunque cambie el valor del registro, este cambio no surte efecto.
¿Cómo hacer que el cambio del registro produzca el efecto deseado?
¿Hay alguna otra forma de cambiar el color de fondo del escritorio?
Gracias y saludos...
Miguel Angel
Responder Con Cita
  #2  
Antiguo 14-10-2007
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
saludos, no encuentro por ningún lado a mi alrededor la manera de aplicar los cambios realizado a Desktop de la forma que quieres, te propongo una solución:

implementa esto en la unit:

Código Delphi [-]
...
  uses ShlObj, ActiveX, ComObj, Registry;
...

procedure SetDesktopBackground(Color: TColor);
var
  tmpFile: array[0..MAX_PATH] of Char;
  rValue, gValue, bValue, fName: string;
  Bmp: TBitmap;
  Reg: TRegistry;
  shDesk: IActiveDesktop;
  vWallPOp: TWallPaperOpt;
begin
  //
  GetEnvironmentVariable('TEMP', tmpFile, MAX_PATH);
  fName :=  string (tmpFile) + '\dbg.bmp';
  //
  rValue := IntToStr(GetRValue(Color));
  gValue := IntToStr(GetGValue(Color));
  bValue := IntToStr(GetBValue(Color));
  Bmp := TBitmap.Create;
  Bmp.Width := 1;
  Bmp.Height := 1;
  Bmp.Canvas.Pixels[0,0] := Color;
  Bmp.SaveToFile(fName);
  Bmp.Free;
  //
  Reg := TRegistry.Create;
  Reg.OpenKey('\Control Panel\Colors\', false);
  Reg.WriteString('Background',rValue + ' ' + gValue + ' ' + bValue);
  Reg.Free;
  //
  shDesk := (CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop);
  shDesk.SetWallpaper(StringToOleStr(fName), 0);
  vWallPOp.dwSize := Sizeof(TWallPaperOpt);
  vWallPOp.dwStyle := WPSTYLE_TILE;
  shDesk.SetWallpaperOptions(vWallPOp, 0);
  shDesk.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
  shDesk.SetWallpaper('', 0);
  DeleteFile(fName);
  //
  FreeObjectInstance(Pointer(shDesk));
end;

ahora un ejemplo de uso, en el evento onClick de un button pon esto:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  SetDesktopBackground(RGB(40, 110, 112));
end;

bueno, esto es un invento bruto pero al menos simula lo que quieres,

espero que te funcione y te sirva de algo

saludos

aeff!!
Responder Con Cita
  #3  
Antiguo 14-10-2007
madiazg madiazg is offline
Miembro
 
Registrado: sep 2005
Ubicación: Canarias
Posts: 120
Poder: 19
madiazg Va por buen camino
Muy bien pensado y funciona perfectamente.
No se me hubiera ocurrido simular de esta forma el fondo negro del escritorio.
Muchas gracias y saludos...
Miguel Angel
Responder Con Cita
  #4  
Antiguo 14-10-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Un buen truco. Podrías publicarlo como tal en la sección correspondiente. Yo también le estuve dando algunas vueltas a este tema y no llegué a sitio alguno, y no se me hubiera ocurrido cambiar el color de fondo de la pantalla colocando como papel tapiz una imagen de dicho color. Muy bueno.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 14-10-2007
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
hola dec, ¿como se publican los trucos? y gracias

[madiazg], ok!

saludos
Responder Con Cita
  #6  
Antiguo 14-10-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

En el apartado de trucos, más concretamente en Insertar nuevo truco.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Color de fondo de un ShowMessage() Perio Varios 4 05-02-2008 16:08:35
Color de fondo de Bitmap arantzal Varios 1 15-01-2007 11:32:42
Color de fondo de un TImage Drake OOP 1 03-08-2006 19:36:36
problema al cambiar fondo de pantalla JaMFrY Varios 5 14-06-2004 16:29:59
Fondo de pantalla hackgenius Varios 14 08-05-2003 20:59:53


La franja horaria es GMT +2. Ahora son las 19:04:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi