--------- LES SCROLLBOX --------


Une SCROLLBOX  est un  objet qui
permet  l'affichage  d'une liste
droulante, et la slection d'un
lment de la liste. Cette liste 
peut scroller  l'aide  de  deux  
flches de dfilement.

Une SCROLLBOX se cre en plaant
un objet de type G_BOXTEXT,(type
BoxText sous Interface)  dont le
type tendu doit etre: 111

... LES SCROLLBOX STANDARDS ....
La chaine de  caractre de cette
G_BOXTEXT  permet  de paramtrer
le fonctionnement de la SCROLBOX
en  fournissant  des  paramtres
spars par des virgules.
Cette possibilit de paramtrage
par l'intermdiaire de la chaine
de caractres des objets GEM est
trs souvent utilise dans EAZY-
GEM.
La syntaxe de  cette  chaine est
la suivante:

le premier paramtre indique  le
nom du fichier ascii devant etre
affich.
Ce  fichier doit se trouver dans
le meme repertoire que les fich-
iers de ressources de l'applica-
tion.

Le deuxime paramtre (spar du
premier par une virgule) indique
le  nombre de pixels de  hauteur
sparant deux lignes de texte.

Le troisime paramtre(spar du
deuxime par une virgule)indique
La taille en points de la police
de caractre.  

Le quatrime paramtre(spar du
deuxime par une virgule)indique
le nom de la  police devant etre
employe  pour  l'affichage.  Si 
elle n'est pas active, la police syt-
systme sera employe. 

EXEMPLE:
Une  SCROLBOX  pour  afficher le
texte  que  vous  avez  sous les 
yeux a le texte suivant:

    SCROLBOX.TXT,12,9,Courier



...... LES SCROLBOX CUSTOM .....
En dehors des SCROLBOX standards
prdfinies qu'offre EAZY_GEM il
est possible d'en  dfinir d'au-
tres, adaptes  un usage parti-
culier. Pour  cela  il vous faut
en crer une avec le premier pa-
ramtre  vide (un  espace  ou un
mot n'tant pas gal  un nom de 
fichier). Alors  la  SCROLBOX se
contentera d'afficher:
ligne 1, ligne 2, ligne 3... etc
Pour  modifier  le  comportement
et cet affichage un peu sommaire
EAZY_GEM met  votre disposition
plusieurs  fonctions  dont voici 
les prototypes et  les  descrip-
tions:
................................
         Prototype:  

void *SetListCallBackFunc 
     ( OBJECT *tree,
       int   ind_ob,
       void *func
     )

        Description 
        
Cette  fonction  permet de modi-
fier la fonction  d'affichage de
la SCROLBOX, en lui donnant dans
le parametre:  void *func
l'adresse  de  la  fonction  qui 
doit afficher chaque ligne,  la
place de celle qui affiche:
ligne 1, ligne 2, ligne 3... etc

Dans le parametre:  OBJECT *tree
l'on  place l'adresse de l'arbre
ou se situe la SCROLBOX,

Dans le paramtre: int   ind_ob
l'on  place l'indice  de l'objet
correspondant  la SCROLBOX.

................................
         Prototype:  

void *SetListBoxParam 
     ( OBJECT *tree,
       int   ind_ob,
       int select,
       int first,
       int nb_lign,
       int nb_item,   
       void *LstBoxParam    
     )

         Description 
         
Cette  fonction  permet de modi-
fier  les   paramtres   de   la 
LIST_BOX:



Dans le parametre:  OBJECT *tree
l'on  place l'adresse de l'arbre
ou se situe la LISTBOX,

Dans le paramtre: int   ind_ob
l'on  place l'indice  de l'objet
correspondant  la LISTBOX.

Dans le paramtre: int   select
l'on  place le numero de l'lm-
ent de la  liste    reprsenter
devant etre affich dans la case
de slection (premier lment de
la LISTBOX).

Dans le paramtre: int   first
l'on  place le numero de l'lm-
ent de  la liste   reprsenter,
devant  etre  affich   dans  la
premire  case  de  liste (celle
situe sousla case de slection,
soit le deuxime  lment  de la
LISTBOX).

Dans le paramtre: int nb_lign
l'on  place le nombre d'lments
que  doit comporter la  LISTBOX,
y compris la case de slection.

Dans le paramtre: int nb_item
l'on  place le nombre d'lments
de la liste  reprsenter.

Dans le param: void *LstBoxParam 
l'on  peut  placer  ce  que l'on  
veut, une adresse de donnes, ou
tout autre  chose. Ce  paramtre
est transmis  la fonction d'af-
fichage de la LISTBOX.              

................................
         Prototype:  

int GetSelectedListBoxItem 
     ( OBJECT *tree,
       int   ind_ob       
     )
     
        Description   
           
Dans le parametre:  OBJECT *tree
l'on  place l'adresse de l'arbre
ou se situe la LISTBOX,

Dans le paramtre: int   ind_ob
l'on  place l'indice  de l'objet
correspondant  la LISTBOX.

Le paramtre retourn indique le
numero de l'lment de la  liste
 reprsenter situ dans la case
de slection.

................................
.LA FONCTION D'AFFICHAGE CUSTOM.
................................

Cette fonction est  celle  qu'il
est   votre  charge d'crire si
vous dsirez  crer une  LISTBOX
adapte  un besoin particulier.
Cette  fonction   devra  pouvoir
afficher chacune des cases de la
LISTBOX, et  sera appele par la
LISTBOX chaque fois qu'elle aura
 afficher ou  mettre  jour une
ou plusieurs de ses cases.

L'adresse de cette fonction doit
etre fournie   la  LISTBOX  par
l'intermdiaire de la fonction:

void *SetListCallBackFunc 
     ( OBJECT *tree,
       int   ind_ob,
       void *func
     )   

dont le parametre: void *func 
doit pointer sur  cette fonction
d'affichage, les autres indiquer
et dsigner l'objet LISTBOX.
 
Cette  fonction doit etre crite
selon le prototype suivant:

int RoutineAffichage(void *adr);

Le paramtre: void *adr transmis
par la LISTBOX sert  nous rens-
seigner sur ce qu'il  faut affi-
cher. Il pointe sur la structure
suivante:

typedef struct                                                          
 {int lign;  
  int preml;  
  int pointl; 
  int h_lign; 
  GRECT grect; 
  GRECT clipgrect; 
  void *LstBoxParam;                    
 }LIST_GET_TXT;     

Le paramtre:  int lign  est  le
numro  de  la  case  afficher,
c'est  en   testant ce paramtre 
que l'on  sait la case qu'il est
demande d'afficher.
                           Si -1
c'est la case de slection qu'il
convient d 'afficher, 
                           Si  0
c'est la  premire case de liste
qu'il convient d'afficher,  
                           Si  1
c'est la deuxime  case de liste
qu'il convient d'afficher, etc..

Le paramtre:  int preml  est le
numro de l'lment de  la liste
 reprsenter devant  etre affi-
ch en deuxime case.

Le paramtre:  int pointl est le
numro de l'lment de  la liste
 reprsenter, devant etre affi-
ch en case  de slection. C'est
ce numro  qui  est retourn par
la fonction: 
          GetSelectedListBoxItem
          
Le paramtre:  int h_lign est la
hauteur en pixels  d'une case de   
la LISTBOX.

Le paramtre: GRECT grect est le
rectangle indiquant les coordon-
nes en pixels de la liste.

Le  paramtre:  GRECT  clipgrect
est le rectangle de clipping que
le GEM nous impose pour le rede-
ssin.

Le  paramtre: void *LstBoxParam
est le  paramtre  optionnel tel
qu'il a t plac plus haut. 

La Rcupration des  coordonnes
et  des  donnes    reprsenter
de la  case  afficher, se  fait
de la faon suivante:

Petit exemple pour comprendre

int RoutineAffichage(void *adr)
{
/*  dclarer un rectangle de  */
/*      de coordonnes.       */

RECT coord; 

/* dclarer un pointeur sur   */
/* la structure de parametres */
/* et l'initialiser sur les   */
/* parametres d'entre        */

LIST_GET_TXT *LST;
LST =  (LIST_GET_TXT*) adr;

/* Calcul des coordonnes     */
/* du rectangle de la case    */
/* qu'il faut afficher        */

coord.left   = LST->grect.g_x;  
                     
coord.top    = LST->grect.g_y +                     
               LST->h_lign    *                     
              (LST->lign + 1); 
                                     
coord.right  = LST->grect.g_x +                     
               LST->grect.g_w - 
              1;          
                       
coord.bottom = coord.top      + 
               LST->h_lign   -1;

/* l vous faites ce que vous */
/* voulez dans ce rectangle   */
/* en fonction du numero de   */
/* case  afficher: LST->lign */
/* et de la donne  afficher */
/* qui est:                   */
/*                            */
/*    Soit celle slectionne */
/*     (si LST->lign == -1)   */
/*     l'indice de donne est */
/*     est alors: LST->pointl */
/*                            */
/*    Soit une autre case     */
/*     (si LST->lign > -1)    */
/*     l'indice de donne est */
/*     est alors:             */
/*     LST->pointl +          */ 
/*     LST->preml             */
/*                            */
 return 1;
}
 
......... IMPORTANT ............
Lorsque vous placez  des LISTBOX
sur  un  formulaire, dbrouillez
vous  ce qu'elles soient dessi-
nes en dernier, afin que ouver-
tes, elles ne soient  pas recou-
vertes  par   un  objet  dessin
aprs. Utilisez  la  fonction de 
tri invers d'Interface.


 

