IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Appli MDI + ShowModal + Position


Sujet :

Composants VCL Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 54
    Points : 23
    Points
    23
    Par défaut Appli MDI + ShowModal + Position
    bonjour tt le monde

    j'ai un ptit soucis avec une appli mdi que je développe et apres quelque recherches infructueuses, j'viens voir si vous auriez pas une solution miracle :p

    mon appli mdi utilise des form modales pour tt ce qui est saisie / modif des données (logique me direz vous), le ptit soucis, c'est que je specifie une position (TPosition) au design de ma form modale (poScreenCenter ou autre) pour que ma boite de dialogue s'affiche tjrs en plein milieu de mon appli, le bins c'est que ça marche pas.. et quand je passe ma fenetre en mdichild et que je la cree en non modale ça fonctionne... d'ou mon étonnement.
    je me suis dit, c'est un probleme de parent ou un truc comme ça, le soucis c'est que si je passe application.mainform comme parent de ma form modale, elle apparait bien la ou je veux, mais ça bloque l'appli (fenetre inaccessible et comme on peut pas fermer la fenetre modale ça tourne en rond.)

    donc je voulais savoir si:
    il est possible de positionner une fenetre modle la ou on veux a partir d'une appli mdi et si oui comment?

    j'suis sur que c'est un truc tout con, mais la ou je passe a coter lamentablement ou chsuis trop bete pour trouver :p

    code utiliser pour la création des fenetres modales:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      try
        dlg := TForm2.Create(ModalOwner); //ModalOwner : TComponent soit nil soit application, soit application.mainform soit self (mainform ou une mdichild) 
        dlg.Position := posit; //posit: TPosition
        dlg.ShowModal;
        dlg.Free;
      except
        on E : Exception do
          MessageDlg(e.Message,mtError,[mbOk],0);
      end;
    j'ai fait une appli de test pour tester les differentes combinaisonts possibles mais sans succes...

    j'ai aussi une autre question paralelle à ça:
    pour le confort de mes utilisateurs, je développe un composant pour sauvegarder dans la base de registre la position de la form sur laquelle il est posé ainsi que sa taille (j'utilise pas des compos dispo parce qu'au final je veux qu'il sauvegarde aussi des tailles de colonnes que je lui aurais spécifier a traver un propertyeditor perso)
    ça marche assez bien avec des mdichild mais pour le probleme cité précédement ça foire completement avec des fenetres modales... et la encore je tourne en rond...

    le code que j'utilise pour charger les pos et tailles de mes fenetres est le suivant:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    constructor TLrkFormRegSaver.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
     
      FOnShow := nil;
      if AOwner is TForm then
      begin
        ParentForm := (AOwner as TForm);
        FOnShow := ParentForm.OnShow;
        ParentForm.OnShow := MyOnShow;
      end
      else
        ParentForm := nil;
    end;
     
    procedure TLrkFormRegSaver.Load;
    var
      reg : TRegistryIniFile;
      iTop : integer;
      iLeft : integer;
      iHeight : integer;
      iWidth : integer;
    begin
      if (not self.Enabled) or (csDesigning in ComponentState) then
        Exit;
      if (self.ParentForm <> nil) and(self.RegRootKey <> EmptyStr) then
      begin
        reg := TRegistryIniFile.Create(self.RegRootKey);
        try
          //charge la position et taille de la form dans un rep qui porte le nom de la form
          iTop := reg.ReadInteger('MemForms\'+self.ParentForm.Name,'Top',self.ParentForm.Top);
          iLeft := reg.ReadInteger('MemForms\'+self.ParentForm.Name,'Left',self.ParentForm.Left);
          iHeight := reg.ReadInteger('MemForms\'+self.ParentForm.Name,'Height',self.ParentForm.Height);
          iWidth := reg.ReadInteger('MemForms\'+self.ParentForm.Name,'Width',self.ParentForm.Width);
          //deplace la form
          self.ParentForm.SetBounds(iLeft,iTop,iWidth,iHeight);
        finally
          reg.Free;
        end;
     
      end;
    end;
     
    procedure TLrkFormRegSaver.MyOnShow(sender: tobject);
    begin
      if Assigned(FOnShow) then
        FOnshow(sender);
      load;    
    end;
     
    ...
    logiquement ça devrait suffir, mais j'ai vu (en depiotant des compos free) que certains passait pas des messages windows...

    j'appelle load sur le onshow parce qu'ailleur (surcharge de loaded par exemple) ça ne fonctionnait pas bien (valeurs chargées et modifées, mais la form restait tel que dans le designer )

    si vous avez des conseils ou soluces pour ce probleme, je suis prenneur.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 54
    Points : 23
    Points
    23
    Par défaut note importante
    mon poste de travail à 2 écrans, et la je viens de tester sur un poste avec un seul ecran, le comportement est plus logique, doit y avoir un probleme avec la gestion du biecran, des infos la dessus ?

  3. #3
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Salut,

    sur la propriété Position de ta form et tu devrais trouver ton bonheur...
    (La gestion multi écran est prévu sous Delphi 7 (et peut etre dans les versions antérieures))

    A+
    CV :
    - LinkedIn
    - Viadeo

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 54
    Points : 23
    Points
    23
    Par défaut ...
    j'aurais du preciser que j'consulte l'aide et google et la recherche ds le forum avt de poster ici ...

    apparement ce comportement bizarre que j'obtient est un bug de gestion du multi ecran, parce qu'en specifiant borderstyle: bsSizeble, position : poMainFormCenter et DefaultMonitor: dmMainForm

    ma fenetre modale apparait tjrs n'importe ou (en fait pour etre plus precis: tjrs la ou elle etait au design)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 54
    Points : 23
    Points
    23
    Par défaut hahem
    bon je confirme ce que je pensait depuis le debut:
    ati c de la merde ...
    j'viens de decharger leur gestionnaire de bureau hydravision et la ça marche comme il faut (les fenetres apparaissent la ou elles devrait apparaitre ...)

    donc pour la postérité:
    si vous avez un poste en multiecran, que les positions merdent complet et que vous avez une carte ATI et hydravision lancé, virez hydravision ...

  6. #6
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Citation Envoyé par l'aide Delphi
    poMainFormCenter
    La fiche conserve la taille que vous lui aviez donnée àla conception,mais est placée dans le centre de la fiche principale de l'application.Aucun ajustement n'est réalisépour les applications multi-moniteurs.Cette position ne doit être utilisée qu'avec des fiches secondaires.Si elle est définie pour une fiche principale,elle agit comme poScreenCenter.
    Donc ne peut fonctionner sur multi ecran.
    Je pense que poScreenCenter serait plus adapté...
    CV :
    - LinkedIn
    - Viadeo

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 54
    Points : 23
    Points
    23
    Par défaut
    elle agit comme poScreenCenter
    dont si tu met mainformcenter sur du biecran c comme si tu mettais screencenter, sachant que seul mon poste de travail et bi écran :p

  8. #8
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    désolé j'avais cru qu'il s'agissait d'une fiche secondaire....
    CV :
    - LinkedIn
    - Viadeo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 13/03/2006, 08h56
  2. [MDI] Problème : Position Image SetBitmap
    Par nicob56 dans le forum MFC
    Réponses: 1
    Dernier message: 21/02/2006, 16h26
  3. Divers problemes avec appli MDI
    Par anarpunk dans le forum Langage
    Réponses: 26
    Dernier message: 27/10/2005, 17h09
  4. Appli MDI et dimension Fiche Fille
    Par Andry dans le forum Composants VCL
    Réponses: 7
    Dernier message: 15/09/2005, 15h32
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo