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

Web & réseau Delphi Discussion :

Fermer une Frame (IntraWeb)


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Par défaut Fermer une Frame (IntraWeb)
    Je bute sur la procédure de fermeture d'une frame pour un projet Intraweb. J'ai la Form principale avec une TIWRegion (IWMainRegion) dans laquelle s'afficheront selon les besoins telle ou telle frame. Jusqu'ici tout se passe bien.

    // Dans la Form principale. Affichage de la Frame TIWFrame_Login
    FreeAndNil(FrameEnCours);
    FrameEnCours := TIWFrame_Login.Create(self);
    FrameEnCours.Parent := IWMainRegion;
    FrameEnCours.Afficher;

    Ma frame s'affiche correctement dans la IWMainRegion. Mais sur cette frame, il y a un TButton (Quitter). Dans le code de la frame, à l’événement TButtonClick, je souhaiterai que cette frame se ferme, libérant ainsi la IWMainRegion pour l'affichage ou non d'une nouvelle frame. Sachant que le Close et le Hide ne fonctionne pas (violation d'accès) ou alors aucune réaction, je me tourne vers vous.

    Merci.

  2. #2
    Membre extrêmement actif
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 219
    Par défaut
    Peut-être en mettant le bouton quitter en dehors de la frame et avec le code :

    FreeAndNil(FrameEnCours);

    mais c'est curieux, un hide ne détruisant pas l'objet tu ne devrais pas avoir de VA, il n'y a que ça comme code ?

    @++
    Dany

  3. #3
    Membre averti
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Par défaut Pas de solution ?
    Bonjour,

    Je bute toujours sur ce problème. Comme vous le voyez sur ma Capture.PNG, j'ai ma Form principale (MainForm) sur laquelle se trouvent 2 Régions (Une pour contenir le Frame Menu et une autre pour le Frame qui occupe tout le reste du client et qui servira, en fonction des menus a appeler des 'Frames Clientes' héritières de 2 Frames modèle (FrameMenuModele et FrameClientModel).

    Au lancement de mon projet, tout s'initialise correctement. La Frame Menu et la Frame Client s'affichent correctement (Capture3.PNG). Les 2 Frames sont appelées depuis la MainForm par le code suivant :

    // Affiche le Frame Panel Standard (Menu)
    if Assigned (FramePanelEnCours) then FreeAndNil(FramePanelEnCours);
    FramePanelEnCours := TIWFrameMenuStandard.Create(self);
    FramePanelEnCours.Parent := IWRegionPanel;
    FramePanelEnCours.Afficher;

    // Affiche le Frame _Security
    if Assigned (FrameEnCours) then FreeAndNil(FrameEnCours);
    FrameEnCours := TIWFrame_Security.Create(self);
    FrameEnCours.Parent := IWMainRegion;
    FrameEnCours.Afficher;

    A titre provisoire, j'ai placé un bouton 'Fermer' sur le Frame Menu pour fermer le Frame client car je ne trouvais pas de solution. Le code OnClick est le suivant :

    if Assigned (FrameEnCours) then FreeAndNil(FrameEnCours);

    Cela fonctionne. Le Frame client disparaît, laissant la place à IWMainRegion vierge. Mais cela ne résout pas mon problème puisqu'à l'origine, ce bouton Fermer devait se trouver sur le Frame Client (FrameEnCours) et je me retrouve avec le problème originel qui consistait à pour fermer ce FrameEnCours depuis celui-ci.

    Regardez la Capure2.PNG. L'utilisateur saisit ses identifiants qui sont corrects et clique sur Valide. Après la procédure de test, il est logué. Donc, le OnClick du bouton Valide doit fermer le FrameEnCours (ici la page de login) et rendre en quelque sorte, la main à MainForm, donc se retrouver avec sa IWMainRegion vierge (Capture4.PNG) où seul le FrameMenu (FramePanelEnCours) est visible. Mais aucune action sur le Frame Client ne me permet de le fermer. J'ai tout essayé. Un Hide, visible False et même un FreeAndNil sur le bouton Valide. La Frame ne disparait pas. Seul le bouton Fermer du FrameMenu le ferme. Mais ce n'est pas une solution. Ne pas mettre les boutons de fermeture ou de validation du FramePanelEnCours sur FrameMenu !

    Aidez moi SVP
    Images attachées Images attachées     

  4. #4
    Membre averti
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Par défaut Suite...
    Supposons que je veuille déplacer le bouton 'Fermer' se trouvant actuellement sur le FramePanelEnCours vers le FrameEnCours et obtenir la fermeture de ce dernier en cliquant dessus. Quel est le code du OnClick du bouton 'Fermer', libérant le FrameEnCours de manière à obtenir une IWMainRegion vierge (Capture4.PNG) ?

    Voilà tout mon problème. Le FrameEnCours ne veut rien savoir. Il ne disparaît pas.

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 658
    Billets dans le blog
    65
    Par défaut
    bonjour,

    J'ai déjà eu quelques problèmes de ce genre mais avec FMX . A cette occasion j'avais découvert InvalidateRect et ShaiLeTroll m'avais indiqué que Invalidate existait pour la VCL .
    Donc sans conviction (je n'ai pas regardé pour intraweb) quid d'un :
    IWMainRegion.invalidate ? après la destruction de la FrameEncours


    [Edit] au temps pour moi ! j'ai fait un test avec XE4 , je ne connaissais pas les frames avec IW (version 14.0.22) et donc j'ai voulu en avoir le cœur net

    deux unités plus tard :
    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
    unit Unit4;
     
    interface
     
    uses
      Classes, SysUtils, IWAppForm, IWApplication, IWColor, IWTypes,
      IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl, IWCompButton,
      Vcl.Controls, Vcl.Forms, Unit1, IWVCLBaseContainer, IWContainer,
      IWHTMLContainer, IWHTML40Container, IWRegion;
     
    type
      TIWForm4 = class(TIWAppForm)
        OpenFrame: TIWButton;
        IWRegion1: TIWRegion;
        CloseFrame: TIWButton;
        procedure OpenFrameClick(Sender: TObject);
        procedure CloseFrameClick(Sender: TObject);
      public
        aFrame : TFrame;
      end;
     
    implementation
     
    {$R *.dfm}
     
    procedure TIWForm4.CloseFrameClick(Sender: TObject);
    begin
    aFrame.Free;
    //IwRegion1.Invalidate;   // inutile
    end;
     
    procedure TIWForm4.OpenFrameClick(Sender: TObject);
    begin
    aFrame:=TIWFrame1.Create(self);
    aFrame.Parent := IWRegion1;
    end;
     
    initialization
      TIWForm4.SetAsMainForm;
     
    end.
    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
     
    // La frame
    unit Unit1;
     
    interface
     
    uses
      SysUtils, Classes, Controls, Forms,
      IWVCLBaseContainer, IWColor, IWContainer, IWRegion, IWVCLBaseControl,
      IWBaseControl, IWBaseHTMLControl, IWControl, IWCompButton, IWHTMLContainer,
      IWHTML40Container;
     
    type
      TIWFrame1 = class(TFrame)
        IWFrameRegion: TIWRegion;
        Close: TIWButton;
        procedure CloseClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
     
    implementation
     
    {$R *.dfm}
     
     
    procedure TIWFrame1.CloseClick(Sender: TObject);
    begin
    FreeAndNil(Self);
    end;
     
    end.
    1° Constatation , le FreeAndNil fonctionne dans la Frame
    2° Constatation , de la forme principale un Free suffit, pas besoin de Invalidate

    je ne suis pas sur que mon test corresponde parfaitement à ton application , mais cela me parait engageant , je vais investiguer d'avantage sur les frames IW (il y a peut être là une chose que je pourrais appliquer pour ma propre application qui allie INTRAWEB mais aussi JQueryMobile)

  6. #6
    Membre averti
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Par défaut .....
    Merci beaucoup SergioMaster. Je vérifie puis je reviens vers toi.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/07/2013, 02h05
  2. Fermer une Frame à partir d'un Panel
    Par loyns dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 21/05/2013, 22h49
  3. fermer une frame
    Par xavierm02 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/11/2008, 13h05
  4. Réponses: 2
    Dernier message: 24/01/2008, 08h46
  5. fermer une frame a partir d'une autre frame
    Par zekmek dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/10/2006, 13h31

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