CHANGEUR DE FOND D'ÉCRAN

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 - 20 août 2009 à 20:40
danfranjo Messages postés 33 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 14 février 2009 - 26 août 2009 à 21:30
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50468-changeur-de-fond-d-ecran

danfranjo Messages postés 33 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 14 février 2009
26 août 2009 à 21:30
Bonjour John Dogget,
Je viens de tester ton appli,et j'ai un petit commentaire :
J'ai un système à 2 moniteurs,avec extension du desktop sur le 2ème ce qui fait que tous tes écrans sont à cheval sur les 2 moniteurs.
Pour corriger, il faut mettre les positions des écrans à poScreenCenter au lieu de poDesktopCenter.
D'autre part, est-il possible de mettre une image différente sur le 2ème moniteur ?
Sinon, l'appli marche bien.
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
25 août 2009 à 23:21
Mise a jour !

Le bug de la liste vide est en principe corrigé, je dis en principe parce qu'en fait je suis pas arrivé à le reproduire ^^

Le TrayIcon est codé "en dur" dans l'appli, c'etait moins compliqué que je ne pensais.

Par contre, le démarrage en mode reduit réagit toujours bizaremment ...
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
24 août 2009 à 22:30
Bien ...

La prise en charge de plusieurs format c'est bon, je viens de finir et ça marche (très) bien, l'application voit et liste tous les fichiers images.
Pour l'instant j'ai mis les BMP, GIF et JPG mais on peut facilement en rajouter.
D'ailleurs je suis assez fier de moi pour la fonction qui liste tout ça (huhu ^^).

Le try..except, c'est facile donc on va dire que c'est bon.

La je suis sur la création d'une TrayIcon avec les API.

J'avance bien, ptete une MAJ ce soir, sinon demain.
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
24 août 2009 à 22:23
Toujours la même chose..
et si on choisit un dossier ne contenant pas de fichier à extension d'image valide-->>plantage
ce qui pourrait être eviter avec un Try Except End
pour les autres extensions, il faut soit convertir, soit tester.
et la fonction de notre cher japee fonctionne avec un fichier .bmp :

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
uses ShlObj, ComObj, Jpeg;

procedure ApplyWallPaper(const FileName: string; wpStyle: DWORD = WPSTYLE_CENTER);
const
GUID: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var
ComObj : IUnknown;
Buffer : PWideChar;
WallPaperOpt : TWallPaperOpt;
begin
if not FileExists(FileName) then Exit;
Buffer := AllocMem(MAX_PATH);
StringToWideChar(FileName, Buffer, MAX_PATH);
WallPaperOpt.dwStyle := wpStyle;
WallPaperOpt.dwSize := SizeOf(WallPaperOpt);
ComObj := CreateComObject(GUID);
with ComObj as IActiveDesktop do
begin
SetWallpaperOptions(WallPaperOpt, 0);
SetWallpaper(Buffer, 0);
ApplyChanges(AD_APPLY_ALL); //(AD_APPLY_ALL or AD_APPLY_FORCE);
end;
FreeMem(Buffer);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ApplyWallPaper('c:\essai\Aquarium.bmp',0);
end;

end.
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
24 août 2009 à 20:10
T'inquietes ^^

La partie qui doit mettre une image en fond d'écran devrait normalement accepter n'importe quel format image pris en charge par windows, dixit japee l'auteur de cette fonction :p

Non c'est juste le listage des fichiers qui ne doit voir que les fichiers jpg.

C'est pour cette raison que j'aimerais bien que cantador me dise ce qui va pas.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
24 août 2009 à 19:56
"le programme n'est pas censé voir les fichiers en bmp"
C'est quand même un comble pour le fichier image natif de Windows :]
Peut-être un support Bmp/Jpeg serait intéressant, particulièrement pour ceux dont la qualité des JPEG pique les yeux ...

Cordialement, Bacterius !
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
24 août 2009 à 19:46
@ cantador
Tu dis que ça tombe que ça tombe sur un BMP, ça plante.
Mais ça plante à quel moment exactement parce que d'après le code, le programme n'est pas censé voir les fichiers en bmp !
Ou alors, c'est au moment de mettre un BMP en fond d'écran que ça plante ?

Comprend po !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
24 août 2009 à 18:13
Tu mets le problème à l'envers là. Pour le confort des gens, il est, je sais pas, logique de permettre une compilation aisée. Déjà, si il faut télécharger un pack de 20 Mo pour un seul composant ... après rien ne t'empeche de faire une version "pour toi", avec la JVCL, offrant + de possibilités, puis une version "CS", n'utilisant que des compos facilement récupérables.
Enfin bon, moi je peux pas installer la JVCL parce que ça marche pas, que veux-tu. Il y a sûrement un moyen, mais me débattre pour un composant dont j'ai déjà codé mon propre compo qui fait presque pareil, c'est frustrant quoi ...

"à cause de toi" => excuse-moi d'essayer de compiler hein ...

Enfin bon, restons dans l'amiable o0"

Cordialement, Bacterius !
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
24 août 2009 à 18:07
Comme avec la JVCL qui est beaucoup plus repandu que ton compo en fait.

Et puis je bataille en partie à cause de toi (vu que comme dab ici les autres ont l'air de s'en cogner), donc si tu me dis "sans moi", je sens que je vais garder les MAJ pour moi et aller voir ailleurs si j'y suis.

Je veux bien des efforts, mais ça reste open-source, donc voila.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
24 août 2009 à 18:02
Ok ben ça sera donc sans moi :/
Pourquoi ne pas utiliser mon composant TTrayIcon ? Il convient parfaitement à ce que tu cherches à faire ... et les propriétés sont Title, Active, PopupMenu, Icon, et tu peux appeller une bulle d'aide avec BalloonHint ...

Cordialement, Bacterius !
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
24 août 2009 à 17:58
Non ^^
Ca marche très bien et je vais surement pas me retaper des tonnes de code alors que d'autre le font mieux que moi
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
24 août 2009 à 17:54
Arghh ! Tu peux pas t'en empêcher hein ...

Cordialement, Bacterius !
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
24 août 2009 à 17:52
Je pense que je vais utiliser la JVCL.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
24 août 2009 à 17:39
Tu peux pas simplement utiliser un composant qui existe déjà sur le site pour le TTrayIcon ? Pas grand chose à changer si ce n'est le nom des propriétés, etc ...

Cordialement, Bacterius !
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
24 août 2009 à 17:37
Pour les bmp, je peux arranger ça.
Pour le TTrayIcon il faut que je recode à la main toute la partie qui correspond, c'est un peu plus délicat.
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
24 août 2009 à 10:03
j'aime pas inhiber des trucs mais ça marche..
reste le souci du format des images..dès que le choix tombe sur un .bmp paf ça plante..
ce souci doit pouvoir se régler rapidement..
il faut donc une version réglant ce problème +
une compilation qui tienne compte de la version de delphi
(av D7 et ap D7)
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
23 août 2009 à 23:18
Oui c'est normal Cantador, c'est un bijou que nous, pauvres individus ne possèdant qu'une version de Delphi à un chiffre, ne sommes en mesure d'apprécier.
Tout ça pour dire que c'est la TrayIcon de Delphi 2006 à ce que j'ai cru comprendre ... je pense que si tu inhibes tout ce qui touche à la TrayIcon ça devrait fonctionner à peu près normalement.

Cordialement, Bacterius !
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
23 août 2009 à 23:12
je viens de tester à nouveau.
sous D7, le trayIcon n'est pas reconnu.
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
23 août 2009 à 21:52
Tu rencontres les mêmes soucis avec la dernière version ?
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
23 août 2009 à 21:23
désolé John Dogget, j'ai répondu un peu vite..
en fait, j'ai les mêmes soucis signalés par Bacterius mais
dès que pour une source, il faut faire ci il faut ça..
ça m'ennuie un peu..
Pour ma part, un programme déposé doit fonctionner ou alors il faut vraiment bien préciser le contexte dans lequel celui-ci doit tourner.
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
23 août 2009 à 21:05
f0xi, reposé et bronzé ça va faire mal..
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
23 août 2009 à 20:23
J'ai fais une petite mise à jour qui devrait résoudre le EStringListError.
Par contre, j'ai toujours des ennuis avec la réduction au démarrage qui semble vraiment se comporter de manière aléatoire.

Par ailleurs Foxy m'a contacté en me disant qu'il avait fait une grosse modif du code sans donner plus de précisions.
Il ne m'as rien envoyé pour l'instant, peut être qu'il a trouvé une solution.
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
23 août 2009 à 19:52
C"est prévu ...
Par contre cantador, je veux bien croîre que tu ais des plantages, mais si tu me dis pas lesquels, je vais pas le deviner.
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
23 août 2009 à 19:28
ben chez moi, j'ai tellement de plantages que finalement le fond d'écran je le change à la main..
au boulot John Dogget !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
23 août 2009 à 18:34
Bon pour la bulle d'aide, peut-être aie-je mal configuré les options. Mais le thème de windows xp avec D7 personal ? Chez moi, si j'utilise XPMan, ça marche 1 fois sur 2, et avec le fichier ressources directement, ça ne marche point du tout ...
Enfin ici c'est les commentaires pour la source "Changeur de fond d'écran", stop.

Cordialement, Bacterius !
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
23 août 2009 à 18:31
une bulle d'aide s'affiche qui donne l'unité dans laquelle cet objet est déclaré, les paramètres si c'est une fonction/procédure, le type ... chose absente dans
Delphi 7 ...

cela fonctionne aussi sous D7..

qui est certainement une des version de delphi la plus stable.
D2009 semble être encore plus rapide et possède des fonctions avancées supplémentaires..

bon va falloir que l'on casse la tirelire..

cantador
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
23 août 2009 à 15:40
Et de plus, sur D7, le style XPMan (ou le fichier windowsxp.res) donne des résultats pour le moins étranges ...

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
23 août 2009 à 15:39
Chose bizarre, j'utilise plus Delphi 6 que D7, car sur Delphi 6, quand on passe le curseur par-dessus une variable/constante/n'importe-quoi sur le code, une bulle d'aide s'affiche qui donne l'unité dans laquelle cet objet est déclaré, les paramètres si c'est une fonction/procédure, le type ... chose absente dans Delphi 7 ... mais peut-être qu'un réglage des options ??

Cordialement, Bacterius !
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
23 août 2009 à 15:33
moi aussi..
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
23 août 2009 à 13:24
@Cantador : j'ai D7 aussi ;)

Cordialement, Bacterius !
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
23 août 2009 à 11:59
ouaff...embêtant tout ça..
peut-être faire une compilation évenementielle ?
si D6->>> Bacterius
si D7->>> beaucoup de monde
si > D7 ->>>
si XP->>>
si Vista->>>

etc.
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
21 août 2009 à 15:49
Je vais creuser cette histoire d'erreur au lancement.
Sinon, j'ai oublié de préciser que par defaut, il faut des images en jpg et rien d'autre, c'est une des limitations dont je parlais dans la présentation du code.

Je pense faire une MAJ dans le week-end pour arranger tout ça.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
21 août 2009 à 14:06
Il y a un truc qui déconne sur Vista là ... je change le fichier AWC.ini pour définir mon dossier d'images ("C:\Utilisateurs\Thomas\Images"). J'ai pris quatre ou cinq images de chaton sur la toile pour tester. Et je reçois quand même l'erreur de dépassement de bornes ... Je sais pas d'où ça vient mais c'est bizarre ...

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
21 août 2009 à 13:53
Sinon petite amélioration : Au démarrage du logiciel, si aucune préférence n'a été mise à jour, permettre à l'utilisateur de choisir son dossier images ? (chez moi "D:\Images" pointe sur mon DD externe qui ne contient pas ce genre de données). Je vais changer à la main pour tester :)

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
21 août 2009 à 13:24
Ce n'est qu'un passage ... l'ordinateur était fourni avec Vista, mais j'peux passer à Windows 7 avec la promotion :)
De plus, Vista a des combinaisons de touche tellement farfelues que j'arrive à coincer le clavier en tapant trop vite :>(

Cordialement, Bacterius !
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
21 août 2009 à 13:05
il faut installer les pré-requis avant ... j'avais bien dit de télécharger la version ISO ... c'est la seule qui soit complète.

après si c'est sous Vista ... me semble qu'il y a une manip à faire pour installer le FrameWork :D
mais développer sous Vista ... y a comme un non sens ... :-#
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
21 août 2009 à 12:51
Turbo Delphi a beau être gratuit, je ne parviens pas à l'installer. Le téléchargement c'est OK, mais l'installation foire pour je ne sais quelle odieuse raison ...

Cordialement, Bacterius !
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
21 août 2009 à 10:51
@John Dogget:

vu que tu dev sous D2006 je te conseille d'ajouter ceci dans le OnCreate de ta fiche principale :
ReportMemoryLeaksOnShutDown := True;
au moins pendant la phase de testes ;)
ça te permettra déjà de voir que tu as des fuites de mémoires ... ;)
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
21 août 2009 à 10:11
Salut,

@Bacterius:
l'unité que je t'avais filé (TTrayIcon) est compatible avec ce composant ... sauf si John Dogget utilise l'animation pour l'icône du tray !!! je ne l'ai pas implémenté.

sinon et pour la nième fois .... Turbo Delphi est Gratuit et possède ce composant et bien d'autres encore :D
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
20 août 2009 à 21:08
Oui tu prends Paint et tu dessines l'icône à côté de l'horloge ^^

Cordialement, Bacterius !
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
20 août 2009 à 21:04
Non ça viens pas de l'UAC ^^
J'aurais simplement dû inclure dans le code un garde fou pour empecher ce soucis si le dossier n'existes pas.

Et pour les 2000€, ça va pas être possible !

Cela dit, cette partie du code est vraiment minime et peu être remplacé par un autre compo genre JVCL (qui est très bien aussi) ou même une création "à la main" de l'icône dans la barre des tâches.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
20 août 2009 à 20:57
...
Bon ben tu as deux milles euros à me préter pour que j'achète D2006 ? Ou n'existe-t-il pas un autre moyen pour permettre à cette source d'être accessible aux personnes ne disposant pas du dernier Delphi sorti ?
Pour le EStringListError, ça vient peut-être du fait que je suis sous Vista et que je lui ai pas encore montré qui est le maître et que l'UAC n'en fait qu'à sa tête ... :'<

Cordialement, Bacterius !
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
20 août 2009 à 20:51
TrayIcon est un compo standard de Delphi depuis 2006 ...

Pour le EStringListError, c'est parce que le fichier ini qui contient les reglages du programme (AWC.ini) pointent vers un dossier qui n'existe pas chez toi.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
20 août 2009 à 20:40
Il manque :
- TTrayIcon (dans un élan de bonheur j'ai cru qu'il s'agissait de mon composant, de telle façon que j'aurai pu compiler, mais non ^^).
Le fichier .res n'est pas compatible D6 (pas testé D7), mais ça n'entrave pas la compilation.

Une fois après avoir inhibé tout ce qui touchait au TrayIcon, je compile.

---------------------------
Notification d'une exception du débogueur
---------------------------
Le projet AWC.exe a provoqué une classe d'exception EStringListError avec le message 'Indice de liste hors limites (0)'. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
---------------------------
OK Aide
---------------------------

Ceci est valable pour Delphi 6 (personal) et Delphi 7 (personal) sous Vista.

Je ne vais pas plus loin, j'attends déjà l'unité TTrayIcon.

Cordialement, Bacterius !
Rejoignez-nous