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 FMX Delphi Discussion :

[Delphi rio 10.3.3] Comment avoir un scrollbar sur un stringgrid


Sujet :

Composants FMX Delphi

  1. #1
    Membre extrêmement actif
    [Delphi rio 10.3.3] Comment avoir un scrollbar sur un stringgrid
    Je ne pensais par avoir à poser une question aussi bête un jour... Et pourtant...

    Alors qu'il fallait simplement régler une propriété dans l'inspecteur d'objet pour un stringgrid en VCL, comment fait-on pour un stringgrid en FMX???


    Embarcadero ferait bien de prendre un peu plus au sérieux sa documentation. Parce que à force d'être confronté à de la doc incomplète qui précise que l'utilisateur peut aider Embarcadero à compléter sa doc de m... et à un manque complet de tout exemple de code (qu'elle est loin la période bénie de la doc de Delphi7!!!), ils vont inciter les développeurs Delphi les plus fidèles à jeter leur produit à la poubelle!

  2. #2
    Rédacteur/Modérateur

    Bonjour,

    Je passe le fait de la mauvaise humeur

    Déjà je répondrai que FMX est du multi plateforme et que la ScrollBar n'a absolument pas le même comportement selon la cible ce qui n'est pas sans arrachage de cheveux à cause de sa disparition si la grille n'est pas le composant actif (je crois qu'il y a déjà eu un post à ce sujet), tout comme la largeur souhaitée (pendant que j'y pense, un style personnalisé pourrait peut-être y faire quelque chose)

    Ensuite, je l'avoue :
    je ne comprend pas totalement la demande (de quel scrollbar s'agit-il vertical/horizontal) ?
    je n'utilise pratiquement plus les TStringgrids ni même les TGrids et préfère les TListView quel serait l'objectif (une image écran de ce qui serait voulu en VCL vs FMX ?)
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  3. #3
    Membre expérimenté
    Côté doc, y a des efforts qui sont faits mais il y a toujours des manques, n'hésite pas à ouvrir des tickets d'incident à partir des pages de documentation que tu juges incomplètes ou qui sont vides afin de leur rappeler qu'un petit quelque chose serait utile. Il y a un lien QP en bas de chaque page du docwiki pour ça.

    Vérifie aussi la page en anglais, il y a parfois des écarts dans la traduction même s'ils tentent d'éviter les loupés et que tout soit synchronisé.

    Concernant ton problème plus direct, la grille devrait avoir les ascenseurs automatiques horizontalement et verticalement si son contenu déborde d'un côté ou de l'autre.

    Dans quelle version es-tu ?
    Est-ce que si tu ajoutes une TStringGrid à une fiche et y insère des colonnes les ascenseurs apparaissent bien dans l'IDE ?

  4. #4
    Membre extrêmement actif
    Citation Envoyé par SergioMaster Voir le message

    Ensuite, je l'avoue :
    je ne comprend pas totalement la demande (de quel scrollbar s'agit-il vertical/horizontal) ?
    je n'utilise pratiquement plus les TStringgrids ni même les TGrids et préfère les TListView quel serait l'objectif (une image écran de ce qui serait voulu en VCL vs FMX ?)
    Hello,

    J'utilise un stringgrid pour afficher un tableau de données et je parles des scrollbar vertical et horizontal qui permettent à l'utilisateur de visualiser des données qui ne sont pas accessibles parce que la zone d'affichage n'est pas suffisante pour afficher tout le tableau (exemple ci-dessous)!



    Je n'utilise pas les TListView. Est-ce que la notion de scrollbar existe pour ce type de compo?

    Merci pour la réponse

  5. #5
    Membre extrêmement actif
    Citation Envoyé par pprem Voir le message
    Côté doc, y a des efforts qui sont faits mais il y a toujours des manques, n'hésite pas à ouvrir des tickets d'incident à partir des pages de documentation que tu juges incomplètes ou qui sont vides afin de leur rappeler qu'un petit quelque chose serait utile. Il y a un lien QP en bas de chaque page du docwiki pour ça.

    Vérifie aussi la page en anglais, il y a parfois des écarts dans la traduction même s'ils tentent d'éviter les loupés et que tout soit synchronisé.

    Concernant ton problème plus direct, la grille devrait avoir les ascenseurs automatiques horizontalement et verticalement si son contenu déborde d'un côté ou de l'autre.

    Dans quelle version es-tu ?
    Est-ce que si tu ajoutes une TStringGrid à une fiche et y insère des colonnes les ascenseurs apparaissent bien dans l'IDE ?
    Hello,

    Merci pour ta réponse.

    Avec Delphi Rio 10.3.3, j'ai ajouté un TStringgrid FMX sur une fiche pour une app Android. Les données dépassent mais les ascenseurs n'apparaissent pas!

    Si je code "StringGrid1.EnabledScroll:=true;", il y a un pseudo-fonctionnement de scrollbar: Il faut garder le doigt pressé sur l'entête du tableau (et pas sur une ligne de données)>>>Il apparait alors une ligne grise sur le côté du tableau qui laisse à penser qu'il y a quelque chose à scroller >>> je glisse le doigt sur l'écran et je peux "scroller" vers le haut ou le bas pour afficher les lignes qui n'apparaissaient pas.

    Où est le problème? Il y a tout simplement pas la moindre chance que l'utilisateur lambda comprenne qu'il y a des données à scroller et comment faire pour scroller!!!

    ***

    Concernant la doc Delphi avec une multitude de phrases magiques "Embarcadero n'a pas d'info sur la propriété X ou Y", c'est tout simplement scandaleux! Comment peut-on défendre un produit comme Delphi qui coûte la peau des fesses avec ce genre d''approche quand un Lazarus gratos est parfaitement documenté???

    C'est tout simplement du "foutage de gueule"! Je viens de revoir une facture de plusieurs milliers d'euro pour l'abonnement à Delphi et franchement je me demande si cela vaut la peine de continuer avec une entreprise qui méprise ses clients!

    Et surtout que personne me vende le balabla marketing "oui mais avec Delphi, on a un gros gain de productivité". Quand tu dois perdre des heures sur le web a chercher ce que Embarcadero n'explique pas dans sa doc (pour certains sujets, j'ai trouvé des réponse sur des sites ukrainiens et japonais... Merci à google translate), la productivité tu la trouves chez Lazarus avec la gratuité en plus!

  6. #6
    Expert confirmé
    Citation Envoyé par pprem Voir le message
    Côté doc, y a des efforts qui sont faits
    Au bout de 15 ans, je ne les ai toujours pas vu.
    100 % d'accord avec Anselme45.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. Écrivez dans un français correct !!

    Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise
    OpenGL 2.1 - Oracle 10g - Interbase (7 - XE) - PostgreSQL 11.6

  7. #7
    Rédacteur/Modérateur

    Bonjour,
    Je n'utilise pas les TListView. Est-ce que la notion de scrollbar existe pour ce type de compo?
    que ce soit un TStringList, un TGrid, un TListBox ou un TListView je crois qu'ils ont le même descendant : un TScrollbox.
    Donc, pour répondre à la question, oui.

    j'ai ajouté un TStringgrid FMX sur une fiche pour une app Android. Les données dépassent mais les ascenseurs n'apparaissent pas!
    on y est, je t'avais répondu
    Citation Envoyé par SergioMaster
    Déjà je répondrai que FMX est du multi plateforme et que la ScrollBar n'a absolument pas le même comportement selon la cible
    Déjà s'il s'agit d'une cible Androïd, je reste ferme j'utiliserai ListView pour des données. Il ne vient pas à l'esprit de permettre de la saisie dans une Grille sous Android.

    Si je code "StringGrid1.EnabledScroll:=true;", il y a un pseudo-fonctionnement de scrollbar: Il faut garder le doigt pressé sur l'entête du tableau (et pas sur une ligne de données)>>>Il apparait alors une ligne grise sur le côté du tableau qui laisse à penser qu'il y a quelque chose à scroller >>> je glisse le doigt sur l'écran et je peux "scroller" vers le haut ou le bas pour afficher les lignes qui n'apparaissaient pas.
    toujours à mon avis, ton erreur est de vouloir un comportement et un interface "à la windows". Sinon c'est le comportement normal Android. N'utilisant pas Stringgrid pour une cible Android (et même windows désormais) je n'ai pas constaté le phénoméne 'garder le doigt sur l'entête'

    Il est possible que je me trompe complétement.
    Que la scrollbar se cache, il semblerait que ce ne soit pas Delphi le coupable mais le comportement Android "normal" vois-tu un ascenseur dans ta page paramètre de ton téléphone (ScrollBox ou ListBox) ou dans la liste des SMS (un TListView) ? AMHA non, sauf quand le doigt est dessus, une raison des doigts trop gros pour la glissière et pas de dispositif de pointage.

    Delphi tendant à faire de plus en plus de composants plateforme, je pense qu'il a été décidé de suivre le comportement de la plateforme.

    Où est le problème? Il y a tout simplement pas la moindre chance que l'utilisateur lambda comprenne qu'il y a des données à scroller et comment faire pour scroller!!!
    Si tu regardes certaines interface pour indiquer ce genre de choses il y a souvent un/des bouton/s genre page suivante/précédente et les données sont paginées

    Une solution ?
    A mon avis, bien qu'hier mes tentatives d'accès n'ont pas été couronnées de succès, tout se joue dans les styles (ne pas oublier que même si l'on en utilise pas il y a un style par défaut).
    Je n'ai pas non plus pris beaucoup de temps pour mes tests et n'ai pas vraiment fouillé dans les feuilles de styles, à mon avis il y a des triggers qui font le boulot de cacher/afficher les curseurs.
    Dans mes tests j'ai voulu directement accéder aux deux barres (HBar, VBar)
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     var Alayout : TLayout
     StringGrid1.FindStyleResource<TLayout>('StrinGridStyle',aLayout) 
    // ou
    var T : TTrackBar          
    StringGrid1.FindStyleResource<TTrack>('StrinGridStyle.HTrack',aLayout)

    Mais non, j'ai une exception. Il faut dire que le style d'une grille est vraiment complexe, si j'arrive à accéder à des élements de style "simple", le style d'un grille est un ensemble composé at ça, je n'ai jamais tenté sauf hier .



    Et surtout que personne me vende le balabla marketing "oui mais avec Delphi, on a un gros gain de productivité".
    Pas d'accord, je ne fais pas de marketing et j'ai pu écrire aussi des programmes avec Lazarus. De mon expérience même en se basant sur D7 et ce pour des programmes de gestion je préfère D7. Je suis trop vite tombé sur des composants à faire à la main

    Concernant la doc
    Même si j'ai tendance à être de ton avis sur le "foutage de gueule" de "Embarcadero n'a pas d'info etc..", que la recherche d'information adéquate passe par des recherches web, dans les sources et dans les exemples fournis. Il faut raison garder. Selon mon expérience, et crois moi, des programmes de gestion j'en écris tout les jours, c'est quand on sort des sentiers battus que l'on se heurte à ce genre de message. Sur une forme "classique" de données à afficher je n'utilise que rarement la touche aide (le plus souvent pour le TPath de ioutils mais il y a de la doc et surtout le wiki) maintenant, oui, je m'en écarte régulièrement et là c'est de la plongée profonde, immersion dans les sources (exemple TPath de l'unité graphics, deux "composants" avec le même nom !)

    Oui c'est rageant (et tu es coutumier du fait) d'avoir un produit cher (enfin faut-il comparer ce qui est comparable) et qu'il y ait des lacunes de documentation (cite moi un truc qui n'en ai pas, ne me dit pas Lazarus ou alors c'est qu'il a beaucoup évolué depuis mes essais, et c'est grâce aux bénévoles).

    Parlons pro et relativisons le prix : Ramené à la journée de travail, ou plutôt à l'année : moins de 3€ pour Delphi (je ne parle pas de l'investissement initial mais de renouvellement sur la base d'une version Entreprise)
    Je t'arrête : je n'ai aucune action, revenu etc. de la part d'Embarcadero ou revendeurs et aucune contrainte genre MVP et donc garde mon droit à râler @quisesentvisé, c'et vraiment ce que je pense. Peut-être que dans moins de 1000 jours (je suis passé sous cette barre) commencerai-je à râler sur le prix du renouvellement, mais rien ne m'empêchera de continuer avec un "vieux" delphi et ce ne sera plus en tant que pro.
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  8. #8
    Membre extrêmement actif
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,
    Toujours à mon avis, ton erreur est de vouloir un comportement et un interface "à la windows". Sinon c'est le comportement normal Android. N'utilisant pas Stringgrid pour une cible Android (et même windows désormais) je n'ai pas constaté le phénoméne 'garder le doigt sur l'entête'
    Vu que le projet consiste à transposer une application windows existante en une version Android dans les plus brefs délais, j'avoue mon erreur d'être tenté d'aller au plus court sans remettre en question la logique de fonctionnement "windowienne"

    Citation Envoyé par SergioMaster Voir le message

    Que la scrollbar se cache, il semblerait que ce ne soit pas Delphi le coupable mais le comportement Android "normal"...

    Une solution ?
    A mon avis, bien qu'hier mes tentatives d'accès n'ont pas été couronnées de succès, tout se joue dans les styles (ne pas oublier que même si l'on en utilise pas il y a un style par défaut).
    Perso, je ne cherche pas des coupables mais des solutions. En l'état, Delphi propose un composant stringgrid FMX avec un fonctionnement "scrollbar" qui est tout simplement inutilisable dans le monde réel pour une app Android. Je suis de ton avis, il faut oublier cette solution.

    Citation Envoyé par SergioMaster Voir le message

    Concernant la doc
    Même si j'ai tendance à être de ton avis sur le "foutage de gueule" de "Embarcadero n'a pas d'info etc..", que la recherche d'information adéquate passe par des recherches web, dans les sources et dans les exemples fournis. Il faut raison garder. Selon mon expérience, et crois moi, des programmes de gestion j'en écris tout les jours, c'est quand on sort des sentiers battus que l'on se heurte à ce genre de message. Sur une forme "classique" de données à afficher je n'utilise que rarement la touche aide (le plus souvent pour le TPath de ioutils mais il y a de la doc et surtout le wiki) maintenant, oui, je m'en écarte régulièrement et là c'est de la plongée profonde, immersion dans les sources (exemple TPath de l'unité graphics, deux "composants" avec le même nom !)
    Désolé d'avoir à utiliser Delphi pour des projets nécessitant autre chose que des TLabel, Tedit et soyons fou des TPanel.

    Perso, j'ai un usage très large de Delphi (allant de la simple application "classique" au développement de protocole de communication, de logiciel de contrôle commande de processus industriel) et j'ai toujours été heureux de constater que Delphi me permettait de tout faire! C'est d'autant plus rageant de voir le comportement de Embarcadero.

    Quand on est une société de plus de 500 personnes, est-il trop demandé d'attendre qu'une dizaine de personnes soient dédiées à compléter la documentation au fil des années? Parce que je précise que les phrases magiques "Embarcadero ne dispose pas d'info sur la propriété X ou Y" ne se limitent pas à des composants exotiques et nouvellement ajoutés à Delphi!

    Citation Envoyé par SergioMaster Voir le message

    Oui c'est rageant (et tu es coutumier du fait) d'avoir un produit cher (enfin faut-il comparer ce qui est comparable) et qu'il y ait des lacunes de documentation (cite moi un truc qui n'en ai pas, ne me dit pas Lazarus ou alors c'est qu'il a beaucoup évolué depuis mes essais, et c'est grâce aux bénévoles).
    Fondamentalement, ce n'est pas un problème de prix. Le problème est que Embarcadero joue sur les 2 tableaux: Ils font dans le commercial et compte sur des bénévoles pour améliorer le produit qu'ils vendent!!!

  9. #9
    Rédacteur/Modérateur

    Citation Envoyé par Anselme45 Voir le message

    Désolé d'avoir à utiliser Delphi pour des projets nécessitant autre chose que des TLabel, Tedit et soyons fou des TPanel.
    je te pris de croire qu'il est loin d'y avoir que ça sur mes formes
    TPanel ouh le vieux reflexe il y a les TLayouts
    tu oublies la culture "presse-bouton" de mes utilisateurs
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  10. #10
    Rédacteur/Modérateur

    Solution ?
    Pour en revenir à nos moutons (scrollbar) ce code fonctionne sous windows (ma grille étant carrément vide )

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var T : TScrollBar;
    begin
    try
    StringGrid1.FindStyleResource<TScrollBar>('vscrollbar',T); // facile de deviner pour la barre horizontale  
    if Assigned(T) then T.Visible:=not T.Visible;
    except
    end;

    je n'ai pas (encore) testé sous Android (le scrollbar est plus petit que pour windows mais il est là )
    désolé l'image est un peu floue, ma version de Vysor n'était pas à jour

    en avoir un aussi large que windows doit être une chose possible (en triturant le style toujours)
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  11. #11
    Membre extrêmement actif
    Citation Envoyé par SergioMaster Voir le message
    Pour en revenir à nos moutons (scrollbar) ce code fonctionne sous windows (ma grille étant carrément vide )

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var T : TScrollBar;
    begin
    try
    StringGrid1.FindStyleResource<TScrollBar>('vscrollbar',T); // facile de deviner pour la barre horizontale  
    if Assigned(T) then T.Visible:=not T.Visible;
    except
    end;

    je n'ai pas (encore) testé sous Android (le scrollbar est plus petit que pour windows mais il est là )
    désolé l'image est un peu floue, ma version de Vysor n'était pas à jour
    J'ai testé ton code avec un "beau stringgrid" rempli de lignes que je n'arrive pas à afficher dans la zone à disposition et j'ai le résultat suivant :

    1. J'applique ton code et un petit trait gris apparait à la droite de la 1ère ligne de données du stringgrid

    2. Impossible de scroller le stringgrid par ce moyen

    3. Par contre, si je garde le doigt pressé sur l'entête des colonnes du stringgrid, il apparait juste à la gauche de ton trait le pseudo scrollbar (la même ligne grise, même largeur, mais avec une longueur qui couvre une dizaine de lignes du stringgrid) et en glissant le doigt vers le haut je "scroll" en affichant les lignes en fin de stringgrid. A remarquer que ce comportement (presser sur l'entête du stringgrid pour scroller) semble être le comportement par défaut parce que j'ai ce comportement après avoir supprimé le code que j'avais essayé pour gérer les scrollbar.

  12. #12
    Rédacteur/Modérateur

    Bonjour,

    Certains diront que je suis têtu je répondrai que je ne suis qu'opiniâtre
    Bref j'ai surtout voulu comprendre
    Il faut garder le doigt pressé sur l'entête du tableau (et pas sur une ligne de données)
    ce que je n'ai pas constaté (t'as de gros doigts tu sais )

    par contre oui, mon idée de montrer quand même le scrollbar via le style était un peu loufoque. Bien que cela puisse donner une indication qu'il y ait quelque chose à faire défiler, il n'y a pas calcul de hauteur ni de position et, oh surprise sous Android on voit effectivement le "vrai" scrollbar à côté.

    Cependant je suis sûr qu'un utilisateur préféra cette présentation en TListView (non peaufinée pour ce qui est de la surface et de la population) à l'écran StringGrid

    Tu y noteras une recherche sans une once de code supplémentaire
    N.B. il m'a été impossible de trouver un VScrollbar dans le style du TListview
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  13. #13
    Membre extrêmement actif
    Citation Envoyé par SergioMaster Voir le message
    Certains diront que je suis têtu je répondrai que je ne suis qu'opiniâtre
    Bref j'ai surtout voulu comprendre
    ce que je n'ai pas constaté (t'as de gros doigts tu sais )
    Perso, je suis têtu, opiniâtre avec de gros doigts!

    Je te confirme que dans mon app, je peux poser mon doigt délicat sur n'importe quel ligne de données de mon stringgrid, cela ne fait pas apparaître les scrollbars "made in Android". Ils apparaissent seulement quand je touche la ligne d'entête du stringgrid et je peux "scroller". Peut-être que c'est dû au fait que les lignes de données du stringgrid ne sont pas éditables.

    Têtu, opiniâtre avec de gros doigts... Mais ouvert aux solutions nouvelles! Je vais tester la solution TListView pour voir si son usage est adapté à mon app.

    Merci encore pour ton aide.

  14. #14
    Rédacteur/Modérateur

    Re,
    Citation Envoyé par Anselme45 Voir le message

    Peut-être que c'est dû au fait que les lignes de données du stringgrid ne sont pas éditables.
    ça c'est une donnée que je n'avais pas en possession, effectivement pour ce test rapide, j'ai laissé en mode "editable"


    Têtu, opiniâtre avec de gros doigts... Mais ouvert aux solutions nouvelles! Je vais tester la solution TListView pour voir si son usage est adapté à mon app.
    l'essayer c'est l'adopter (je crois) mais tu vas certainement pas mal pester si tu utilises le mode Dynamique (comme dans cette "démo") il faut un temps "d'adaptation" pour en comprendre le mode conception. Au besoin j'ai gardé le source

    Merci encore pour ton aide.
    un plaisir j'ai pu jouer un peu avec les styles et l'application sur ces scrollbars
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

###raw>template_hook.ano_emploi###