Bonjour,
je voudrais écrire sur le bureau (windows xp).
J'y arrive (GetWindowDC(Bureau) ...TextOut(Dessin, 10, 180, st, lstrlen(st)) mais mon texte disparait, lors d'un raffraichissement du bureau je pense.
Merci.
Bonjour,
je voudrais écrire sur le bureau (windows xp).
J'y arrive (GetWindowDC(Bureau) ...TextOut(Dessin, 10, 180, st, lstrlen(st)) mais mon texte disparait, lors d'un raffraichissement du bureau je pense.
Merci.
Salut,
tu as une solution ici.
Merci mais ça ne résout pas mon probléme. j'ai bien fait un essai avec GetDC(0) et c'est exactement pareil, ça disparait avec un raffraichissement.
Je ne veux pas d'une appli supplémentaire qui tourne en permanence, je voudrais écrire sur le papier-peint une seule et définitive fois.
dafdan a ecrit:
Pourquoi pas un fond d'ecran personnalise, c'est une image, on peut donc la reprendre sous un logiciel de dessin, et la modifier a son gré, c'est definitif et sans programme qui tourne en permanence.Merci mais ça ne résout pas mon probléme. j'ai bien fait un essai avec GetDC(0) et c'est exactement pareil, ça disparait avec un raffraichissement.
Je ne veux pas d'une appli supplémentaire qui tourne en permanence, je voudrais écrire sur le papier-peint une seule et définitive fois.
--
Plutot que d'essayer de réinventer la roue, apprenons à nous en servir
Bonjour,
c'est exactement ce que je veux mais le fond change à chaque démarrage et l'inscripton que je voudrais faire dessus n'est bien sur jamais la meme.
En conclusion ? comment écrire sur le papier-peint avant de l'afficher ?
Comme l'as dit mon collègue, il faut que tu charges le papier peint dans ton application, que tu la modifies et que tu la réassignes en tant que papier peint.
Voilà un petit bout de code qui fait en deux temps ce que tu veux.
Dans un premier temps, je charge l'image du papier peint du bureau dans un Timage:
en fait je récupère son chemin.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 void __fastcall TForm1::Button1Click(TObject *Sender) { //SPI_GETDESKWALLPAPER char path[200]; if(SystemParametersInfo( SPI_GETDESKWALLPAPER, 200, path, 0) == TRUE) { AnsiString Chemin; float i=0; Image1->Picture->LoadFromFile(path); i = (float)Screen->Height/(float)Screen->Width; Image1->Height = i * Image1->Width; } }
Ensuite, je charge une image et je la modifie par le Canvas avant de l'établir comme papier peint du bureau:
Perso, je tient à garder mon papier peint nikel, c'est pour ca que je ne l'ai pas modifié directement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 void __fastcall TForm1::Button2Click(TObject *Sender) { //SPI_SETDESKWALLPAPER if(OpenDialog1->Execute()) { Image1->Picture->LoadFromFile(OpenDialog1->FileName); Image1->Canvas->TextOutA(10,10,"modif de l'image par Builder"); Image1->Picture->SaveToFile(OpenDialog1->FileName); if(SystemParametersInfo( SPI_SETDESKWALLPAPER, OpenDialog1->FileName.Length(), OpenDialog1->FileName.c_str(), 0) != TRUE) { Button2->Caption = "Erreur"; } } }
Mais tu peux faire tout ca en une fois, et charger l'image du papier peint, la modifier et l'enregistrer avant de la recharger en tant que papier peint.
Voilà, il ne manque plus que le petit résolu
Petite modification, dans la dernière commande, pour enregistrer la modif, il faut faire ceci:
Cela change juste le zéro du dernier paramètre. Je pense que si tu redémarres le PC, maintenant le fond d'écran sera sauvé, sinon tu appliques le changement mais ne le sauvegarde pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if(SystemParametersInfo( SPI_SETDESKWALLPAPER, OpenDialog1->FileName.Length(), OpenDialog1->FileName.c_str(), WM_SETTINGCHANGE) != TRUE)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager