Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Como Cambiar El Papel Tapiz De Windows (https://www.clubdelphi.com/foros/showthread.php?t=15840)

dagsoft 06-11-2004 13:34:00

Como Cambiar El Papel Tapiz De Windows
 
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

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.

Código Delphi [-]
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...

Código Delphi [-]
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

Cita:

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

Problemas y gracias
 
: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[listbox1.ItemIndex]);//logo es la imagen JPG

ya que:
  • 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

Cita:

Empezado por dagsoft
[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

si!
 
:( :( :( :( :( :( :( 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:

Código Delphi [-]
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

Sigo con el papel tapiz sory
 
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

Ok Te Renvio El Codigo
 
Che te reenvio el codigo con la etiqueta DELPHI, por favor visame el codigo y mandame los errores que puedas corregir

Código Delphi [-]
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

Gracias
 
MUchas gracias amigo

Saludos Daniel
te entinedo bien
ByE


La franja horaria es GMT +2. Ahora son las 01:10:16.

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