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 :

ScrollBars de la ScrollBox invisibles (avec un "s", c'est les sbr, pas la sbx) [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut ScrollBars de la ScrollBox invisibles (avec un "s", c'est les sbr, pas la sbx)
    Bonjour,

    après mes mésaventures de centrage de l'objet qu'elle contient, voilà qu'une ScrollBox refuse systématiquement d'afficher ses ScrollBars quand c'est nécessaire :
    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
    function its(i:integer):string; begin Result:=IntToStr(i);end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      PanelAuCentre.Parent := sb; // pour aligner le panel dans une scrollbox avec border à 0 et alClient
      sb.AutoScroll:=True; // voir commentaire + bas
    end;
     
    procedure TForm1.sbResize(Sender: TObject);
    begin
      // What I do now is set AutoScroll to False in the IDE, then set it to True in code
      // https://forum.lazarus.freepascal.org/index.php?topic=18040.0
      sb.HorzScrollBar.Visible := (sb.Width  < PanelAuCentre.Width);  // jamais vu
      sb.VertScrollBar.Visible := (sb.Height < PanelAuCentre.Height); // jamais vu
      caption := its(sb.Width)+' '+its(PanelAuCentre.Width)+' '+booltostr(sb.HorzScrollBar.Visible);
    end;
    Nom : centrerpanel.png
Affichages : 544
Taille : 10,2 Ko
    La scrollbox est verte, le panneau centré dedans est crème, le "-22" c'est son .Left, le "8" c'est son .Top et les deux autres la taille "client" de la scrollbox.

    Le "-1" dans la Caption de la fiche indique que la scrollbar horizontale est viible. Vous la voyez, vous ?

    En désespoir de cause j'ai essayé de forcer l'affichage avec un CheckBox, mais même ça est inopérant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.ckbxSBonoffChange(Sender: TObject);
    begin
      if ckbxSBonoff.Checked then begin
        sb.AutoScroll := True;
        sb.HorzScrollBar.Visible := True;//(sb.Width  < PanelAuCentre.Width);
        sb.VertScrollBar.Visible := True;//(sb.Height < PanelAuCentre.Height);
      end else begin
        sb.AutoScroll := False;
        sb.HorzScrollBar.Visible := False;//(sb.Width  < PanelAuCentre.Width);
        sb.VertScrollBar.Visible := False;//(sb.Height < PanelAuCentre.Height);
      end;
      caption := its(sb.Width)+' '+its(PanelAuCentre.Width)+' '+booltostr(sb.HorzScrollBar.Visible);
    end;
    La seule chose que je vois changer, c'est l'état du booléen, -1 > 0 > -1 etc.

    Une idée ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #2
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Salut JP.

    Avec AutoScroll = true, les scrollbars ne seront visibles que si nécessaire. (avec leur propriété visible = true).

    Pourquoi se prendre la tête avec cela ?

    Ton problème vient de l'alignement alClient de ton PanelAuCentre. Comme sa taille sera toujours égale à la taille du scrollbox, forcément il n'y aura jamais besoin de scrollbars.

    Amicalement
    Thierry

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Salut salut, Thierry
    Citation Envoyé par ThWilliam Voir le message
    Avec AutoScroll = true, les scrollbars ne seront visibles que si nécessaire. (avec leur propriété visible = true).
    Yes I know, cependant tu as dû lire cette ligne (plus le lien que j'ai donné) où la gars a miséré comme pas possible avec un truc aussi simple que ça...
    Et tu l'as lu dans le FormCreate où il est là suite à ce commentaire, justement.

    Par ailleurs, j'ai même rajouté une case à cocher pour essayer de forcer à la mano mais ça résiste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.ckbxSBonoffChange(Sender: TObject);
    begin
      if ckbxSBonoff.Checked then begin
        sb.AutoScroll:=True;
        sb.HorzScrollBar.Visible := True;
        sb.VertScrollBar.Visible := True;
      end else begin
        sb.AutoScroll:=False;
        sb.HorzScrollBar.Visible := False;
        sb.VertScrollBar.Visible := False;
      end;
    end;
    Et dans ce bout de code on peut voir deux lignes d'autoscroll sur lesquelles j'ai tout essayé : les deux à true, les deux à false, et true-false et false-true, résultats rien rien rien et rien...

    Citation Envoyé par ThWilliam Voir le message
    Ton problème vient de l'alignement alClient de ton PanelAuCentre. Comme sa taille sera toujours égale à la taille du scrollbox, forcément il n'y aura jamais besoin de scrollbars.
    Mais où as-tu vu ça ?
    Parce que bon, ch'suis neuneu d'accord mais, quand même, y a des limites

    Regarde bien l'image, le panel en question c'est le machin de couleur crème dont la caption affiche des nombres : s'il était alClient tu ne verrais pas dessous la couleur verte de la scrollbox !
    Et tu ne vois pas ses côtés gauche et droit parce que j'ai réduit la taille de la scrollbox à l'exécution, justement pour bien montrer qu'il n'est pas alClient et que j'attends la scrollbar horizontale, qui ne veut rien savoir, la garce !

    Une autre idée (oui je sais, c'est ardu, et c'est bien pour ça que j'ai pos[t]é ma question) ?

    et c't'aprème je suis pas là, soyez sages !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  4. #4
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Désolé, c'est ce j'avais cru comprendre de par ton commentaire dans la procedure TForm1.Create.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      PanelAuCentre.Parent := sb; // pour aligner le panel dans une scrollbox avec border à 0 et alClient
      sb.AutoScroll:=True; // voir commentaire + bas
    end;

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par ThWilliam Voir le message
    Désolé, c'est ce j'avais cru comprendre de par ton commentaire dans la procedure TForm1.Create.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    // pour aligner le panel dans une scrollbox (avec border à 0 et alClient)
    C'est la sb qui est alClient sur la form (Panel1 est alLeft), désolé de m'être mal exprimé.

    Bah, t'as gagné le droit de rejouer,

    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut, j'ai fais un petit test. Avec la 1.8rc4 dans l'EDI pour que les scrollbars apparaissent, j'ai du décoché/coché la propriété "AutoScroll"
    De plus j'ai remarqué que si le "Panel1" (a gauche) à ses positions left<0 et top<0 alors les positions de départ du scroll horizontal et verticale ne sont pas bonnes. Il faut dont bien aligné les contrôles dans la ScroolBox en partant de 0,0.
    Ensuite dans les propriétés HorzScrollBar etVertScrollBar il y a les propriétés "Range" et "Page" as tu essayés de jouer avec, pour voir ?

    Sinon pas d'autres idées.

    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

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Salut, j'ai fais un petit test. Avec la 1.8rc4 dans l'EDI pour que les scrollbars apparaissent, j'ai du décocher/cocher la propriété "AutoScroll"
    Ce qui ressemble au problème du gars qui a fait toute une discussion (dont j'ai donné l'url).

    Bon, dans le zip joint (voir le lien + bas) j'ai carrément mis une case-à-cocher activer/désactiver l'autoscroll, sans effet pour le moment...

    Citation Envoyé par BeanzMaster Voir le message
    De plus j'ai remarqué que si le "Panel1" (à gauche) a ses positions left<0 et top<0 alors les positions de départ du scroll horizontal et verticale ne sont pas bonnes. Il faut dont bien aligner les contrôles dans la ScroolBox en partant de 0,0.
    Le Panel1 est alLeft, donc ses Top et Left sont à zéro et je ne le gère pas.
    Attention, ce n'est pas lui qui se retrouve dans la scrollbox, c'est le PanelAuCentre dont je définis le parent (la scrollbox) dans le FormCreate.

    Citation Envoyé par BeanzMaster Voir le message
    Ensuite dans les propriétés HorzScrollBar etVertScrollBar il y a les propriétés "Range" et "Page" as tu essayés de jouer avec, pour voir ?
    À peine, et n'ayant pas vu de changements, je n'ai pas creusé plus.

    Citation Envoyé par BeanzMaster Voir le message
    Sinon pas d'autres idées.
    On est mal on est mal !

    Bon, jetez un œil au zip joint, ça sera plus simple : tst_scrollbars.zip
    Vous noterez que j'ai gardé la DrawGrid, mais elle est dans un coin, inutilisée.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Bon d'apres ce que je viens de tester avec ton zip. Tes ScrollBar ne s'affichent pas car la surface de ton "PanelAuCentre" est plus petit que la scrollbox, donc normal jusque là.

    Si tu veux afficher les scrollbar il faut jouer avec la propriétés Range et ajuster avec "page" et "incrément" pour ajuster le déplacement avec la scrollbar

    Essayes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.ckbxSBonoffChange(Sender: TObject);
    begin
      if ckbxSBonoff.Checked then begin
        sb.AutoScroll:=False;
        sb.HorzScrollBar.Range := 300;
        sb.VertScrollBar.Range := 300;
      end
    et là les scrollbars devraient apparaitre. Il faut donc donnée une grandeur au ScrollBar avec la propriété "Range" qui correspondrait à la taille de la surface intérieure de la scrollbox (je sais pas si je suis clair, pas évident à décrire et je suis un peu fatigué là )

    EDIT : Là par contre ton "PanelAuCentre" est centré par rapport à la dimension de la surface interne de la ScrollBox (le caption avec autoscroll donne 40 74 233 252, avec le bout de code plus haut la caption affiche 32 66 216 235)

    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

  9. #9
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Bon d'apres ce que je viens de tester avec ton zip. Tes ScrollBar ne s'affichent pas car la surface de ton "PanelAuCentre" est plus petit que la scrollbox, donc normal jusque là.
    J'ai tout agrandi, c'est pas pour autant qu'elle(s) s'affiche(s) : là on ne voir plus la scrollbox (verte), le PanelAuCentre est + grand, je devrais avoir 2 scrollbars et j'en ai zéro.
    Nom : scrollbars_off.png
Affichages : 411
Taille : 7,5 Ko

    Par ailleurs, si tu regardes bien la première image, j'avais réduit la scrollbox en largeur de manière à empiéter sur le panel en largeur donc j'aurais au moins dû avoir la scrollbar horizontale.

    Citation Envoyé par BeanzMaster Voir le message
    Si tu veux afficher les scrollbars il faut jouer avec la propriétés Range et ajuster avec "page" et "incrément" pour ajuster le déplacement avec la scrollbar

    Essayes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.ckbxSBonoffChange(Sender: TObject);
    begin
      if ckbxSBonoff.Checked then begin
        sb.AutoScroll:=False;
        sb.HorzScrollBar.Range := 300;
        sb.VertScrollBar.Range := 300;
      end
    et là les scrollbars devraient apparaitre. Il faut donc donner une grandeur au ScrollBar avec la propriété "Range" qui correspondrait à la taille de la surface intérieure de la scrollbox (je sais pas si je suis clair, pas évident à décrire et je suis un peu fatigué là )
    Ouais, avec ta manip elles sont apparues quand j'ai coché la case,
    Nom : 1.png
Affichages : 362
Taille : 11,9 Ko

    elles ont disparu quand j'ai décoché
    Nom : 2.png
Affichages : 367
Taille : 9,6 Ko

    et il n'y en a qu'une qui est réapparue quand j'ai recoché, sans toucher à la taille de la fiche.
    Nom : 3.png
Affichages : 403
Taille : 11,0 Ko

    Incompréhensible, à cette heure...

    Citation Envoyé par BeanzMaster Voir le message
    EDIT : Là par contre ton "PanelAuCentre" est centré par rapport à la dimension de la surface interne de la ScrollBox (le caption avec autoscroll donne 40 74 233 252, avec le bout de code plus haut la caption affiche 32 66 216 235)
    Le centrage du PanelAuCentre est réglé avec la petite procédure depuis un bout de temps dans l'autre post. Là je me concentre sur les scrollbars.

    Merci pour les tests et les pistes.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  10. #10
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Salut JP.

    Après test sur ton zip : les scrollbars n'apparaissent pas pcq PanelAuCentre.Anchors:= []

    Modifications opérées :
    1) PanelAuCentre.Anchors:= [akLeft, akTop]
    2) Propriété sb.autoscroll:= true
    3) modification dans la procédure CenterPanel afin que Left et Top ne soient jamais négatifs (sinon, tu ne peux plus atteindre le début de ton Panel par les scrollbars).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure CenterPanel(p: TPanel);
    var
        L, T: integer;
    begin
        with p do begin
          L:= (Parent.ClientWidth -Width ) div 2;
          if L < 0 then L:= 0;
          T:= (Parent.ClientHeight-Height) div 2;
          if T < 0 then T:= 0;
          Left:= L;
          Top:= T;
        end;
    end;
    Amicalement
    Thierry

  11. #11
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par ThWilliam Voir le message
    Après test sur ton zip : les scrollbars n'apparaissent pas pcq PanelAuCentre.Anchors:= []
    Damned !
    Un reste des premiers essais, quand je jouais avec les propriétés ccaCenter du parent et que le wiki disait qu'il fallait être configuré ainsi.

    Et comme je ne pensais pas que ça pourrait avoir une incidence, j'ai laissé tel quel et paf !

    Bien vu, camarade !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  12. #12
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Allez, un dernier mot :

    voilà ce que je vais utiliser, parce qu'avec ClientWidth ou Height, l'apparition d'une ScrollBar fait bouger le panneau centré, et c'est désagréable à l'œil.
    Donc :
    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
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    //  PanelAuCentre.Parent := sb; // fait dans l'EDI
    //  sb.AutoScroll:=True; // fait dans l'EDI, plus besoin ici, tout comme ça :
    // What I do now is set AutoScroll to False in the IDE, then set it to True in code
    // https://forum.lazarus.freepascal.org/index.php?topic=18040.0
    end;
     
    procedure TForm1.sbResize(Sender: TObject);
     
      procedure CenterPanel(p: TPanel);
      var
        L, T: integer;
      begin
        with p do begin
          L:= (Parent.Width -Width ) div 2;
          if L < 0 then L:= 0;
          Left:= L;
          T:= (Parent.Height-Height) div 2;
          if T < 0 then T:= 0;
          Top := T;
        end;
      end;
     
    begin
      CenterPanel(PanelAuCentre);
      // avec ces deux lignes, le ascenseurs sont centrés eux aussi (j'aime bien à l'usage)
      if sb.HorzScrollBar.Visible then
        sb.HorzScrollBar.Position := (PanelAuCentre.Width -sb.Width)  div 2;
      if sb.VertScrollBar.Visible then
        sb.VertScrollBar.Position := (PanelAuCentre.Height-sb.Height) div 2;
    end;
    Encore un gros merci, Thierry, de m'avoir sorti de cette ornière où je me suis fourvoyé à vouloir trop bien faire.

    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  13. #13
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Allez, un dernier mot
    C'était bien mal me connaître que de croire que ça serait vrai,

    Mais trêve de plaisanteries, si je me suis embarqué dans cette (sale) histoire, c'est que je suis tombé sur un drôle de truc dans le projet fini où ces scrollbars doivent être utilisées, et là je reste sans voix ; ça vient du projet, les noms des objets sont ceux de la fiche, mais le code c'est le même que dans le post précédent, j'ai juste rajouté deux lignes pour logguer et une ligne de test pour valider une checkbox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      CenterPanel(pnl4image);
      with ScrollBox4Panel do begin
        if HorzScrollBar.Visible then begin
          HorzScrollBar.Position := (pnl4image.Width -Width)  div 2;
          memo1.lines.add('HorzScrollBar.Visible ');
        end;
        if VertScrollBar.Visible then begin
          VertScrollBar.Position := (pnl4image.Height-Height) div 2;
          memo1.lines.add('VertScrollBar.Visible ');
        end;
    //pourri    ckbxAdaptImage.Enabled := (HorzScrollBar.Visible or VertScrollBar.Visible);
        ckbxAdaptImage.Enabled := (pnl4image.Width > ScrollBox4Panel.ClientWidth) or (pnl4image.Height > ScrollBox4Panel.ClientHeight);
      end;
    Et pourquoi je vous mets ça là ?
    Parce que même quand on ne les voit pas, les tests remontent qu'elles sont visibles, d'où le commentaire //pourri devant la ligne de test, inséré quand je me suis rendu compte que ça n'allait pas comme ça devait (j'ai mis les logs après), et la bidouille dessous, qui, elle, fonctionne.

    Nan mais c'est quoi ce délire ??????????????????????

    Et ça veut dire que les tests sur la position des ascenseurs ne sont pas bons non plus, aaaaaaarghhhhhh

    Truc de ouf'
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  14. #14
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut juste une petite question bête mais que cherches tu à faire exactement ? Je comprend pas bien a part que tu veuilles un panel centrer dans une scrollbox avec les Scrollbar de visible.
    Est ce pour afficher une image en fonction de sa taille ? ou ai je raté quelque chose ?
    • "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

  15. #15
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Un petit truc que je pige pas c'est ça VertScrollBar.Position := (pnl4image.Height-Height) div 2; ne serait ce pas plutôt VertScrollBar.Position:=(Height div 2)-(pnl4image.Height div 2) ?

    Laisse tombé je pensais à autre chose, mais non

    Du coup je pense à ton ckbxAdaptImage.Enabled

    et je pense que ton "pnl4image" aura la taille de ton image. Si je pige bien tu souhaiterai que celui sois centrer si les dimension son inférieures au scrollbox (Width et Height) sinon affichage normal.
    Et que suivant si ckbxAdaptImage est cochée ton pnl4image s'adapte en fonction de la largeur ou la hauteur c'est ç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

  16. #16
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Salut juste une petite question bête mais que cherches-tu à faire exactement ? Je comprends pas bien à part que tu veuilles un panel centré dans une scrollbox avec les Scrollbars visibles.
    Est-ce pour afficher une image en fonction de sa taille ? ou ai-je raté quelque chose ?
    Yes, bien vu !

    un panel centré dans une scrollbox avec les Scrollbars visibles si le panel (contenant un TImage alClient pour l'affichage) est plus grand que la zone client de la scrollbox qui le contient.

    Nom : stretched.png
Affichages : 387
Taille : 181,4 Ko

    Nom : not_stretched.png
Affichages : 348
Taille : 181,1 Ko
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  17. #17
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Essayes comme ça plutôt et laisse la propriété autoscroll à true :

    Normalement les scrollbars devraient s'afficher uniquement si la largeur ou la hauteur sont plus grande. Et l'image devrait être centré si elle est plus petite
    et si ton image est plus grande et que adaptimage est à TRUE cela devrai centrer le bouzin dans la scrollbox


    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
       procedure CenterPanel(p: TPanel);
        var
            L, T: integer;
        begin
            with p do
            begin
              if Width<Parent.ClientWidth then L:= (Parent.ClientWidth -Width ) div 2
              else L:=0;
              if Height<Parent.ClientHeight then T:= (Parent.ClientHeight-Height) div 2
              else T:=0;
              Left:= L;
              Top:= T;
              if cbAdapt.Checked then
              begin
                 if Height>Parent.ClientHeight then TScrollBox(Parent).VertScrollBar.Position :=Abs( (TScrollBox(Parent).VertScrollBar.page div 2) - (Height div 2));
                 if Width>Parent.ClientWidth then TScrollBox(Parent).HorzScrollBar.Position := Abs((TScrollBox(Parent).HorzScrollBar.Page div 2) - (Width div 2));
              end;
              Caption := its(Left)+' '+its(top)+' '+its( TScrollBox(Parent).HorzScrollBar.Position )+' '+its(TScrollBox(Parent).VertScrollBar.Position);
            end;
        end;
    nb: Page = Width ou Height de la scrollbox

    REEDIT : je suis gaucher, j'ai pris ton problème dans le sens inverse ! mdr mais bon ça devrai aller
    • "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

  18. #18
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Essayes comme ça plutôt et laisse la propriété autoscroll à true :

    Normalement les scrollbars devraient s'afficher uniquement si la largeur ou la hauteur sont plus grande. Et l'image devrait être centré si elle est plus petite
    et si ton image est plus grande et que adaptimage est à TRUE cela devrai centrer le bouzin dans la scrollbox
    Euh, c'est gentil de te prendre la tête avec tout ça, mais ça fonctionne bien depuis cet aprème
    T'as dû rater une étape, là,

    EDIT : je barre car on dirait que ce comportement bizarre était dû à un effet de bord de procédures qui se mordent la queue...
    Non, le souci maintenant (enfin, à moitié puisque contourné par ma bidouille) c'est la propriété Visible des scrollbars qui est toujours à True même quand on ne les voit pas...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  19. #19
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Euh, c'est gentil de te prendre la tête avec tout ça, mais ça fonctionne bien depuis cet aprème
    T'as dû rater une étape, là,

    Non, le souci maintenant (enfin, à moitié puisque contourné par ma bidouille) c'est la propriété Visible des scrollbars qui est toujours à True même quand on ne les voit pas...
    Sur ce coup je pense que c'est un comportement tout à fait normal. Si autoscroll est à TRUE alors les valeurs "Page", "Range" et "increment" sont modifiés automatiquement. La propriété visible n'est là que pour forcer l'affichage de la scrollbar et n'est pas modifié par AutoScroll. Du coup on s'en balance qu'elle soit toujours à true, vu que tu veux les afficher et que c'est toi qui controle ce paramètre. Il ne faut donc pas prendre cette variable comme "interrupteur"
    • "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

  20. #20
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Sur ce coup je pense que c'est un comportement tout à fait normal. Si autoscroll est à TRUE alors les valeurs "Page", "Range" et "increment" sont modifiés automatiquement. La propriété visible n'est là que pour forcer l'affichage de la scrollbar et n'est pas modifié par AutoScroll. Du coup on s'en balance qu'elle soit toujours à true, vu que tu veux les afficher et que c'est toi qui controle ce paramètre. Il ne faut donc pas prendre cette variable comme "interrupteur"
    Hopopop, j'ai barré ma phrase avec ce commentaire (tu réponds trop vite, ) : EDIT : je barre car on dirait que ce comportement bizarre était dû à un effet de bord de procédures qui se mordent la queue...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/02/2013, 14h19
  2. Réponses: 4
    Dernier message: 04/09/2006, 12h41

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