2009-03-07 8 views
2

Lors d'un événement DDE, mon programme charge un fichier et devrait apparaître au premier plan. j'utilisaisComment mettre ma fenêtre au premier plan après un événement DDE?

show; 

Il semble que travailler comme quand je l'ai caché la fenêtre.

donc j'ajouté

bringtofront; 

Encore une fois cela a fonctionné si elle était cachée, fermée, réduite au minimum ou dans la barre d'icônes, mais pas si elle était ouverte juste sous une autre fenêtre.

J'ai même essayé quelques trucs aki comme

windowstate:=wsminimized; 
windowstate:=wsnormal; 

pour essayer le forcer à montrer, mais en vain. Je sais que le code fonctionne car j'ai des impressions de chaque côté de ce bloc et il n'y a pas d'instructions conditionnelles dans lesquelles il pourrait être coincé.

Répondre

1

SetForegroundWindow ne fonctionnera pas toujours. En fait, ces jours-ci, il est assez improbable de travailler, car les applications ne sont pas censées attirer l'attention, elles ne peuvent que les donner. MS essaie depuis années pour empêcher les applications de voler le focus d'entrée. Lisez les commentaires sur ce blog entry de Raymond Chen pour un peu d'histoire. Donc, si vous êtes l'application de premier plan vous-même, vous pouvez SetForegroundWindow à une autre application et tout sera pêche. Si vous n'êtes pas l'application de premier plan, les chances sont que la seule chose susceptible de se produire est un bouton de la barre des tâches va commencer à clignoter. Juste pour ajouter une certaine confusion, le comportement précis dépend de la version de Windows, donc ce qui se passe dépend de la race de Windows que vous utilisez - ils ont été dérangés avec cela depuis longtemps :-).

+0

Le programme qui envoie l'événement DDE doit coopérer en appelant AllowSetForegroundWindow. Je m'attends à ce qu'Explorer le fasse, mais d'autres programmes négligent probablement ce détail. –

+0

C'est une bonne chose aussi. Je n'aime vraiment pas quand d'autres programmes attirent l'attention. – Kibbee

Questions connexes