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

Lazarus Pascal Discussion :

Problème sur la position des Panels en haut de l'écran


Sujet :

Lazarus Pascal

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 123
    Par défaut Problème sur la position des Panels en haut de l'écran
    Bonjour,

    Je voudrais créer 4 panels dont 3 sont affichés en haut de l'écran (Avec AlTop) et un bouton qui permet de visualiser le dernier panel (Panel 4).
    Mais je voudrais que le quatrième panel s'affiche en dessous des 3 autres.

    Puis ensuite, comment changer l'ordre des panels ?
    Exemple : (dans l'ordre)
    panel2
    Panel1
    panel3
    panel4
    //--

    Merci
    Bonne journée

    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
    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
     
     
    procedure TForm1.FormCreate(Sender: TObject);
      begin
        CreationPanel(Sender);
      end;
     
    Procedure TForm1.Sbn1Click(Sender: TObject);
      begin
        Pnl4.Visible:=true;
      end;
     
     
    Procedure CreationPanel(Sender: TObject);
      Const
        Hauteur = 40;
      begin
        With Form1 do begin
          //--------------------------------------------------------------   Panel 4
          Pnl4:=Tpanel.Create(Form1);
          With Pnl4 do begin
            Parent:=Form1;
            Name:='Pnl4';
            Caption:='Panel 4';
            height:=Hauteur;
            Align:=alTop;
            Visible:=false;
            Color:=ClDefault;
          end;
          //--------------------------------------------------------------   Panel 3
          Pnl3:=Tpanel.Create(Form1);
          With Pnl3 do begin
            Parent:=Form1;
            Name:='Pnl3';
            Caption:='Panel 3';
            height:=Hauteur;
            Align:=alTop;
            Visible:=false;
            Color:=ClDefault;
          end;
          //--------------------------------------------------------------   Panel 2
          Pnl2:=Tpanel.Create(Form1);
          With Pnl2 do begin
            Parent:=Form1;
            Name:='Pnl2';
            Caption:='Panel 2';
            height:=Hauteur;
            Align:=alTop;
            Visible:=false;
            Color:=ClDefault;
          end;
          //--------------------------------------------------------------   Panel 1
          Pnl1:=Tpanel.Create(Form1);
          With Pnl1 do begin
            Parent:=Form1;
            Name:='Pnl1';
            Caption:='Panel 1';
            height:=Hauteur;
            Align:=alTop;
            Visible:=false;
            Color:=ClDefault;
          end;
          //---------------------------------------   Bouton d'activation du panel 4
          Sbn1:=TSpeedButton.Create(Pnl1);
          With Sbn1 do begin
            Parent:=Pnl1;
            Name:='Sbn1';
            Caption:='Pnl 4';
            height:=28;
            width :=34;
            NumGlyphs:=0;
            Top:=1;
            Hint:='Activation Panel 4';
            ShowHint:=true;
            visible:=true;
            enabled:=true;
            OnClick:=@Sbn1Click;
          end;
     
        end;
        PositionnePanel(Sender);
      end;
     
    Procedure PositionnePanel(Sender: TObject);
      begin
        With Form1 do begin
          Pnl1.Visible:=true;
          Pnl2.Visible:=true;
          Pnl3.Visible:=true;
     
        end;
      end;
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Salut

    je vois ce que tu veux faire, ce comportement est agaçant, je trouve aussi lorsque l'on construit une interface en runtime.
    Un moyen simple c'est de commencer par le dernier jusqu'au premier, autre possibilité jouer avec la propriété top en l'incrémentant de la hauteur du panel multiplié par le nombre de panel déjà affiché, si je me souvient bien cela marche aussi

    Pour ta deuxième question tu souhaites pouvoir déplacer tes panels grâce à la souris par exemple ou par code ?

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 123
    Par défaut Problème sur la position des Panels en haut de l'écran
    Bonjour,
    en fait, le moyen simple ne fonctionne pas non plus.
    car le panel 4, créé en premier pour être en position la plus basse, se retrouve juste en dessous de la barre la plus haute, lorsqu'il est activé par le bouton.

    pour la 2ième question, ce serait par code, mais rien n'empêcherait de le déplacer avec la souris.

    bonne journée

  4. #4
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Salut

    j'ai regardé ton exemple.
    Tes panels sont bien créé dans l'ordre descendant. Et comme je le disais, il faut juste jouer avec la propriété Top.
    Un truc que je ne comprend pas pourquoi utiliser une unité intermédiaire "unit2" ? De plus déclarer ta méthode "positionpanel" forward, ne sert vraiment à rien.
    Autre chose ton "with form1 do" dans "creationpanel" est inapproprié

    Mieux vaut tout mettre dans ta form

    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
    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
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
     
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, Forms, Controls, Graphics, Buttons, Dialogs, ExtCtrls, StdCtrls;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        BtnUpPanel1 : TButton;
        BtnDownPanel1 : TButton;
     
        procedure BtnUpPanel1Click(Sender : TObject);
        procedure BtnDownPanel1Click(Sender : TObject);
        procedure FormCreate(Sender: TObject);
      private
        Pnl1    : TPanel;
        Pnl2    : TPanel;
        Pnl3    : TPanel;
        Pnl4    : TPanel;
        Sbn1    : TSpeedButton;
     
        Procedure CreationPanel(Sender: TObject);
        Procedure PositionnePanel(Sender: TObject);
        Procedure Sbn1Click(Sender: TObject);  // activation du Panel 4
      public
     
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    Const
      Hauteur = 40;
     
    procedure TForm1.FormCreate(Sender: TObject);
      begin
        CreationPanel(Sender);
      end;
     
    Procedure TForm1.PositionnePanel(Sender: TObject);
      begin
        With Self do begin
          Pnl1.Visible:=true;
          Pnl2.Visible:=true;
          Pnl3.Visible:=true;
        end;
      end;
     
    Procedure TForm1.CreationPanel(Sender: TObject);
     
      begin
          //--------------------------------------------------------------   Panel 4
          Pnl4:=Tpanel.Create(Self);
          With Pnl4 do begin
            Parent:= Self;
            Name:='Pnl4';
            Caption:='Panel 4';
            height:=Hauteur;
            Align:=alTop;
            Visible:=False;
            Color:=ClDefault;
            top := 3 * Hauteur;
          end;
          //--------------------------------------------------------------   Panel 3
          Pnl3:=Tpanel.Create(Self);
          With Pnl3 do begin
            Parent:= Self;
            Name:='Pnl3';
            Caption:='Panel 3';
            height:=Hauteur;
            Align:=alTop;
            Visible:=false;
            Color:=ClDefault;
            top := 2 * Hauteur;
          end;
          //--------------------------------------------------------------   Panel 2
          Pnl2:=Tpanel.Create(Self);
          With Pnl2 do begin
            Parent:= Self;
            Name:='Pnl2';
            Caption:='Panel 2';
            height:=Hauteur;
            Align:=alTop;
            Visible:=false;
            Color:=ClDefault;
            top := Hauteur;
          end;
          //--------------------------------------------------------------   Panel 1
          Pnl1:=Tpanel.Create(Self);
          With Pnl1 do begin
            Parent:= Self;
            Name:='Pnl1';
            Caption:='Panel 1';
            height:=Hauteur;
            Align:=alTop;
            Visible:=false;
            Color:=ClDefault;
            top := 0;
          end;
          //---------------------------------------   Bouton d'activation du panel 4
          Sbn1:=TSpeedButton.Create(Pnl1);
          With Sbn1 do begin
            Parent:=Pnl1;
            Name:='Sbn1';
            Caption:='Pnl 4';
            height:=28;
            width :=34;
            NumGlyphs:=0;
            Top:=1;
            Hint:='Activation Panel 4';
            ShowHint:=true;
            visible:=true;
            enabled:=true;
            OnClick:=@Sbn1Click;
          end;
     
        PositionnePanel(Sender);
      end;
     
    Procedure TForm1.Sbn1Click(Sender: TObject);
      begin
        Pnl4.Visible:=true;
      end;
     
    end.
    Pour pouvoir déplacer tes panels c'est la même chose, il faut jouer avec "Top". Juste une chose et je ne comprend pas trop pourquoi chez moi c'est qu'il faut remettre la propriété align à alNone et re-basculer sur alTop pour le 1er déplacement

    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
    procedure TForm1.BtnDownPanel1Click(Sender : TObject);
    begin
      if pnl1.Top > 0 then
      begin
        pnl1.Align := alNone;
        pnl1.Top := pnl1.Top - hauteur;
        pnl1.Align := alTop;
      end;
    end;
     
    procedure TForm1.BtnUpPanel1Click(Sender : TObject);
    begin
      if (pnl1.Top < (3 * hauteur)) then
      begin
        pnl1.Align := alNone;
        pnl1.Top := pnl1.Top + hauteur;
        pnl1.Align := alTop;
      end;
    end;
    Pour le déplacement à la souris c'est avec les méthodes de "drag-and-drop"

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 123
    Par défaut Problème sur la position des Panels en haut de l'écran
    Bonjour,
    la solution avec la propriété Top ne fonctionne pas.
    j'ai donc fini par les positionner manuellement.
    ----
    Pour ce qui est des questions posées dans le dernier message.
    Un truc que je ne comprend pas pourquoi utiliser une unité intermédiaire "unit2" ?
    Le programme est assez important et j'ai choisi de traiter la partie IHM dans une unité annexe (UntIHM).

    De plus déclarer ta méthode "positionpanel" forward, ne sert vraiment à rien.
    Toutes les fonction sont déclarées --> c'est plus facile d'en retrouver une particulière.

    Autre chose ton "with form1 do" dans "creationpanel" est inapproprié
    Pourquoi est-ce inapproprié ?
    Quelle serait la bonne méthode à partir du moment ou le code est dans une autre unité que l'unité où se trouve la fenêtre ?
    ----
    Bonne journée et merci pour le temps que vous passez à nous aider.

Discussions similaires

  1. Problème sur la gestion des utilisateurs
    Par bambi98 dans le forum Administration
    Réponses: 4
    Dernier message: 16/04/2008, 14h24
  2. Réponses: 21
    Dernier message: 21/02/2008, 15h50
  3. Problème sur la gestion des erreurs
    Par ronio dans le forum Langage
    Réponses: 4
    Dernier message: 08/11/2006, 09h47
  4. Réponses: 9
    Dernier message: 01/06/2006, 08h01

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