[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