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

Composants VCL Delphi Discussion :

[D2010] Utilisation du DockTabSet


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut [D2010] Utilisation du DockTabSet
    Je cherche à utiliser le DockTabSet (en D2010).

    J'ai testé le tutoriel (http://edn.embarcadero.com/article/33446), mais je cherche un fonctionnement de volet escamotable, comme on a dans Delphi lui-même.

    Je bute sur plusieurs problèmes :
    - Comment masquer ou bloquer la petite croix de fermeture des volets ?
    Je ne veux pas que l'utilisateur puisse cliquer sur cette croix : ca fait disparaitre le volet; après, on est obligé de relancer l'application.

    - Quand on double-clic sur le titre d'un volet, ca dé-ancre la fenêtre, qui redevient une fenêtre fille normale. Comment gérer le fait de pouvoir la remettre dans le DockTabSet, en tant que volet ?

    -Quand on punaise plusieurs volets, ils se mettent à droite du précédent.
    Je préfèrerais qu'ils se mettent les uns en dessous des autres.
    Comment faire ?

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  2. #2
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par Lung Voir le message
    - Comment masquer ou bloquer la petite croix de fermeture des volets ?
    Je ne veux pas que l'utilisateur puisse cliquer sur cette croix : ca fait disparaitre le volet; après, on est obligé de relancer l'application.
    Bon, j'ai trouvé une solution de contournement.
    Dans l'évènement OnClose de la fenêtre de chaque volet, j'ai bloqué la fermeture avec Action := caNone; pour bloquer l'utilisation de la croix de fermeture quand le volet est punaisé.
    Par contre, quand le volet n'est pas punaisé, la croix fonctionne (normal).
    En attendant mieux, je fourni un bouton à l'utilisateur pour refaire apparaître le volet qui fait un simple FormFille.Show;



    Citation Envoyé par Lung Voir le message
    - Quand on double-clic sur le titre d'un volet, ca dé-ancre la fenêtre, qui redevient une fenêtre fille normale. Comment gérer le fait de pouvoir la remettre dans le DockTabSet, en tant que volet ?
    Dans l'évènement OnUnDock du TDockTabSet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TMainForm.DockTabSetUnDock(Sender: TObject; Client: TControl; NewTarget: TWinControl; var Allow: Boolean);
    begin
       //.Interdit le double-clic sur le titre du volet.
       if NewTarget = nil then
       begin
          Allow := False;
          Exit;
       end;
     
    ...
    end;


    Citation Envoyé par Lung Voir le message
    -Quand on punaise plusieurs volets, ils se mettent à droite du précédent.
    Je préfèrerais qu'ils se mettent les uns en dessous des autres.
    Comment faire ?
    J'ai fini par le gérer à la main, dans les évènements OnDockDrop du Panel, et OnDockDrop du TDockTabSet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TMainForm.PanelDockDrop(Sender: TObject; Source: TDragDockObject; X, Y: Integer);
    begin
       //.Alignement des volets punaisés.
       FormateFenetre;
    end;
     
    procedure TMainForm.DockTabSetDockDrop(Sender: TObject; Source: TDragDockObject; X, Y: Integer);
    begin
       //.Alignement des volets punaisés restant.
       FormateFenetre;
    end;
    Et la procédure d'alignement :
    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
    procedure TMainForm.FormateFenetre;
    const
       HAUTEUR_BARRE_TITRE = 20;
    var
       i: Integer;
    begin
       //.Alignement vertical des volets punaisés (dans le Panel).
       for i:=0 to Pred(Panel.ControlCount) do
       begin
          if(PanelDock.Controls[i] is TForm) then
          begin
             (PanelDock.Controls[i] as TForm).Height := (PanelDock.Height div PanelDock.ControlCount) - HAUTEUR_BARRE_TITRE;
             (PanelDock.Controls[i] as TForm).Align := alNone;
             (PanelDock.Controls[i] as TForm).Left := 0;
             if i = 0 then
                (PanelDock.Controls[i] as TForm).Top := HAUTEUR_BARRE_TITRE
             else
                (PanelDock.Controls[i] as TForm).Top := i *  ((PanelDock.Controls[i - 1] as TForm).Height + HAUTEUR_BARRE_TITRE) + HAUTEUR_BARRE_TITRE;
             (PanelDock.Controls[i] as TForm).Width := PanelDock.Width;
          end;
       end;
    end;
    Voilà où j'en suis.
    Si quelqu'un a mieux, je suis preneur.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  3. #3
    Membre éclairé
    Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Par défaut
    Voilà où j'en suis.
    Si quelqu'un a mieux, je suis preneur.
    A tout hasard, ce n'est pas la propriété DropAlign du TDragDockObject qui te permet de gérer ça dans l'événement DockTabSetDockDrop ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TDragDockObject.DropAlign := alBottom
    Je profite de ce sujet pour te poser une petite question : dans les démos de D2010 avec les TDockTabset, il y a un "cliping" de malade lorsqu'on dessine le cadre de la fenetre en déplacement. As-tu réussi à faire un déplacement "fluide"? Parce qu'avec un ralentissement comme ça, c'est carrément moche.

  4. #4
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par khena Voir le message
    A tout hasard, ce n'est pas la propriété DropAlign du TDragDockObject qui te permet de gérer ça dans l'événement DockTabSetDockDrop ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TDragDockObject.DropAlign := alBottom
    Dans D2010, je n'ai pas réussi à trouver cette propriété.
    Et dans D6, l'aide me dit que c'est une propriété en lecture seule (donc pas d'affectation).

    Citation Envoyé par khena Voir le message
    dans les démos de D2010 avec les TDockTabset, il y a un "cliping" de malade lorsqu'on dessine le cadre de la fenetre en déplacement. As-tu réussi à faire un déplacement "fluide"? Parce qu'avec un ralentissement comme ça, c'est carrément moche.
    Je ne vois pas bien de quoi tu parles.
    Le clipping, c'est bien quand certaines parties ne sont pas affichées, non ?
    Sinon, pour la fluidité des volets, c'est le TDockTabSet qui s'en charge (et c'est fluide), donc je ne vois pas comment le changer.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  5. #5
    Membre éclairé
    Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Par défaut
    Pourtant, la propriété est bien active, mais effectivement en lecture seule. Surprenant... et la fonction ManualDock prends aussi un alignement en parametre. C'est vraiment bizarre qu'on ne puisse pas le configurer. Peut-etre directement dans la form?


    Pour le "cliping" c'est peut-etre pas le bon mot, mais chez moi, la démo que tu as utilisé pose le même probleme. Quand tu déplaces une des fenetres à "docker", dans la démo ils dessinent un cadre qui te permet de suivre le déplacement


    Dans ce cas-là, c'est assez ignoble le déplacement (enfin chez moi en tout cas). Ca rame vachement et le cadre "clignote" quand tu le fais glisser avec la souris.

  6. #6
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par khena Voir le message
    mot, mais chez moi, la démo que tu as utilisé pose le même probleme. Quand tu déplaces une des fenetres à "docker", dans la démo ils dessinent un cadre qui te permet de suivre le déplacement


    Dans ce cas-là, c'est assez ignoble le déplacement (enfin chez moi en tout cas). Ca rame vachement et le cadre "clignote" quand tu le fais glisser avec la souris.
    Je comprend mieux.
    Je m'en suis inspiré pour comprendre le fonctionnement, mais je n'utilise pas les volets de la même façon.

    Dans mon application, ils sont escamotables, comme dans Delphi 2010, pour la pallette d'outils, le gestionnaire de projet, l'inspecteur d'objets, ...
    J'interdis que les volets puissent redevenir des fenêtres à part entière. Donc, pas de problème de déplacement.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/11/2010, 15h16
  2. [D2010] Utilisation de l'UDP avec Indy 10
    Par Lung dans le forum Composants VCL
    Réponses: 2
    Dernier message: 01/09/2010, 11h13
  3. Réponses: 6
    Dernier message: 03/07/2010, 01h41
  4. Réponses: 13
    Dernier message: 21/05/2010, 16h54
  5. Réponses: 12
    Dernier message: 21/04/2010, 14h55

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