[grisbi-bugs] pb liste déroulante partiellement masquée en double écran

geekobi herve at geekobi.info
Sat Nov 24 17:50:14 CET 2012


Bonjour,
J'utilise grisbi 0.8.9 sous windows avec un double écran (un 1366x768 à 
gauche et un 1680x1050 à droite)
Voici comment reproduire le pb :
- afficher grisbi sur tout l'écran de gauche (le petit)
- se mettre sur une opération d'un compte
- dérouler une liste se trouvant plutôt en bas de l'écran (par exemple la 
liste des tiers
- alors la liste déborde du bas de l'écran : en fait elle se comporte 
comme si elle croyait que l'écran de gauche a la même hauteur que l'écran 
de droite (qui est plus haut)
J'ai l'impression que grisbi récupère la taille des écrans au lancement, 
mais qu'il ne sait pas dans quel écran se fait l'affichage et donc il 
suppose toujours qu'il est dans le plus grand écran.

Comme P.Biava m'indiquait dans un post précédent qu'il ne savait pas 
comment windows gérait les doubles écrans, je donne ici qq explications, 
mais malheureusement c'est du java issu d'un de mes programme et je n'ai 
jamais fait de code équivalent en C, mais ça doit fonctionner à peu près 
pareil.
Voici le code qui me permet de récupérer la taille des écrans en Java 
(avec Eclipse en environnement RCP/SWT) :
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import org.eclipse.swt.graphics.Rectangle;
....
        this.physical_screens = new ArrayList<Rectangle>();
        GraphicsEnvironment ge;
        ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice[] gdArray = ge.getScreenDevices();
        for(int i = 0; i < gdArray.length; i++){
            GraphicsDevice gd = gdArray[i];
            GraphicsConfiguration[] gcArray = gd.getConfigurations();
            for(int j = 0; j < gcArray.length; j++){
                java.awt.Rectangle rect_awt = null;
                // rect =new Rectangle(0,0,0,0) ;
                rect_awt = gcArray[j].getBounds();
                Rectangle rect = new Rectangle(rect_awt.x, rect_awt.y, 
rect_awt.width, rect_awt.height);
                this.physical_screens.add(rect);
            }
        }

Ensuite, quand windows donne une position (x,y), on peut savoir dans quel 
écran elle est affichée (et donc savoir la taille de l'écran en pixels) en 
cherchant dans lequel des rectangles récupérés ci-dessus s'inscrit ce 
(x,y).
Dans ma configuration les coordonnées des rectangles sont par exemple :
(0,0,1366,768) pour l'écran n°0 (qui est numéroté 1 quand j'affiche la 
détection des écrans)
et (1366,0,1366+1680,1050) pour le 2e écran

et si je positionnais mon 2e écran différemment, par exemple en dessous du 
premier j'aurais dans ce cas : (0,768,1680,768+1050)



More information about the bugsreports mailing list