Bonsoir,
a tous j'ai un TMenu auquel je veux ajouter des menus dynamiquement je veux dire depuis mon code source.
merci
Version imprimable
Bonsoir,
a tous j'ai un TMenu auquel je veux ajouter des menus dynamiquement je veux dire depuis mon code source.
merci
Les méthodes Merge et UnMerge des TMainMenu ne te conviennent pas ?
Sinon, parles tu de TMainMenu ou de TPopupMenu ?:aie:
Voici un bout de code qui crée dynamiquement les items d'un menu :
En tenant compte que les libellés des menus sont dans LstLibelle, que le menu pop-up existant s'appelle PopUpMenu et que le procédure à appeler pour le Onclick du menu est MnuDataBaseClick()Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Var NewItem : TMenuItem; I : Integer; begin For I := 0 to LstLibelle.Count - 1 do begin NewItem := TMenuItem.Create(Self); NewItem.Name := 'mnuDataBase' + IntToStr(I); NewItem.Caption := LstLibelle[I]; NewItem.OnClick := MnuDataBaseClick; PopUpMenu.Items.Add(NewItem); end; end;
Bonjour
J'utilise à peu près le même code que Okaryn sauf que je crée le menu sur le OnClique d'un autre menu
J'ai un menu Fichier > Nouveau et un menu Fenetre
Lorsque je clique sur Fichier > Nouveau j'appelle ma procedure Cliquer
Info sup. : Cpteur est un entier positif
Lorsque je créer le premier document j'obtiens un item "Document1" dans le menu Fenetre. Jusque là, rien d'anormal.Code:
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 procedure TFrmStart.Cliquer(const action : string); var Nom, Tps, Old : string; Lig, Col, Sel : Integer; begin if (action = 'Nouveau') then begin Nom := 'Document' + IntToStr(Cpteur); Inc (Cpteur); stForm := Nom; Application.CreateForm(TFrmDocument,Nom); CreerMenu(stForm); end; ... end; procedure TFrmStart.CreerMenu(Titre : string); var Menu : TMenuItem; begin Menu := TMenuItem.Create(Self); Menu.OnClick := FenetreClic; Menu.Caption := Titre; MenuFenetre.Add(Menu); end; procedure TFrmStart.FenetreClic(Sender : TObject); var i : Integer; Titre : String; begin if (Sender is TMenuItem) then begin Titre := (Sender as TMenuItem).Caption; Titre := AnsiReplaceText(Titre, '&',''); For i := 0 to FrmStart.MDIChildCount - 1 do begin if (FrmStart.MDIChildren[i].Caption = Titre) then begin FrmStart.MDIChildren[i].Show; if (FrmStart.MDIChildren[i].WindowState = wsMinimized) then FrmStart.MDIChildren[i].WindowState := wsNormal; end; end; end; end;
Mais lorsque je crée un deuxième document, j'obtient un deuxième item dans le menu Fenetre mais celui-ci s'appelle toujours "Document1".
J'ai mis un point d'arrêt dans mon source sur la ligne "MenuFenetre.Add(Menu);" pour voir ce qu'il y avait dans le caption et j'ai bien "Document2".
Quelqu'un pourrait-il m'expliquer pourquoi, lorsque j'execute la suite, le caption n'a pas changé dans mon menu Fenetre et que je me retrouve avec deux Items "Document1" ?