2009-10-18 6 views
0

J'ai un projet Delphi et le formulaire principal est une fenêtre enfant d'une autre application. L'application parente (un jeu 3D codé en C++) a deux états de fenêtre, fenêtré et plein écran. En mode fenêtré, la forme Delphi flotte parfaitement sur l'application parente. Il peut être cliqué, traînés, pas de problème (à l'aide params.Style: = WS_POPUP; dans la procédure CreateParams de ma forme principale):Comment créer une fenêtre enfant DirectX flottante avec Delphi?

procedure TMyForm.CreateParams(var Params: TCreateParams); 
begin 
    inherited CreateParams(Params); 

    HandleToTheOtherApp := FindWindow('THE_OTHER_APP', nil); 

    if HandleToTheOtherApp = 0 then 
    begin 
    ShowMessage('The parent app was not found'); 
    exit; 
    end; 

    params.Style := WS_POPUP; 
    params.WndParent := HandleToTheOtherApp; 
    params.WinClassName := 'MyAppClassName'; 
end; 

Toutefois, si la demande des parents est mise en plein écran mode (il utilise DirectX 9/10) mon formulaire Delphi est caché à la vue. Il semble toujours être sur l'écran comme je peux voir si clignote de temps en temps, mais n'est pas en train d'être redessiné.

Si je clique sur la fenêtre (ou à l'endroit où elle semble être), elle réapparaît pendant une seconde, puis vide le jeu en mode plein écran et revient en mode fenêtré. Clairement, il y a quelque chose qu'il n'aime pas dans le formulaire. Le formulaire utilisé pour apparaître dans les éditions précédentes de ce jeu, mais peut-être en raison de changements dans la version DirectX (à mon avis) il n'apparaît plus.

Le formulaire n'affiche rien de compliqué comme des graphiques 3D, juste des contrôles de base comme des boutons et des listes de sélection. J'ai essayé différents styles de fenêtres et je l'ai fait doubler, mais en vain. Peut-être y at-il quelqu'un qui a réussi à afficher une fenêtre dans ces circonstances en utilisant une fonction particulière, Window style ou header?

Existe-t-il un moyen de faire apparaître correctement un formulaire Delphi dans un environnement DirectX?

+0

Je ne suis pas au courant d'un jeu en plein écran qui est capable de coexister avec une application fenêtrée. Même si je cours en plein écran sur un moniteur et que je clique sur une application fenêtrée dans l'autre, il vide le jeu en plein écran quand il perd le focus. Je pense que c'est une limitation de Windows. –

Répondre

2

Je ne pense pas que cela puisse être fait. Lorsqu'une fenêtre DirectX Video devient en plein écran, DirectX reprend le dessin d'écran complet (comme lorsque vous faites un Windows Media Player en plein écran: toutes les autres applications disparaissent, et parfois même la résolution change).

Questions connexes