Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

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
  #7  
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
Cita:
Empezado por dec Ver Mensaje
Hola,

En el apartado de trucos, más concretamente en Insertar nuevo truco.
ok, creo que ya lo registre como un truco
Responder Con Cita
  #8  
Antiguo 24-10-2007
fide fide is offline
Miembro
 
Registrado: oct 2006
Posts: 331
Poder: 18
fide Va por buen camino
Color Desk

Oyeme ese truco es una maravilla por que no cree ni en las restricciones de fondo que se le aplican a XP con el Active Directory. Lo unico malo es que es un poquito lento. Pero que se va a hacer. Si asi resuelve el problema jejeje...
Responder Con Cita
  #9  
Antiguo 24-10-2007
fide fide is offline
Miembro
 
Registrado: oct 2006
Posts: 331
Poder: 18
fide Va por buen camino
Lightbulb Cambiar la imagen del desktop

Bueno. Aqui una sencilla modificacion del truco anterior, pero no para cambiar el color de fondo. Sino la imagen de fondo pero con ADSI. Esto cambia el fondo del escritorio aunque este restringida esta opcion por el admin de red jejejeje.

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

procedure SetDesktopBackgroundImage(vBmpPath: String);
var
  shDesk: IActiveDesktop;
  vWallPOp: TWallPaperOpt;
begin

 try
  shDesk := (CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop);
  shDesk.SetWallpaper(StringToOleStr(vBmpPath), 0);
  vWallPOp.dwSize := Sizeof(TWallPaperOpt);
  vWallPOp.dwStyle := WPSTYLE_TILE;
  shDesk.SetWallpaperOptions(vWallPOp, 0);
  shDesk.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
 finally
  FreeObjectInstance(Pointer(shDesk));
 end;

end;

Aqui un ejemplo de uso...

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin

  SetDesktopBackgroundImage(ExtractFilePath(Application.ExeName) + 'bmp.bmp');

end;

Última edición por fide fecha: 24-10-2007 a las 15:41:34.
Responder Con Cita
  #10  
Antiguo 24-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
mi querido Fide, antes de publicar codigos en el club, por favor, haz una busqueda por el Club para ver si no existe ya esto mismo, esto que acabas de publicar esta escrito aqui mismo, la razon por la que es un poco lento es en parte debido al tamaÑo del bitmap que se crea, pero solo es una pequeÑa parte, la otra es problema del SO y la PC,

otra cosa, eso funciona?
no creen?

suerte!

Última edición por aeff fecha: 24-10-2007 a las 21:15:08.
Responder Con Cita
  #11  
Antiguo 24-10-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por aeff
...antes de publicar codigos en el club, por favor, haz una busqueda por el Club para ver si no existe ya esto mismo, esto que acabas de publicar esta escrito aqui mismo...
Bueno en mi humilde opinion no es un crimen redundar; la telaraña es un compendio de repeticiones y el Club tambien cae en ello, vi que fide no realizó una "publicación" y tambien creo que realizar una búsqueda para realizar cualquier post en el Club lo convertiría en un tedioso GoogleClubDelphi o algo así...

Tampoco creo que sea lo mismo lo de éste hilo, SetWallpaperOptions es un método no analizado en tal hilo, y tampoco ví la liberación del objeto.

Cita:
Empezado por aeff
...otra cosa, eso funciona?
no creen?
Seguramente la respuesta nos la dará el mismo Delphi.

Saludos
Responder Con Cita
  #12  
Antiguo 25-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
hmmmm, ok! de acuerdo contigo *cHackAll*, si funciona el truco!
Responder Con Cita
  #13  
Antiguo 27-10-2007
fide fide is offline
Miembro
 
Registrado: oct 2006
Posts: 331
Poder: 18
fide Va por buen camino
Exclamation Cierto!

Okas, aunque no creo que lo que publique aqui esta replicado cuando balla a postear algo debes en cuando mirare a ver si no esta duplicado.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 17:52:15.


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