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

EDI Delphi Discussion :

Edition de la barre de menu textuelle de l'EDI de Delphi


Sujet :

EDI Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut Edition de la barre de menu textuelle de l'EDI de Delphi
    Bonjour.
    Dans les applications type Office de MS, on peut éditer les DEUX barres de menus : barre "textuelle" et barre des "boutons". Dans Delphi (classique, maximum version 7), on peut éditer la "barre des boutons" ; et la barre "textuelle" ? Je n'ai rien trouvé dans Delphi lui-même. Outils tiers (Ressource hacker, etc ) ? SVP : ne me demandez pas POURQUOI je veux le faire, j'ai mes raisons, c'est trop long.
    Merci d'avance ...
    Dernière modification par tourlourou ; 27/05/2016 à 09h17. Motif: précision titre

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Sous Delphi ces informations sont dans une ressource "DFM"

    http://lookinside.free.fr/delphi.php?Delphi+et+les+DFM
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Invité
    Invité(e)
    Par défaut Je crois qu'on s'est mal compris ...
    Je ne parlais pas des menus des applications créées avec Delphi, mais des menus de l'EDI de Delphi lui-même !

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Delphi est fait avec Delphi ... donc la proposition de Paul TOTH est applicable mais si extrêmement périlleuse car une DFM binaire est bien plus compliqué à modifier qu'une DFM Texte
    Faudrait essayer d'extraire la DFM Binaire, puis de la passer en DFM Text avec ObjectBinaryToText, modifier la chaine obtenu puis repasser en binaire via ObjectBinaryToText
    Dans l'aide de D7, c'était même illustré par un exemple

    On voit d'ailleurs
    Code DFM : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ImageList1OnChangeMainMenu1ChangeLefteTop? 	TMenuItemFileMenuCaption&File
    GroupIndex
    HelpContextè 	TMenuItemNew1Caption&NewHelpContextéOnClick	New1Click 	TMenuItemmnuNewActionSeparatorCaption-  	TMenuItemFileNewItemActionFileNewCommandCaption	&Other...  	TMenuItemmnuBetweenOtherandCustomizeCaption-  	TMenuItemmnuCustomizeActionactnCustomizeNew   	TMenuItemFileOpenItemActionFileOpenCommand  	TMenuItemFileOpenProjectItemActionFileOpenProjectCommand  	TMenuItemOpenFromRepository1ActionFileOpenFromRepository  	TMenuItemFileClosedFilesItemCaption&ReopenHelpContextõHintReopen 	TMenuItemReopenPropertiesItemCaption

    Tu peux aussi récupérer le Handle des Menus et manipuler avec les API Windows, je l'ait fait pour remettre en Enabled des menus inactifs dans une applications tiers.

    Je pense que certains menus sont créés par code et non à partir du DFM
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par alberich Voir le message
    Je ne parlais pas des menus des applications créées avec Delphi, mais des menus de l'EDI de Delphi lui-même !
    Dans ce cas je le ferais avec un Expert, au chargement il peut utiliser les RTTI pour explorer les composants utilisés dans l'IDE et les modifier à sa guise
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    A peu près d'accord avec paul, sauf que tu peux certainement utiliser OpenToolsAPI(OTA). Regarde du coté des interfaces IOTA* dans l'unité ToolsAPI.
    Gexperts rajoute un menu, je sais pas si les sources sont disponibles.

  7. #7
    Invité
    Invité(e)
    Par défaut Trop "kamikaze"
    En fait, j'ai déjà trouvé 32 fichiers DFM et :
    1) Pour savoir lequel est le bon.
    2) Savoir comment le modifier.
    je crois que c'est effectivement périlleux, je ne voudrais pas abuser du "ghost" chaque fois que j'aurai shooté ma configuration. La sagesse consiste dans ce cas à s'abstenir, vu qu'il n'y a pas d'outil intégré "prévu pour".
    Merci encore ...

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut
    Paul et ShaiLeTroll
    le dfm ne sert qu'a la compilation
    il permet de construire les différentes ressources dont l’exécutable à besoin
    dans dans cette executable tu ne retrouveras jamais le dfm binaire

    pour passer d'un binaire a un text c'est super compliqué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure LoadDFM( filename : String; Dest : TStrings ); 
    var 
      InStream  : TFileStream; 
      OutStream : TMemoryStream; 
    begin 
      InStream  := TFileStream.Create( filename, fmOpenReadWrite ); 
      OutStream := TMemoryStream.Create; 
      ObjectResourceToText( InStream, OutStream ); 
      InStream.Free; 
      OutStream.Seek(0,0); 
      Dest.LoadFromStream( OutStream ); 
      OutStream.Free; 
    end;
    si je me souviens bien il faut tester les trois premier caractère qui doivent normalement être de cette valeur $FF0A00
    si tu trouve cela c'est donc un dfm binaire sinon c'est du texte

    Quand a la question de base la modification des menu peut effectivement se faire a partir des expert
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    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 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Citation Envoyé par anapurna Voir le message
    salut
    Paul et ShaiLeTroll
    le dfm ne sert qu'a la compilation
    il permet de construire les différentes ressources dont l’exécutable à besoin
    dans dans cette executable tu ne retrouveras jamais le dfm binaire
    Tu te trompes !
    J'ai même fourni dans mon message un extrait du DFM binaire issu de bds.exe de XE2 qui concerne justement le MainMenu avec son premier TMenuItem au libellé '&File' (oui en anglais dans l'exe)

    Code DFM : Sélectionner tout - Visualiser dans une fenêtre à part
    ImageList1OnChangeMainMenu1ChangeLefteTop? 	TMenuItemFileMenuCaption&File

    Voici d'ailleurs la même chose extraite via 7-zip et converti par le code que tu as fourni (j'ai juste mis ObjectText au lieu de ObjectResource)

    bds\.rsrc\RCDATA\TAPPBUILDER, regarde à la ligne 30 ... c'est bien du DFM binaire dans l'EXE que l'on traduit aisément en DFM Texte
    Code DFM : 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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    inherited AppBuilder: TAppBuilder
      HorzScrollBar.Increment = 48
      VertScrollBar.Increment = 6
      Caption = ' '
      ClientHeight = 114
      ClientWidth = 788
      DefaultMonitor = dmMainForm
      Menu = MainMenu1
      Scaled = False
      ScreenSnap = True
      OnActivate = FormActivate
      OnClose = FormClose
      OnCloseQuery = WindowCloseQuery
      OnConstrainedResize = FormConstrainedResize
      OnShortCut = FormShortCut
      ExplicitWidth = 804
      ExplicitHeight = 172
      PixelsPerInch = 96
      TextHeight = 13
      object ControlBar1: TControlBar
        Left = 0
        Top = 0
        Width = 788
        Height = 57
     
    	...
     
     
      object MainMenu1: TMainMenu
        Images = ImageList1
        OnChange = MainMenu1Change
        Left = 101
        Top = 63
        object FileMenu: TMenuItem
          Caption = '&File'
          GroupIndex = 10
          HelpContext = 1000
          object New1: TMenuItem
            Caption = '&New'
            HelpContext = 1001
            OnClick = New1Click
            object mnuNewActionSeparator: TMenuItem
              Caption = '-'
            end
            object FileNewItem: TMenuItem
              Action = FileNewCommand
              Caption = '&Other...'
            end
            object mnuBetweenOtherandCustomize: TMenuItem
              Caption = '-'
            end
            object mnuCustomize: TMenuItem
              Action = actnCustomizeNew
            end
          end
          object FileOpenItem: TMenuItem
            Action = FileOpenCommand
          end
          object FileOpenProjectItem: TMenuItem
            Action = FileOpenProjectCommand
          end
          object OpenFromRepository1: TMenuItem
            Action = FileOpenFromRepository
          end
          object FileClosedFilesItem: TMenuItem
            Caption = '&Reopen'
            HelpContext = 1013
            Hint = 'Reopen'
            object ReopenPropertiesItem: TMenuItem
              Caption = 'Properties...'
              HelpContext = 1022
              OnClick = ReopenPropertiesItemClick
            end
          end
          object FileSaveSeparater: TMenuItem
            Caption = '-'
          end
          object FileSaveItem: TMenuItem
            Action = FileSaveCommand
          end
          object FileSaveAsItem: TMenuItem
            Action = FileSaveAsCommand
          end
          object FileSaveProjectAs: TMenuItem
            Action = FileSaveProjectAsCommand
          end
          object FileSaveAllItem: TMenuItem
            Action = FileSaveAllCommand
          end
          object FileCloseItem: TMenuItem
            Action = FileCloseCommand
          end
          object FileCloseAllItem: TMenuItem
            Action = FileCloseAllCommand
          end
          object N10: TMenuItem
            Caption = '-'
          end
          object FilePrintItem: TMenuItem
            Action = FilePrintCommand
          end
          object N11: TMenuItem
            Caption = '-'
          end
          object FileExitItem: TMenuItem
            Action = FileExitCommand
          end
        end
        object EditMenu: TMenuItem
          Caption = '&Edit'
          GroupIndex = 20
          HelpContext = 1025
          OnClick = EditMenuClick
          object EditUndoItem: TMenuItem
            Action = EditUndoCommand
          end
          object EditRedoItem: TMenuItem
            Action = EditRedoCommand
          end

    Il suffit même de lire le constructeur du TCustomForm qui charge la ressource par le nom de la classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Result := InternalReadComponentRes(ClassType.ClassName,
          FindResourceHInstance(FindClassHInstance(ClassType)), Instance) or Result;
    D'ailleurs, cela limite le nom d'une classe de TForm à 64 caractères Voir System.SysUtils.IsValidIdent


    J'ai déjà modifié des SQL directement dans un .EXE car stocké via un DataModule
    On peut même le faire avec du SQL stocké en const !
    Je l'ai fait avec UltraEdit, la chance, je devais mettre un truc plus petit, j'avais bourré avec des espaces pour que cela fasse la bonne taille

    je l'ai fait aussi récemment sur un .class car je n'avais pas les moyens de recompiler le .java, j'ai changé le nom d'un serveur à l'arrache

    Le DFM est stocké en mode binaire dans l'exe comme n'importe quelle ressource !
    C'est en Delphi 4 ou 5 que l'IDE supportait une nouveauté : le DFM en mode Texte
    pour faciliter sa modification par un éditeur de texte
    A la compilation,
    si le DFM dans le projet est binaire, il est intégré comme ressource tel quel
    si le DFM dans le projet est texte, il est converti puis intégré comme ressource

    Citation Envoyé par anapurna Voir le message
    si je me souviens bien il faut tester les trois premier caractère qui doivent normalement être de cette valeur $FF0A00
    N'Est-ce pas plutôt TPF0 ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par guillemouze Voir le message
    A peu près d'accord avec paul, sauf que tu peux certainement utiliser OpenToolsAPI(OTA). Regarde du coté des interfaces IOTA* dans l'unité ToolsAPI.
    Gexperts rajoute un menu, je sais pas si les sources sont disponibles.
    c'est l'OTA qu'utilise les expert en effet

    Citation Envoyé par anapurna Voir le message
    salut
    Paul et ShaiLeTroll
    le dfm ne sert qu'a la compilation
    il permet de construire les différentes ressources dont l’exécutable à besoin
    dans dans cette executable tu ne retrouveras jamais le dfm binaire
    oh que si, sous Delphi 2 il me semble, j'avais fait déjà un DFM Extractor
    http://tothpaul.free.fr/sources.php?tools.dfmx
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  11. #11
    Invité
    Invité(e)
    Par défaut Loupé !
    J'ai réussi à télécharger un "expert". En fait je voulais bricoler dans le menu de mon vieux D3 Pro (pour lequel j'ai eu la licence en 2002 via un bouquin allemand de tutos qui contenait un CD, version officielle et légale ! ). Malheureusement l'expert ne fonctionne qu'avec la version 3.02 et moi j'ai la 3.0 ...
    100% des gagnants ont tenté leur chance ... apparemment 100% des perdants aussi !
    Dernière modification par Invité ; 27/05/2016 à 19h17.

  12. #12
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    a bin je suis pas venu pour rien
    je ne pensais absolument pas que le dfm étais mis dans les ressource de l'exe ...
    sachant que les menu sont deja des resource windows je me suis meme pas posé la question de savoir comment delphi se sert du DFM
    bravo a tout les deux ^^
    je m'incline


    Pour les OTA (Open Tool Api) c'est des unités mises à notre disposition pour interagir avec l'ide
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  13. #13
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question peut être inutile
    Par harmonips dans le forum Images
    Réponses: 0
    Dernier message: 24/04/2012, 05h49
  2. petite question, peut-être très simple
    Par BigColino dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/02/2012, 11h53
  3. [Smarty] Question peut-être simple ?
    Par winnyzeboss1 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 31/05/2010, 13h07
  4. Peut - être Bête .mais primordiale
    Par widom dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/05/2007, 11h21
  5. question (peut-être idiote) sur les vues
    Par LadyArwen dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/03/2003, 10h35

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