--------- LES LISTBOX ----------


Une LIST_BOX  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.

Cette liste  possde deux tats:

Un tat ferm ou  elle se rduit
  une  case  dans laquelle   se   
trouve  le  rsultat  du  choix. 
C'est la case de slection.

Un tat  ouvert  ou une liste de
choix se droule sous la case de
slection.   Cette   liste   est 
compose de cases de liste.

................................
Vue d'une LISBOX ferme:
  _____________________________
 | case de slection       |  |
  -----------------------------

................................
Vue d'une LISBOX ouverte:
  _____________________________
 | case de slection       |  |
 |-------------------------|---|
 | premiere case de liste  |  |   
 |-------------------------|---|
 | deuxieme case de liste  |   |                 
 |-------------------------|   |
 | troisieme case de liste |   |
 |-------------------------|   |
 | quatrieme case de liste |   |
 |-------------------------|   |
 | cinquieme case de liste |   |
 |-------------------------|---|
 | dernire case de liste  |  |   
  -----------------------------


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

..... LES LISTBOX STANDARDS ....
La chaine de  caractre de cette
G_BOXTEXT  permet  de paramtrer
le fonctionnement de la LIST_BOX
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 type  de LIST_BOX.  La  liste
des types  standards  est donne
ci_dessous  avec   le  paramtre 
allant avec. (entre guillemets).
Il  existe 6  types standards de
LIST_BOX pour: 
     Affichage et slection des 
      polices de caractres.
      "FntSel"
     Affichage et slection des 
      trames de remplissage.
      "Patern"
     Affichage et slection des 
      types de lignes.
      "LgnSel"
     Affichage et slection des 
      tailles de caractres.
      "LgnTyp"
     Affichage et slection des 
      effets de texte.
      "TxtEff"
     Affichage et slection des 
      couleurs.      
      "Color"

Le deuxime paramtre (spar du
premier par une virgule) indique
le  nombre  d'lments que  doit
afficher la LIST_BOX. Exemple si
c'est  6  la   LIST_BOX  ouverte
s'affichera sur 6 lignes.

Le troisime paramtre (spar du
deuxime par une virgule) indique
un nombre qu'il vous  est  libre
de choisir, et qui sera retourn
avec le message WM_EXECFUNC lors
d'un click sur  un lment de la
LIST_BOX. Cela permet d'orienter
la rponse lors  d'un click, sur
un dispatcheur de fonctions.
Cette  option  falcultative, est
l  pour  faciliter la  program-
mation.  

EXEMPLE:
Une  LISTBOX  pour  afficher les
polices de caractres, sur  sept
lignes  et  devant  produire  un 
message WM_EXECFUNC  avec  comme
chiffre 254 doit avoir sa chaine de
caractres comme suit:

    FntSel,7,254

Faites attention au paramtre du
nombre de lignes. Si il est trop
grand et  que la liste  droule
ne  peut  pas  tenir,  car  elle
dpasse le bas de sa fenetre, la
LISTBOX ne  s'ouvrira  pas  lors 
d'un click sur son bouton  d'ou-
verture.

...... LES LISTBOX CUSTOM ......
En dehors des LISTBOX  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  de 
ceux  vus  plus haut). Alors  la 
LISTBOX 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 LIST_BOX, 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 LISTBOX,

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

................................
         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.


