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 :

Ouverture d'une Frame...


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 45
    Par défaut Ouverture d'une Frame...
    Bonsoir à tous... Je suis en ce moment sous Delphi 7. J'ai crée une Frame et j'aimerais qu'elle s'ouvre lorsque l'on clic sur un "composants" d'un MainMenu.

    Cordialement,

    Will / Nicolas.

  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
    bonjour,

    alors il faut déjà dire qu'une Frame n'est pas autonome, elle doit être affichée à l'intérieur d'un conteneur qui sera spécifié dans sa propriété parent. En supposant que MonPanel soit le composant supposé accueillir la frame, voici par exemple un code dans l'évennement onclick de ton menuitem :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MaFrame := TMaFrame.create( application);
      MaFrame.Parent := MonPanel;
      MaFrame.align := alClient; // ainsi elle occupera toute la place du panel MonPanel
    @++
    Dany

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 45
    Par défaut
    Humm merci mais... Ca ne marche pas.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm1.Crances1Click(Sender: TObject);
    begin
      Frame2 := TFrame2.create(application);
      Frame2.Parent := Panel1;
      Frame2.align := alClient;
    end;
    Frame2 (Unit2.pas) à bien été ajoutée au Projet !
    Panel1 existe bien !

    Les erreurs :

    (Frame2 := TFrame2.create(application); ] Identificateur non déclaré !
    Frame2.Parent := Panel1; ] Opérateur ou point virgule attendu !
    Frame2.align := alClient; ] Opérateur ou point virgule attendu !

  4. #4
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    As-tu ajouté unit2 dans la clause uses de l'unité qui contient TForm1 ?


    Sinon côté code tu peux faire l'économie de frame2, en procédant de la sorte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    uses unit2;
     
    procedure TForm1.Crances1Click(Sender: TObject); 
    begin 
      with TFrame2.create(panel1) do
      begin
        Parent := Panel1; 
        align := alClient; 
      end;
    end;
    Sinon tu peux aussi ajouter ton TFrame2, en design-time. Pour cela, tu vas dans la palette d'outils section standard puis tu utilises Frames. Comme cela tu inclus directement à la conception ta frame là où tu le désires.

    Cordialement

  5. #5
    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
    bonjour,

    il faut à un moment donnée déclarer Frame2 de type TFrame2 dans ton unit1.

    @++
    Dany

  6. #6
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Sauf s'il utilise la partie de code que je lui ai décrit dans mon post précédent.

    Cordialement

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 45
    Par défaut
    Merci, ca marche à la perfection

  8. #8
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    Citation Envoyé par Pascal Jankowski
    Sauf s'il utilise la partie de code que je lui ai décrit dans mon post précédent.

    Cordialement
    et s'il veut utlisé la frame crée???

  9. #9
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Edam,

    Citation Envoyé par edam
    et s'il veut utiliser le frame créée ?
    Deux techniques sont proposées pour retrouver une frame créée à la volée :

    Soit utiliser la méthode FindComponent en ayant pris soin de renseigner la propriété name de la Frame :

    Exemple 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    uses unit2; 
     
    procedure TForm1.Crances1Click(Sender: TObject); 
    begin 
      with TFrame2.create(panel1) do 
      begin 
        Parent := Panel1; 
        align := alClient; 
        name := 'maFrame';
      end; 
    end;
    Pour utiliser la Frame créée en run-time
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      TFrame2(form1.findComponent('maFrame').maPropriété ...
      //ou
      TFrame2(form1.findComponent('maFrame').maMethode ...

    Ou seconde méthode parcourir tous les composants de la form1 jusqu'à trouver le Frame créée à la volée :

    Exemple 2:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    uses unit2; 
     
    procedure TForm1.Crances1Click(Sender: TObject); 
    begin 
      with TFrame2.create(panel1) do 
      begin 
        Parent := Panel1; 
        align := alClient; 
      end; 
    end;
    La fonction getFrame qui renvoit un TComponent si touvé sinon nil

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function getFrame(winControl: TWinControl):TComponent;
    var i: integer;
    begin
      result := nil;
      for i := 0 to pred(winControl.ComponentCount) do
        if winControl.Components[i] is Tframe2
          then begin
                 result := winControl.Components[i];
                 break;
               end;
    end;
    Utilisation de la fonction getFrame

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var w: TComponent;
    begin
      w := getFrame(Form1);
      if w  <> nil
        then TFrame2(w).maMethode...
        //ou TFrame2(w).maPropriété...
    end;

    Cordialement

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 45
    Par défaut
    Merci "Pascal Jankowski" pour votre aide, mais un nouveau problème ce pose en rapport à votre code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm1.Crances1Click(Sender: TObject); 
    begin 
      with TFrame2.create(panel1) do 
      begin 
        Parent := Panel1; 
        align := alClient; 
      end; 
    end;
    J'ai ajouté une deuxième Frame et quand je vais sur une, puis sur l'autre puis à nouveau sur la première une erreur survient : la Frame2 existe déja...

    Cordialement

    Will

  11. #11
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Sois plus clair pourrais-je voir ton code de façon détaillée.

    Merci

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 45
    Par défaut
    le voici (Unit1)

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, IBCustomDataSet, IBQuery, IBDatabase, Grids, DBGrids,
      IBUpdateSQL, Menus, ExtCtrls, ComCtrls;
     
    type
      TForm1 = class(TForm)
        MainMenu1: TMainMenu;
        Fichier1: TMenuItem;
        Quitter1: TMenuItem;
        Ges1: TMenuItem;
        Crances1: TMenuItem;
        N1: TMenuItem;
        Apropos1: TMenuItem;
        Panel1: TPanel;
        Dettes1: TMenuItem;
        StatusBar1: TStatusBar;
        procedure Quitter1Click(Sender: TObject);
        procedure Apropos1Click(Sender: TObject);
        procedure Crances1Click(Sender: TObject);
        procedure Dettes1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    uses Unit2, Unit3, Unit4;
     
    {$R *.dfm}
     
    procedure TForm1.Quitter1Click(Sender: TObject);
    begin
    Application.Terminate;
    end;
     
    procedure TForm1.Apropos1Click(Sender: TObject);
    begin
    Form3.Show;
    end;
    procedure TForm1.Crances1Click(Sender: TObject);
    begin
    with TFrame2.create(panel1) do
    begin
    Parent := Panel1;
    align := alClient;
    end;
    StatusBar1.Panels[1].Text:='Créances';
    end;
     
    procedure TForm1.Dettes1Click(Sender: TObject);
    begin
    with TFrame4.create(panel1) do
    begin
    Parent := Panel1;
    align := alClient;
    end;
    StatusBar1.Panels[1].Text:='Dettes';
    end;
     
    end.

  13. #13
    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
    bonjour,

    Mais pourquoi créer une nouvelle frame à chaque fois ? Il faut soit le retrouver dans la liste des composants de la fiche, soit en créant des variables d'instance (ce qui serait peut être plus simple si tu n'as que quelque frames)

    @++
    Dany

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 45
    Par défaut
    "Sinon tu peux aussi ajouter ton TFrame2, en design-time. Pour cela, tu vas dans la palette d'outils section standard puis tu utilises Frames. Comme cela tu inclus directement à la conception ta frame là où tu le désires."

    C'est ce que j'ai fait... mais alors, comment ouvrir la Frame ?

  15. #15
    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
    bonjour,

    si tu le fais en conception, ta Frame est ouverte lorsque tu affiche ta form, tu ne 'maitrise' pas vraiment son cycle de vie dans ce cas.

    @++
    Dany

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 45
    Par défaut
    Alors comment peut-on faire "apparaître" la Frame sur mon Panel ?

    Si je veux utiliser le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm1.Crances1Click(Sender: TObject); 
    begin 
      with TFrame2.create(panel1) do 
      begin 
        Parent := Panel1; 
        align := alClient; 
      end; 
    end
    (et donc je ne dois pas utiliser le "design time", je dois introduire dans le Code si dessus, ce qui se trouve actuellement dans mon Unit2 (TFrame2 en Design time ?)

    Cordialement

    Will

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 45
    Par défaut
    Hummm... Non. J'aimerais gardé mon TFrame en "mode" Design Time. Mais comment faire en sorte que je n'aie plus l'erreur : TFrame existe déja ?

    ---

    J'ai pensés à metre une condition genre :

    Si TFrame2 est déja existant
    alors
    Il ne faut que changé le "Parent" de Panel1

    Mais si TFrame2 n'existe pas
    alors
    Il faut le crée et changé le "Parent" de Panel1

    Si cela est bon, comment faire ?

  18. #18
    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
    ce que je comprend pas, c'est que si tu pose ta TFrame en Design time, elle est automatiquement créée lorsque tu lance l'application et elle a pour parent le composant sur lequel tu l'a posé. Alors pourquoi vouloir la recreer ?
    Ce que j'avais cru comprendre, c'est que tu voulais afficher une frame ou une autre en fonction du choix de l'utilisateur. Dans ce cas, tu créé tes 2, 3, N Frames différentes, mais tu ne les pose pas en design-time sur ton panel. Lors du click sur une option tu procède ainsi :

    - Est-ce que cette frame existe déjà ?
    oui --> tu l'affiche au dessus avec BringToFront
    non --> tu l'instancie avec le code qu'on t'a donné plus haut

    @++
    Dany

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 45
    Par défaut
    Hum, je viens de comprendre (faire glissé l'objet frame sur mon Form1).

    Cependant, j'ai plus Frame qui ne doivent s'affiché que lorsque je clic sur un des composants de mon menu.

    Comment faire ?

  20. #20
    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
    ok, on est d'accord, donc Pascal Jankowski t'as tout donné pour faire ce que tu veux : comment créer l'instance de ta Frame et comment la retrouver une fois créée. Regarde les précédentes réponses, il y a tout dedans.

    @++
    Dany

Discussions similaires

  1. Réponses: 9
    Dernier message: 18/06/2008, 23h56
  2. Ouverture d'une page dans une frame
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/03/2008, 17h55
  3. Faire disparaitre une frame à l'ouverture d'une autre
    Par Balou64 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 28/06/2007, 14h28
  4. [java3D] ouverture d'une autre Frame Java3D
    Par bagoul dans le forum 3D
    Réponses: 3
    Dernier message: 07/04/2007, 12h34
  5. [Boa] Ouverture une frame construite.
    Par Gamal le Celte dans le forum EDI/RAD
    Réponses: 2
    Dernier message: 20/02/2007, 16h15

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