Ombre et Form Modal

cs_phoenyx Messages postés 31 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 8 mars 2007 - 18 sept. 2006 à 10:50
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 - 19 sept. 2006 à 10:55
Bonjour à tous,

il est possible d'ajouter une ombre à une form avec:

procedure CreateParams(var Params: TCreateParams); override;
begin
  Params.WindowClass.style := Params.WindowClass.style or CS_DROPSHADOW;
end;

Oui, mais voilà, l'ombre disparait lorsque la form est modale. Je pensais avoir résolu le problème avec cette source mais elle ne fonctionne pas à 100%. Je m'explique :

soient Form1 et Form2 deux forms et FormShdw la form modal ombrée utilisant la dite source.
Si j'appelle Form2 depuis Form1 et qu'ensuite j'appelle FormShdw de puis Form2, l'illusion est presque parfaite : Form2 est bloquée en attendant que j'en ai fini avec FormShdw. Mais Form1 est toujours accessible, je peux la déplacer, la fermer...

D'où ma question : Comment faire pour avoir une "vraie" fenêtre modale avec son ombre ?

Merci pour votre aide...

[}:)] PhoenyX [}:)]

3 réponses

cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
18 sept. 2006 à 10:58
essai avec fsStayOnTop (et tu simule le ShowModal toi même). Si j'ai bien copris ton problème, ça devrait jouer.
0
cs_phoenyx Messages postés 31 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 8 mars 2007
19 sept. 2006 à 09:29
voilà la source que j'avais essayé :

Function TModalDialog.ShowMeModal: TModalResult;
var
  CloseAction: TCloseAction;
begin
  FormStyle := fsStayOnTop;
  Show;
  repeat
    Application.HandleMessage;
    if Application.Terminated then
      ModalResult := mrCancel;

    if ( ModalResult <> mrNone ) then
    begin
      if CloseQuery then
      begin
        CloseAction := caFree;
        DoClose( Closeaction );
        if ( CloseAction = caNone ) then
          ModalResult := mrNone;
      end;
    end;

  until ModalResult <> 0;
  Result := ModalResult;
  Release;
end;

l'utilisation de ce bout de code donne les effets décris plus haut.
Le soucis c'est que ça me donnée une fenêtre "presque" modale qui ne bloque que la fenêtre appelante et non toute l'appli...

si quelqu'un avait un truc...

[}:)] PhoenyX [}:)]
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
19 sept. 2006 à 10:55
hum,

j'ai fait quelques test et j'ai rien trouvé qui puisse t'aider. dsl.

petu-être peut tu tricher avec screen.OnActiveFormChange?

bonne chance.
0
Rejoignez-nous