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.
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.
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
Mon Tutoriel sur le développement Intraweb
N'oubliez pas de consulter les FAQ Delphi ainsi que les Cours et tutoriels sur la programmation Delphi
Humm merci mais... Ca ne marche pas.
Voici mon code :
Frame2 (Unit2.pas) à bien été ajoutée au Projet !
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;
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 !
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:
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.
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;
Cordialement
bonjour,
il faut à un moment donnée déclarer Frame2 de type TFrame2 dans ton unit1.
@++
Dany
Mon Tutoriel sur le développement Intraweb
N'oubliez pas de consulter les FAQ Delphi ainsi que les Cours et tutoriels sur la programmation Delphi
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???Envoyé par Pascal Jankowski
Edam,
Deux techniques sont proposées pour retrouver une frame créée à la volée :Envoyé par edam
Soit utiliser la méthode FindComponent en ayant pris soin de renseigner la propriété name de la Frame :
Exemple 1 :
Pour utiliser la Frame créée en run-time
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;
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:
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 uses unit2; procedure TForm1.Crances1Click(Sender: TObject); begin with TFrame2.create(panel1) do begin Parent := Panel1; align := alClient; end; end;
Utilisation de la fonction getFrame
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;
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
Merci "Pascal Jankowski" pour votre aide, mais un nouveau problème ce pose en rapport à votre code :
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...
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;
Cordialement
Will
Sois plus clair pourrais-je voir ton code de façon détaillée.
Merci![]()
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.
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
Mon Tutoriel sur le développement Intraweb
N'oubliez pas de consulter les FAQ Delphi ainsi que les Cours et tutoriels sur la programmation Delphi
"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 ?
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
Mon Tutoriel sur le développement Intraweb
N'oubliez pas de consulter les FAQ Delphi ainsi que les Cours et tutoriels sur la programmation Delphi
Alors comment peut-on faire "apparaître" la Frame sur mon Panel ?
Si je veux utiliser le code :
(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 ?)
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
Cordialement
Will
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 ?
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
Mon Tutoriel sur le développement Intraweb
N'oubliez pas de consulter les FAQ Delphi ainsi que les Cours et tutoriels sur la programmation Delphi
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 ?
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
Mon Tutoriel sur le développement Intraweb
N'oubliez pas de consulter les FAQ Delphi ainsi que les Cours et tutoriels sur la programmation Delphi
Partager