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

Delphi Discussion :

Un Main Menu qui ne prend qu'une partie de la largeur de l'appli


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 212
    Par défaut Un Main Menu qui ne prend qu'une partie de la largeur de l'appli
    Je ne sais pas si le titre est explicite, alors voilà :

    Je réalise actuellement une petite appli dont la form d'interface est divisée en deux parties identiques (grosso modo).

    La partie gauche affiche des images/graphiques, la partie droite affiche des contrôles.

    J'aimerais adjoindre un MainMenu et je voudrais que celui-ci ne prenne pas toute la largeur de l'appli mais seulement la largeur de la partie 'controle'.

    J'ai regardé la JVCL, d'habitude j'y trouve a peu près tout ce que je cherche, mais sur ce coup, c'est choux blanc.

    J'aimerais aussi autant que possible éviter de redessiner à la mano un main menu (ou d'en créer un), pour une raison toute simple : je sais pas faire

    Je sais que c'est peu tordu, et si c'est pas possible, je ferais autrement (avec des boutons probablement )

    Si certains se demandent pourquoi je veux faire ça, c'est simple :
    - j'ai beaucoup de graphiques/images, et je suis vraiment au pixel près pour la place libre (actu : 3 pix entre chaque élément [top / bottom], et ça fait déja serré )
    - j'ai encore de la place coté contrôles
    - ma form n'est pas extensible en hauteur (bah non ) et je ne veux pas utiliser les scrollbars (re- )
    - et donc avec tout ça j'ai pas 15 pixels à 'perdre' sur la première moitié de ma form

    Si quelqu'un pouvait m'aider, je lui en serais très reconnaissant

    PS : ça m'étonnerais que le dieu Waskol n'ai pas déjà essayé un truc comme ça

  2. #2
    Membre extrêmement actif
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 219
    Par défaut
    bonjour,

    j'ai pas Delphi ouvert sous la main, mais il me semble que c'est possible en le mettant dans une coolbarre ou qque chose comme ça.

    @++
    Dany

  3. #3
    Membre éclairé Avatar de declencher
    Inscrit en
    Mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 441
    Par défaut
    Bonjour,

    Tu veux faire un menu comme dans l'IDE de delphi, à savoir placer des composants à côté du menu ? Si c'est ça je suis preneur de la méthode. Je n'ai rien trouvé me permettant de faire ça, mis à part la solution de recréer mes menus manuellement avec des PopUpMenu (Je n'ai pas réussi à utiliser de TMenu dans ce contexte là).

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 212
    Par défaut
    @ skywaukers : j'ai essayé, mais y'a pas moyen? J'arrive bien à la lui donner la taille que je souhaite avec maxWidth, mais elle s'ancre désespérément à gauche de ma form (j'ai essayé avec la position left, et avec les Anchors). De plus, à l'éxécution, elle prend la largeur de toute la form. J'ai essayé aussi avec un TControlBar (il se place bien ou je veux), mais pas moyen d'y intégrer un TMainMenu ou qqch de similiare. Par contre, j'arrive à intégrer des toolbutton (normal, c'est fait pour ça...). Mais il est possible que je sois passé à coté de qqch, car je ne connais pas trop ces outils (les applis que je développe sont pour mon usage perso...D6PE oblige)

    @ declencher : Si j'ai bien compris, tu veux mettre une vignette en vis-à-vis de chaque élément de ton menu ? dans ce cas, je crois qu'il faut utiliser la propriété image de ton MainMenu, puis la propriété 'ImageIndex' de chaque item

  5. #5
    Membre éclairé Avatar de declencher
    Inscrit en
    Mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 441
    Par défaut
    Bonjour,

    Ce n'est pas vraiment ça Diam's. Je voulais initialement pouvoir placer un TEdit et un TSpeedButton sur la même ligne que mon Menu.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 212
    Par défaut
    oui, effectivement, j'ai mal compris.

    et je ne peux pas te renseigner (pour le moment).

    Pose donc ta question dans un topic à part, tu auras surement plus de réponses

  7. #7
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Merci pour ta dévotion diam's
    ...mais je n'aie AB-SO-LU-MENT pas compris ce que tu souhaitais faire !

    A moins que...

    1) Tu places un composant TMainMenu sur ta fiche.
    2) Tu crées ton Menu normalement.
    3) Tu insères un Menu Item sans aucun caption (comme sur l'image jointe ici)
    4) Tu lui donnes un nom (propriété Name du TMenuItem) : je l'ai appelé "Rien"
    5) Tu mets la propriété OwnerDraw de ton TMainMenu à True.
    6) tu codes l'évènement OnMesureItem de ton TMenuItem :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.RienMeasureItem(Sender: TObject; ACanvas: TCanvas;
      var Width, Height: Integer);
    begin
      Width:=300; //Ici tu mets la valeur que tu veux
    end;
    Et voilà

    Un Screenshot du résultat est aussi en piece jointe.
    C'est ça ce que tu voulais faire ?
    Images attachées Images attachées   

  8. #8
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Sinon, j'ai ceci en réserve aussi :

    1) tu mets ton composant TMainMenu sur ta fiche et tu codes l'évènement OnMouseMove de ta fiche et de tes composants qui sont alignés sur le bord haut de ta fiche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Form1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if ((y<25) and (Menu=nil)) then Menu:=MainMenu1 else Menu:=nil;
      RePaint;
    end;
    Par exemple, dans ma fiche, j'ai mis 2 Panels, un avec Align:=AlLeft et l'autre avec Align:=AlClient. Du coup, j'ai relié leur propriété OnMouseMove à Form1MouseMove aussi pour que le passage de la souris sois pris en compte.

    Dès que la souris passes près du bord haut de la fiche, le TMainMenu surgit, dès que la souris quitte le menu, ce dernier disparait et laisse de la place sur ta fiche.

    Ce n'est peut-être pas ce que tu souhaitais, mais c'est une solution.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 212
    Par défaut
    @ Waskol :

    1er post : c'est exactement ça... sauf que je ne veux pas que le TMainMenu prenne 'naissance' à gauche (entre le bord de la fiche et l'item 'Fichier', dans ton exemple, il y a ... la barre d'un TMainMenu, qui prend autant de place en hauteur qu'un menu)

    2ème post : ton idée de menu surgissant est une TRES bonne idée (faut la mettre dans la faq ), mais je préfèrerais autant que possible conserver mon menu apparent en permanence.

    Pour l'instant, j'ai créé des boutons en haut de la deuxième moitié de ma form associés à des PopupMenu, mais c'est pas propre...

    Pour rappel, ce que je cherche c'est un MainMenu dont on peut définir :
    - L'origine (je ne veux pas qu'il soit ancré au point [0,0] de ma form
    - la largeur (je veux q'uil occupe une partie de la largeur de ma form, et PAS toute la largeur comme un menu standard
    - en gros, il faut que ce soit un Menu qui se comporte 'presque' comme une barre d'outils (et un mouton à 5 pattes, un )


    Avis aux autres idées....

  10. #10
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Oui, je vois...

    Le problème d'une menubar (c'est comme ça que Windows appelle un TMainmenu n'est relié qu'à la fiche (on ne peu pas l'attribuer à un TPanel par exemple) et prend toute la zone "Top" de cette fiche, pas une partie.

    Mais, il y a un moyen tout couillon que je viens de trouver de le faire en Delphi

    1) Tu mets une TToolBar (onglet "Suppléments" de la Palette) sur ta fiche, à l'endroit où tu veux placer ton "menu".
    2) Tu place et créée ton TMainMenu comme tu fais d'habitude
    3) Dans la Propriété MainMenu de ta fiche, tu vire la référence à ton menu
    4) Dans la propriété Menu de ta TToolbar, tu choisis ton TMainMenu
    5) pour modifier l'aspect de ton menu, tu joues sur les propriétés de a TToolbar (EdgeMachinChose, Flat, Transparent, Color, Wrapable, Ctl3D, etc...)
    6) Ca y'est...

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 212
    Par défaut
    Je n'ai pas TToolBar dans l'onglet supplément (D6PE), donc j'ai utilisé une JvToolBar.

    Ta solution fonctionne .... presque

    En effet, il m'est impossible de mettre la barre dans la partie droite de mon appli, elle s'obstine à s'ancrer dans le coin supérieur gauche de ma forme ...

    J'ai pourtant tout essayé :
    - Constraints
    - Anchors
    - propriété LEFT
    - etc...

    Donc, j'en suis tjrs au même point

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

Discussions similaires

  1. [CSS 3] Webkit flex box (Safari) menu qui ne prend pas la totalité du conteneur
    Par artenis dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 26/07/2014, 17h53
  2. Bibliographie qui n'affiche qu'une partie des infos voulues
    Par Murmandamus dans le forum Bibliographies - Index - Glossaires
    Réponses: 2
    Dernier message: 09/09/2011, 21h43
  3. [PowerBuilder] INSERT ne prend qu'une partie du texte
    Par Le Grand Habchkleu dans le forum SQL
    Réponses: 1
    Dernier message: 09/05/2008, 16h48
  4. Réponses: 10
    Dernier message: 26/04/2008, 14h14
  5. Procedure qui se prend pour une fonction
    Par Dereck07 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/02/2008, 03h07

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