Bonsoir,
a tous j'ai un TMenu auquel je veux ajouter des menus dynamiquement je veux dire depuis mon code source.
merci
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 ?
Bidouilleuse Delphi
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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 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" ?
Mes tutoriels
Avant de poster :
- F1
- FAQ
- Tutoriels
- Guide du développeur Delphi devant un problème
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager