Le forum (ô combien francophone) des utilisateurs de Powerbuilder.





Bonjour,
Dans ma fenêtre j'ai un UserObject.
Dans mon UserObjet j'ai une DataWindow.
Dans ma DataWindow j'ai beaucoup de rows !-D
Mon soucis est le suivant :
- admettons que ma DataWindow aie une largeur de 5 cm,
- et que chaque row a besoin de 10 cm pour afficher la totalité des colonnes
- lorsque je clic sur un row pour le sélectionner, alors un scroll horizontal est effectué pour m'afficher la fin du row
Moi je souhaite qu'il n'y aie pas ce scroll horizontal... Je souhaite que seule la première partie du row soit visible. Ensuite l'utilisteur aura a sa disposition une barre de scroll horizontale si il veut consulter les colonnes masquées, car elles ne sont pas primordiales.
J'ai "joué" avec les propritétés HScrollBar et HSplitScroll sans succès, puisqu'à priori elle servent à afficher et permettre des scrolls horizontaux.
Savez-vous si il existe une solution ? :-o
Dernière modification par Nyphel (04-09-2008 18:06:08)
Hors ligne






Le comportement que tu veux obtenir est normalement le comportement par défaut.
Je pense qu'il doit y avoir du code dans un événement de ton objet datawindow qui doit réaliser le scroll Horizontal lorsque tu cliques sur une ligne.
ex dans l'événement clicked :
IF row > 0 THEN This.SelectRow(0, FALSE) This.SelectRow(row, TRUE) this.Modify("DataWindow.HorizontalScrollPosition=" + string(integer(this.Describe("DataWindow.HorizontalScrollMaximum")) /2)) END IF
Je ferais une recherche sur le code pour trouver une éventuelle référence à HorizontalScrollPosition.
Hors ligne





Malheureusement j'ai déjà fait cette recherche : j'ai bien du selectrow(), mais rien de plus ;)
Par contre j'ai ajouté un [this.Modify("DataWindow.HorizontalScrollPosition=0")] dans mon event clicked() de ma datawindow, et ça fonctionne plutôt pas mal... Je continue mes investigations, puisque ce n'est pas censé être le comportement de base.
Dernière modification par Nyphel (04-09-2008 17:57:01)
Hors ligne





J'ai la solution : mes colonnes avaient un TabOrder qui permettait donc théoriquement à l'utilisateur de les sélectionner.
Lorsque l'utilisateur cliquait sur un row de ma datawindow, cela sélectionnait donc le row et donnait le focus à la colonne précisément cliquée : je ne m'apercevait pas vraiment de la chose car j'avais interdit la modification des données (readonly).
Dès lors, puisque ma dernière colonne était la plus grande, lorsque l'utilisateur cliquait sur un row il avait tendance à cibler la dernière colonne : celle-ci prenant le focus, ça scrollait automatiquement pour la rendre visible (J'ai un script ancêtre qui fait cela lorsqu'un champ prend le focus dans une datawindow). J'ai donc donné un TabOrder à 0 sur toutes mes colonnes pour qu'elles ne puissent plus prendre le focus, et ça fonctionne à merveille.
Merci encore pour ton aide Buck, sans toi je n'aurais pas compris le soucis
Hors ligne