PDA

Ver la Versión Completa : Como Cambiar El Papel Tapiz De Windows


dagsoft
06-11-2004, 13:34:00
Holas, Espero que me puedan ayudar programo en delphi 6 me aria falta saves como cambiar el fondo de pantalla(wallpaper o paperl tapiz) de windows, yo lo hago con SystemParametersInfo(SPI_SETDESKWALLPAPER,0,PChar('direccion'),SPIF_UPDATEINIFILE); //en direccion va la direccion de donde se encuantra la imagen por ejemplo: C:\dagsoft.bmp, pero mi problema es el siguiente: " Este codigo es solamente para establecer como wallpaper archivos .Bmp y me hace falta poner un jpg

Si alguien sabe como poner con delphi como fondo de pantalla un archivo *.jpg o *.gif que me diga please


Saludos DG http://www.jl-picard.com.ar/foros/style_emoticons/caritas/crazy.gif

jhonny
06-11-2004, 17:33:29
Realmente tiene que ser mas sencillo que esto, pero he tratado de ser algo recursivo con el asunto...:D , convirtiendo de Jpg a Bmp y luego cambiando el papel tapiz.

Sacando los dos trucos del trucomania :D

Primero hay que añadir Jpeg a tu unidad.


procedure convertir;
var
MyJPEG : TJPEGImage;
MyBMP : TBitmap;
begin
MyJPEG := TJPEGImage.Create;
with MyJPEG do
begin
LoadFromFile('C:\logo.JPG');//logo es la imagen JPG
MyBMP := TBitmap.Create;
with MyBMP do
begin
Width := MyJPEG.Width;
Height := MyJPEG.Height;
Canvas.Draw(0,0,MyJPEG);
SaveToFile('C:\logo.bmp');//La imagen a guardar.
Free;
end;
Free;
end;
end;

Y...


procedure cambiartapiz;
begin
convertir;
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,PChar('C:\logo.bmp'),SPIF_UPDATEINIFILE);
end;



es un ejemplo...Espero te sirva de algo.

dagsoft
06-11-2004, 20:57:05
Muchas Gracias, Esto me va a servir temporalmente :( porque cuando vos pasas un *.png, *.gif o *.jpg se pierde toda calidad, aparte si pasas de un gif a un *.bmp perdes los movimientos.

Entendes?=
Espero que me entindas
Saludos Daniel
Muchas Gracias

jhonny
06-11-2004, 21:21:21
Entendes?=
Espero que me entindas

Si claro que entiendo lo que te sucede sobre todo con lo de los *.gif, lo que no entiendo es, ¿no se supone que el formato de BMP es de mas calidad que el de jpg, debido a que se maneja pixel por pixel?...// Es que regularmente cuando convierto una imagen Gif o Jpg o Png a BMP no pasa nada malo(En cuanto a lo de calidad de imagen se trata), pero si hago lo contrario si se daña la calidad un poco.

dagsoft
08-11-2004, 01:29:26
:D :p :) :cool: sip tenes razón!!!!

gracias pero tengo problema con el codigo que me mandaste me marca error en

MyJPEG : TJPEGImage;
MyBMP : TBitmap;
me dice
[Error] Unit1.pas(178): Undeclared identifier: 'TJPEGImage'
[Error] Unit1.pas(181): Missing operator or semicolon
y en esta parte no puedo poner asi
LoadFromFile(edit1.Text + ListBox1.Items.Strings);//logo es la imagen JPG

ya que:
[list]
en el edit1: se encuentra la direccion
y en la lista(en el item de la lista encuentro el nombre)
Gracias de nuevo

Saludos DG
Espero que me puedan ayudar

jhonny
08-11-2004, 16:50:54
[Error] Unit1.pas(178): Undeclared identifier: 'TJPEGImage'
Bueno, el error es porque no haz agregado la unidad Jpeg a la unidad donde estas poniendo dicho codigo.

dagsoft
09-11-2004, 01:06:09
:( :( :( :( :( :( :( sip lo declare

saludos dg

jhonny
09-11-2004, 16:16:38
Ahhh, ya se que sucede... eso espero.

Lo que sucede es que yo utilice como ejemplo un procedimiento llamado Convertir porque no sabia donde lo pondrias, ahora me imagino que el lo habras puesto en un formulario y en ese caso el cuerpo del procedimiento seria asi:

procedure TForm1.Convertir;//Form1 es el nombre del formulario
begin
//El resto que ya te he dicho con anterioridad...
end;

Seguramente esto si es :D

jhonny
09-11-2004, 16:20:09
Ahhh, se me olvidaba, supongo que lo mismo sucedera con el procedimiento cambiartapiz;

dagsoft
09-11-2004, 21:05:36
Holas de new gracias por segir respondiendo el problema es que recien me inicio en delphi 6 :( no se casi nada :( mira este es el codigo de todo el programa y ahora me marca este error
[Error] Unit1.pas(175): Undeclared identifier: 'Convertir'
[Error] Unit1.pas(177): Undeclared identifier: 'TJPEGImage'

espero que me puedas ayudar si encontras algun error al codigo o algo que se puede hacer de otra forma que sea mejor porfavor ayudame y decime

Saludos Daniel. Desde ya mucha gracias :cool::cool: :cool::cool:
si queres agregame a tu msn mi dire es: daniel_gerbaudo@hotmail.com



---------------------Codigo del programa completo-------------------------

unit Unit1;
interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,
IniFiles, ThemeMgr, ComCtrls, ExtCtrls, DateUtils, JvSearchFiles,
JvComponent, JvBaseDlg, JvBrowseFolder;

type
TForm1 = class(TForm)
JvBrowseForFolderDialog1: TJvBrowseForFolderDialog;
JvSearchFiles1: TJvSearchFiles;
ThemeManager1: TThemeManager;
GroupBox1: TGroupBox;
Edit1: TEdit;
Button1: TButton;
GroupBox2: TGroupBox;
ListBox1: TListBox;
GroupBox3: TGroupBox;
Edit2: TEdit;
UpDown1: TUpDown;
ComboBox1: TComboBox;
CheckBox1: TCheckBox;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure CheckBox1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure JvSearchFiles1FindFile(Sender: TObject; const AName: String);
private
{ Private declarations }
procedure CambiarFondo;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
inifile: TIniFile;
stemp: string;
begin
inifile := TIniFile.Create( ChangeFileExt(Application.ExeName,'.ini') );
try
stemp := inifile.ReadString('preferences','dir','');

if (stemp <> '') then
begin
Edit1.Text := stemp;
JvBrowseForFolderDialog1.Directory := stemp;
end;

ListBox1.ItemIndex := inifile.ReadInteger('preferences','idx',-1);

finally
inifile.Free;
end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
inifile: TIniFile;
begin
inifile := TIniFile.Create( ChangeFileExt(Application.ExeName,'.ini') );
try
inifile.WriteString('preferences','dir',Edit1.Text);



if (ListBox1.ItemIndex <> -1) then
begin
inifile.WriteInteger('preferences','idx',ListBox1.ItemIndex);
end;
finally
inifile.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if (JvBrowseForFolderDialog1.Execute) then
begin
Edit1.Text := JvBrowseForFolderDialog1.Directory;
end;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
if (DirectoryExists(Edit1.Text)) then
begin
ListBox1.Items.BeginUpdate;

ListBox1.Items.Clear;

JvSearchFiles1.RootDirectory := Edit1.Text;

JvSearchFiles1.Search;

ListBox1.Items.EndUpdate;
end
else
ListBox1.Items.Clear;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
Edit2.Enabled := CheckBox1.Checked;
UpDown1.Enabled := CheckBox1.Checked;
ComboBox1.Enabled := CheckBox1.Checked;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
dt1, dt2: TDateTime;
begin

dt1 := StrToDateTime('25/10/2004 03:30:00 p.m.'); //buscar última fecha de cambio
dt2 := Now;

case ComboBox1.ItemIndex of
0: //si está puesto por horas...
begin
if (DateUtils.HoursBetween(dt2,dt1) >= StrToInt(Edit2.Text)) then //comparar horas
begin
CambiarFondo;
end;
end;
1: //si está puesto por días...
begin
if (DateUtils.DaysBetween(dt1,dt2) >= StrToInt(Edit2.Text)) then
begin
CambiarFondo;
end;
end;
2: //si está puesto por semanas...
begin
if (DateUtils.WeeksBetween(dt1,dt2) >= StrToInt(Edit2.Text)) then
begin
CambiarFondo;
end;
end;
3: //si está puesto por meses...
begin
if (DateUtils.MonthsBetween(dt1,dt2) >= StrToInt(Edit2.Text)) then
begin
CambiarFondo;
end;
end;
end;

end;

procedure TForm1.CambiarFondo;
begin

SystemParametersInfo(SPI_SETDESKWALLPAPER,0,PChar('C:\logo.bmp'),SPIF_UPDATEINIFILE);

end;

procedure TForm1.JvSearchFiles1FindFile(Sender: TObject;
const AName: String);
begin
ListBox1.Items.Add( ExtractFileName(AName) );
end;

procedure TForm1.Convertir;//Form1 es el nombre del formulario
var
MyJPEG : TJPEGImage;
MyBMP : TBitmap;
begin
MyJPEG := TJPEGImage.Create;
with MyJPEG do
begin
LoadFromFile( edit1.text + ListBox1.items.strings[ListBox1.Itemindex]);//logo es la imagen JPG
MyBMP := TBitmap.Create;
with MyBMP do
begin
Width := MyJPEG.Width;
Height := MyJPEG.Height;
Canvas.Draw(0,0,MyJPEG);
SaveToFile('C:\logo.bmp');//La imagen a guardar.
Free;
end;
Free;
end;
end;

end.

jhonny
09-11-2004, 22:22:06
Desafortunamdamente no tengo mucho tiempo ahora para analizar el codigo y menos si no se ve muy claro... te recomiendo usar las etiquetas nuevas [Delphi] para que se vea todo mejor...


Por el momento solo decirte que el error esta en que no haz puesto el encabezado del procedure, debes hacerlo en el private o el public, o alguno de esos, segun te convenga.

Bye.

dagsoft
09-11-2004, 23:26:42
Che te reenvio el codigo con la etiqueta DELPHI, por favor visame el codigo y mandame los errores que puedas corregir


unit Unit1;
interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,
IniFiles, ThemeMgr, ComCtrls, ExtCtrls, DateUtils, JvSearchFiles,
JvComponent, JvBaseDlg, JvBrowseFolder;

type
TForm1 = class(TForm)
JvBrowseForFolderDialog1: TJvBrowseForFolderDialog;
JvSearchFiles1: TJvSearchFiles;
ThemeManager1: TThemeManager;
GroupBox1: TGroupBox;
Edit1: TEdit;
Button1: TButton;
GroupBox2: TGroupBox;
ListBox1: TListBox;
GroupBox3: TGroupBox;
Edit2: TEdit;
UpDown1: TUpDown;
ComboBox1: TComboBox;
CheckBox1: TCheckBox;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure CheckBox1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure JvSearchFiles1FindFile(Sender: TObject; const AName: String);
private
{ Private declarations }
procedure CambiarFondo;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
inifile: TIniFile;
stemp: string;
begin
inifile := TIniFile.Create( ChangeFileExt(Application.ExeName,'.ini') );
try
stemp := inifile.ReadString('preferences','dir','');

if (stemp <> '') then
begin
Edit1.Text := stemp;
JvBrowseForFolderDialog1.Directory := stemp;
end;

ListBox1.ItemIndex := inifile.ReadInteger('preferences','idx',-1);

finally
inifile.Free;
end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
inifile: TIniFile;
begin
inifile := TIniFile.Create( ChangeFileExt(Application.ExeName,'.ini') );
try
inifile.WriteString('preferences','dir',Edit1.Text);



if (ListBox1.ItemIndex <> -1) then
begin
inifile.WriteInteger('preferences','idx',ListBox1.ItemIndex);
end;
finally
inifile.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if (JvBrowseForFolderDialog1.Execute) then
begin
Edit1.Text := JvBrowseForFolderDialog1.Directory;
end;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
if (DirectoryExists(Edit1.Text)) then
begin
ListBox1.Items.BeginUpdate;

ListBox1.Items.Clear;

JvSearchFiles1.RootDirectory := Edit1.Text;

JvSearchFiles1.Search;

ListBox1.Items.EndUpdate;
end
else
ListBox1.Items.Clear;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
Edit2.Enabled := CheckBox1.Checked;
UpDown1.Enabled := CheckBox1.Checked;
ComboBox1.Enabled := CheckBox1.Checked;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
dt1, dt2: TDateTime;
begin

dt1 := StrToDateTime('25/10/2004 03:30:00 p.m.'); //buscar última fecha de cambio
dt2 := Now;

case ComboBox1.ItemIndex of
0: //si está puesto por horas...
begin
if (DateUtils.HoursBetween(dt2,dt1) >= StrToInt(Edit2.Text)) then //comparar horas
begin
CambiarFondo;
end;
end;
1: //si está puesto por días...
begin
if (DateUtils.DaysBetween(dt1,dt2) >= StrToInt(Edit2.Text)) then
begin
CambiarFondo;
end;
end;
2: //si está puesto por semanas...
begin
if (DateUtils.WeeksBetween(dt1,dt2) >= StrToInt(Edit2.Text)) then
begin
CambiarFondo;
end;
end;
3: //si está puesto por meses...
begin
if (DateUtils.MonthsBetween(dt1,dt2) >= StrToInt(Edit2.Text)) then
begin
CambiarFondo;
end;
end;
end;

end;

procedure TForm1.CambiarFondo;
begin

SystemParametersInfo(SPI_SETDESKWALLPAPER,0,PChar('C:\logo.bmp'),SPIF_UPDATEINIFILE);

end;

procedure TForm1.JvSearchFiles1FindFile(Sender: TObject;
const AName: String);
begin
ListBox1.Items.Add( ExtractFileName(AName) );
end;

procedure TForm1.Convertir;//Form1 es el nombre del formulario
var
MyJPEG : TJPEGImage;
MyBMP : TBitmap;
begin
MyJPEG := TJPEGImage.Create;
with MyJPEG do
begin
LoadFromFile( edit1.text + ListBox1.items.strings[ListBox1.Itemindex]);//logo es la imagen JPG
MyBMP := TBitmap.Create;
with MyBMP do
begin
Width := MyJPEG.Width;
Height := MyJPEG.Height;
Canvas.Draw(0,0,MyJPEG);
SaveToFile('C:\logo.bmp');//La imagen a guardar.
Free;
end;
Free;
end;
end;

end


Saludos Daniel
nos vemos muchas gracias desde ya

jhonny
10-11-2004, 19:50:40
Bueno, me he tomado el atrevimiento de editar el POST porque la etiqueta delphi estaba mal puesta y el post seguia viendose mal. (aunque aun sigue viendose algo mal).

Una recomendacion compañero: No escribas en mayusculas, la verdad esque hace que el texto sea dificil de leer, y tampoco utilices eso de "gRaCiaS" y esas cosas...(eso fue otra cosa que edite en tu POST).

En resumen por favor leete la Guia de estilo http://www.clubdelphi.com/foros/guiaestilo.php

Otra recomendación, aca en el foro hacemos todo lo posible por ayudar a las personas y de hecho ya te he dado la solución.

Lee bien, y haz el esfuercito ;)

Espero me entiendas y no me mal interpretes.

dagsoft
11-11-2004, 00:17:49
MUchas gracias amigo

Saludos Daniel
te entinedo bien
ByE