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

Langage Delphi Discussion :

Ajout d'un menu et d'un sous menu


Sujet :

Langage Delphi

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    529
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 529
    Points : 464
    Points
    464
    Par défaut Ajout d'un menu et d'un sous menu
    Salut,
    j'ai ajouté un menu et un sous menu en usant un code, même qu'il existe un exemple livré avec delphi.
    mon problème est le suivant, si je ferme mon application et je la réouvre je ne trouve plus le menus que j'ai créé.
    je souhaiterai une aide.
    Merci

  2. #2
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Montre ton code...

  3. #3
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    Ben c'est normal, ton .exe ne se modifi pas, tu retrouve donc ton appli exactement comme tu l'a créé, sans le menu supplementaire.
    Tu dois faire un fichier externe, un fichier ini par exemple ou un simple txt que tu formatera a ta guise et stocker les infos relative a ton menu.
    MenuParent:....
    Caption:....
    OnClickProcedure:....

    et au chargement de ton appli tu lit ton fichier et tu recré les menu. Je ne sais pas si c'est la meilleur solution, mais j'ai deja fait un truc du genre et ca marche tres bien.

    Voila a++
    Qwaz

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Je continue sur ce que dit Qwazerty, mais soit tu peux regénérer les menus via une Base de données, ou via un Fichier mais il te faut une source, donc si ton utilisateur ajoute des menus, et qu'il veut les revoir, il faut les sauvegarder ... ou alors, tu lance ce fameux code systématiquement

    Sinon, si cela intéresse, une Astuce pour enregistrer un Menu et le chargement ultra simplement via un fichier qui sera ni plus ni moins un bout de DFM !

    Tu sauvegarde le noeud qui contient les item à sauvegarder, le mieux c'est que ce noeud soit lui même générer par code, si il y n'y a pas de fichier

    Donc écriture du Noeud
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WriteDFMStringInFile(ComponentToString(RootMenu), 'FichierTruc.DFM');
    Puis à la seconde execution tu fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ASuperMenu.Add(StringToComponent(ReadDFMStringFromFile('FichierTruc.DFM')) as TMenuItem);
    en sachant que ASuperMenu aurait du être le Parent de RootMenu, mais comme il y a un fichier il ne faut pas créer RootMenu, car celui-ci va se créer via le fichier ...

    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
    procedure WriteDFMStringInFile(const AString, FileName: string);
    var
       FLNC: File;
    begin
      AssignFile(FLNC, FileName);
      Rewrite(FLNC, 1);
      try
         BlockWrite(FLNC, AString[1], Length(AString));
      finally
         CloseFile(FLNC);
      end;
    end;
    FileSize(var F)
     
    function ReadDFMStringFromFile(const FileName: string): string;
    var
       FLNC: File;
    begin
      AssignFile(FLNC, FileName);
      Reset(FLNC, 1);
      try
         SetLength(Result, FileSize(FLNC));
         BlockWrite(FLNC, Result[1], Length(Result));
      finally
         CloseFile(FLNC);
      end;
    end;
    bon, il faudrait faire une variante de ComponentToString/StringToComponent, en utilisant un TFileStream, je les ai quelques part, mais je sais pas où ...

    code de l'Aide Delphi, ben oui, ce n'est que dans l'aide, étrange car utile ...

    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
      function ComponentToString(Component: TComponent): string;
       var
          BinStream: TMemoryStream;
          StrStream: TStringStream;
          s: string;
       begin
          BinStream := TMemoryStream.Create;
          try
             StrStream := TStringStream.Create(s);
             try
                BinStream.WriteComponent(Component);
                BinStream.Seek(0, soFromBeginning);
                ObjectBinaryToText(BinStream, StrStream);
                StrStream.Seek(0, soFromBeginning);
                Result := StrStream.DataString;
             finally
                StrStream.Free;
             end;
          finally
             BinStream.Free
          end;
       end;
     
       function StringToComponent(const Value: string): TComponent;
       var
         StrStream:TStringStream;
         BinStream: TMemoryStream;
       begin
         StrStream := TStringStream.Create(Value);
         try
           BinStream := TMemoryStream.Create;
           try
             ObjectTextToBinary(StrStream, BinStream);
             BinStream.Seek(0, soFromBeginning);
             Result := BinStream.ReadComponent(nil);
           finally
             BinStream.Free;
           end;
         finally
           StrStream.Free;
         end;
       end;

  5. #5
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    Ben ton astuce pour sauvegarder les composants va peut etre bien m'etre utile pour tout autre chose
    Merci bien!!
    A++
    Qwaz

Discussions similaires

  1. [AC-2000] Menu accordéon et/ou sous-menu
    Par philben dans le forum IHM
    Réponses: 2
    Dernier message: 24/05/2009, 22h18
  2. Ajouter un sous-menu avec flèche dans un menu
    Par beegees dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/01/2009, 13h35
  3. Display un sous menu : affichage progressif des sous rubriq.
    Par sokette dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/12/2005, 16h15
  4. Menu principal et click sous menu
    Par angiosfr dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 22/11/2005, 21h38

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