Bonjour,
Je cherche l'API ou le méthode pour maintenir une application sur le bureau, à la façon d'un widget.
Pas au dessus des autres, simplement ancré sur le bureau, même si l'on clique sur l'icone "Bureau".
Une idée ?
Merci
Bonjour,
Je cherche l'API ou le méthode pour maintenir une application sur le bureau, à la façon d'un widget.
Pas au dessus des autres, simplement ancré sur le bureau, même si l'on clique sur l'icone "Bureau".
Une idée ?
Merci
jouer avec StayOnTop, forcer le bringtofront lors du OnDeactivate de l'application, ...
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
le Ondeactivate ne convient pas car je ne souhaite pas avoir une application toujours activé, mais plutot en tache de fond sur le bureauEnvoyé par ShaiLeTroll
Quand on clique sur l'icone bureua on ne passe pas dans l'evenement onMinimize de l'application.
Le bureau semble se redessiner par dessus les applications sans leur demander de se minimizer![]()
Je n'ai jamais dit qu'elle serait active !!!
tu confonds BringToFront et SetFocus ... as-tu essayé de voir si le bureau provoquait on moins le passage dans Application.OnDeactivate ...
Sinon, j'ai fait un petit programme qui affiche un Hint au dessus de l'heure, et lorsque clique sur l'icone du bureau, le message reste affiché (c'est pas un hint mais une Form contenant un HTMLMemo de TMS), bon en fait la fiche est en fsStayOnTop, je fais ceci pour afficher ma fenêtre, ce qui fait que cela s'affiche sans garder le focus ...
et comme c'était un programme sans icone dans la barre des taches, je pense qu'il y a un impact lié à ce code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 FGWHandle := GetForegroundWindow(); try FormStyle := fsStayOnTop; Show(); finally SetForegroundWindow(FGWHandle); end;
J'essaye de me battre pour comprendre, mais l'affectation de fsStayOnTop dans le OnCreate semble bien forcé, mais on y arrive à le faire céder à un moment ... mais doit y avoir une API ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SetWindowLong (Application.Handle, GWL_EXSTYLE, GetWindowLong (Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
EDIT : Hum, tant que la fiche ne recoit JAMAIS le focus, et bien, elle reste quoi qu'il arrive, donc si tu veux faire un truc qui s'affiche tout le temps, en mettant Enabled à False (cela limitera ton programme à un strict affichage), eh ben, cela semble fonctionner ...
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
on passe bien dans le Ondeactivate avec le "bureau"
Malheureusement pas qu'avec lui :/
Je ne souhaite pas etre en fsStayOnTop et c'est bien tout le soucis..bref je patauge sur ce coup là
Essaye cette combinaison (il faut faire un petit exe séparé du reste de ton projet ...)
Cela laisse la dernière fenêtre active comme active, et la fenêtre reste en permanence affiché ... en tout cas cela donne bien chez moi ... c'est le seul moyen que j'ai trouvé,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 FGWHandle := GetForegroundWindow(); try SetWindowLong (Application.Handle, GWL_EXSTYLE, GetWindowLong (Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW); TheForm := T...Form.Create(Application); TheForm.FormStyle := fsStayOnTop; // mieux vaut une affectation ici et laisser Normal dans l'IDE TheForm.Enabled := False; TheForm.BorderStyle := bsNone; TheForm.Show(); finally SetForegroundWindow(FGWHandle); end;
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Et pourquoi pas un « papier-peint » plus une application banale mais cachée, détectant la position des clics de souris pour interagir avec le TBitmap de l'image du papier-peint ? (je suppose qu'il doit y avoir une certaine forme d'interaction [affichage d'infos, saisie de valeurs, boutons ?...], puisque tu parles d'application.)
Mes 2 cts,
--
jp
Partager