Aide - Recherche - Membres - Calendrier
Version complète : Bug sur GridEx ?
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS > Développement HB++
palmgaulois
il semble que sous la version 2.11,
si on place dans une colonne de gridex un checkbox relié à un champ boolean j'obtiens une erreur de type 4 "type mismatch"
ça n'interrompt pas le programme, mais c'est ennuyeux de distribuer le soft ainsi.
un field relié au boolean me donne de bonne valeur (true/false)
bizard ...

JP si tu nous lis.
D2P
Ca ne t'aideras certainement pas mais je n'ai pas ce problème sur un Grid anim_wink.gif
palmgaulois
J'ai repris des anciens projets que j'ai transformé pour essais, et j'ai la même erreur.
qqun dans l'assistance peut tester en 2 étapes pour confirmer ?

prendre un projet avec un gridex,
1- remplacer un champs de valeur qquonque par .dirty ou .secret pour faire apparaitre une valeur boolean et tester
ex vValue(0)=dbtoto.nom par vValue(0)=dbtoto.dirty

2- sur la gridex transformer la colonne label (0) ou s'affiche le true/false par un checkbox et tester
-> error 4 type mismatch sur une ligne de code plus loin,
D2P
CITATION(palmgaulois @ 20/03/2007 à 08:53 ) *
J'ai repris des anciens projets que j'ai transformé pour essais, et j'ai la même erreur.
qqun dans l'assistance peut tester en 2 étapes pour confirmer ?

prendre un projet avec un gridex,
1- remplacer un champs de valeur qquonque par .dirty ou .secret pour faire apparaitre une valeur boolean et tester
ex vValue(0)=dbtoto.nom par vValue(0)=dbtoto.dirty

2- sur la gridex transformer la colonne label (0) ou s'affiche le true/false par un checkbox et tester
-> error 4 type mismatch sur une ligne de code plus loin,

Si personne ne le fait dans la journée, je le fais ce soir anim_wink.gif
palmgaulois
bon j'ai trouvé l'erreur,
après avoir remplacé le gridex par un grid ça me faisait pareil, alors que les exemples livrés avec HB++ et bidouillés passés correct.
mon pb est que sur la premiere ligne du grid(ex) j'affiche des "titres" et un titre sur une colonne checkbox déclenche l'erreur.
CODE
' pour afficher titre:
grdComp.AddItem 1
' puis boucle

While not db_travail.EOF
    grdComp.AddItem db_travail.UniqueID
    db_travail.MoveNext
Wend


Private Sub GrdComp_LoadItem(ByVal iRow As Integer, ByVal lItemData As Long, ByVal vValue() As Variant)
    dim jour as string
    compt = compt +1
    if lItemData=1 then
        vValue(0)="| Date dem."
    '    vValue(1)="| Conforme" genere l'erreur
        vValue(2)="| Adress.Local"
        vValue(3)="| Date exec."
        vValue(4)="| Note"
    else
        db_travail.LookupUniqueID lItemData
        jour=left(format(db_travail.zdatedeb,"dddd"),3)
        vValue(0)="|" & jour & " " & format(db_travail.zdatedeb,"dd/mm")
        vValue(1)= db_travail.zConforme ' (boolean)
        vValue(2)="|" & EquipID(db_travail.zeid)
        vValue(3)="|" & left(format(db_travail.zdatefin,"dddd"),3) & " " & format(db_travail.zdatefin,"dd/mm")
        vValue(4)="|" & db_travail.zid_devis
    end if
End Sub
quagliozzi
Salut,

Je n'ai pas bien compris ton problème exactement...
Dans un gridEx, si tu déclares un champ de type booléen, tu ne peux qu'affecter ou récupérer une valeur de type bool.

Dans les exemples fournis avec HB, j'ai noté que les types "CheckBox" n'ont pas de Text associé, pour cela un champ supplémentaire est ajouté de type label.
En d'autres terme, tel qu'est implémenté GridEx pour le moment, tu dissocies la case à cocher de son libéllé.

Je l'utilise actuellement pour l'implémentation de l'interface de gestion des événements à gérer pour un économiseur d'écran et cela fonctionne bien.

Je dispose de 4 colonnes:
- CheckBox : pour activer/désactiver la notification de l'événement
- Label : pour le nom de l'événement
- Popup: pour la condition de déclenchement (batterie, etc...)
- Label: Pour le pourcentage de batterie min.

Je vais relire de nouveau ton post, mais regarde bien la doc de GridEx, les valeurs passées/récuperées sont fortement typées avec GridEx.

A+
Eric.
D2P
CITATION(palmgaulois @ 20/03/2007 à 11:16 ) *
bon j'ai trouvé l'erreur,
mon pb est que sur la premiere ligne du grid(ex) j'affiche des "titres" et un titre sur une colonne checkbox déclenche l'erreur.


CITATION(quagliozzi @ 20/03/2007 à 12:13 ) *
Salut,

Je n'ai pas bien compris ton problème exactement...
Dans un gridEx, si tu déclares un champ de type booléen, tu ne peux qu'affecter ou récupérer une valeur de type bool.

C'est ce que dit Palmgaulois anim_wink.gif
palmgaulois
La premiere ligne de ma grille est reservée au titre, sauf que si la colonne est un checkbox lié au boolean je ne peut pas mettre de titre. ça doit être pareil pour un popup ou un draw.
jusqu'a présent je n'avais que des label dans mes grilles donc ça marchait.
quagliozzi
CITATION(palmgaulois @ 20/03/2007 à 13:20 ) *
La premiere ligne de ma grille est reservée au titre, sauf que si la colonne est un checkbox lié au boolean je ne peut pas mettre de titre. ça doit être pareil pour un popup ou un draw.
jusqu'a présent je n'avais que des label dans mes grilles donc ça marchait.


Oui, tout à fait! Un Grid ou GridEx n'est pas comme un tableau que tu organises en fusionnant des cellules, définissant des hauteurs différentes, etc...

C'est un control relativement rigide, ayant été créé avant tout pour l'affichage de données formatées, depuis un PDB (des records). Il est toujours possible de "bidouiller" pour le rendre plus versatile, mais il n'en est pas moins vrai qu'une fois les champs fixés...

Pour ce qui est d'afficher une ligne, sorte de header, de description de ton tableau, j'ai bien peur qu'il n'y ait pas de solutions, du moins simple.

Ce que tu ne pourras pas faire: Avoir à ta disposition la largeur du Grid Control pour en afficher le contenu si tu as des controls intégrés (popup, checkbox, etc...).

Ce que tu peux faire: Invalider des controles pour la première ligne, ce qui ne répond pas vraiment as ce que tu recherches.

Je vais tester qq bricolages pour voir, mais je serais surpris de trouver une solution. Chaque fois qu'un contrôle est défini dans un champ, celui-ci est dessiné automatiquement selon les valeurs passées à LoadItem.

A+
Eric.
D2P
Une solution simple serait d'afficher les titres des colonnes par un textout au dessus du gridex anim_wink.gif
palmgaulois
le textout:
ce serait simple s'il n'y avait pas de scroll horizontable, mais j'ai pris le gridex a cause de ce + sur le grid ordinaire.
quagliozzi
CITATION
le textout:
ce serait simple s'il n'y avait pas de scroll horizontable, mais j'ai pris le gridex a cause de ce + sur le grid ordinaire.


Ok, si il y a un scrolling horizontal, il n'y a pas beaucoup de solutions:

Il faut que tu réalises un UC ustilisant la fonction TextOut dont l'offset horizontal dépendra de la position de défilement du GridEx.

Pour cela, il faudra intercepter l'événement Scroll/Track du scrollbar attaché à ton GridEx (HorzScroll).
Je n'ai pas essayé, mais je pense que Min,Max et Value doivent être automatiquement initialisés lors du chargement du GridEx (LOAD event).

Ceci dit je n'ai jamais essayé (je vais voir cela, par curiosité) et la doc précise:

CITATION
Once the scrollbar or spinbutton is attached, the grid manages all the interaction between the two controls. You should not attempt to alter the characteristics of the scrollbar or spinbutton directly. If you want to programatically scroll the grid, you should use the TopItem and LeftCol properties instead.


Donc... qq essais s'imposent.

Pour terminer, si ce que tu souhaites obtenir n'est pas trop interactif (type label et checkbox) tu peux créé un UC répondant exactement à tes besoins. C'est plus long mais parfois plus efficace lorsqu'on en arrive à devoir pas mal "bidouiller" les contrôles existant ou difficilement intercepter des événements.

A+
Eric.
Payalba
CITATION(palmgaulois @ 20/03/2007 à 14:47 ) *
le textout:
ce serait simple s'il n'y avait pas de scroll horizontable, mais j'ai pris le gridex a cause de ce + sur le grid ordinaire.

Pour gérer les titre des gridex, j'utilise deux grid ex.
Avec la gridex du haut (les titres), j'ai mis au point un system qui permet de gérer les agrandissements, diminition de colones et le scol de gauche
à droite est gérer avec un UC ou ascenseur.

Tu peux voir l'effet par exemple dans CarnetDeBord ou FileList.
quagliozzi
CITATION(palmgaulois @ 20/03/2007 à 14:47 ) *
le textout:
ce serait simple s'il n'y avait pas de scroll horizontable, mais j'ai pris le gridex a cause de ce + sur le grid ordinaire.


Bon, j'ai programmé ta solution, interception d'événement, un UC spécial maison, et voilà, tu as un scrolling nickel en fonction du défilement du GridEx.

Je fais qq modifs, tests pour être sûr de t'envoyer qq chose qui fonctionne, et mets un lien pour le téléchargement demain.

A+
Eric.
palmgaulois
CITATION(Payalba @ 20/03/2007 à 18:26 ) *
Tu peux voir l'effet par exemple dans CarnetDeBord ou FileList.


j'ai pas accés à ces 2 merveilles, dommage.

CITATION(quagliozzi @ 20/03/2007 à 19:33 ) *
Bon, j'ai programmé ta solution, interception d'événement, un UC spécial maison, et voilà, tu as un scrolling nickel en fonction du défilement du GridEx.


Vraiment trop fort cet Eric !!
Payalba
Ah oui pour CarnetDeBord

FileList est surement sur le forum ou sur PalmGear
quagliozzi
Salut,

CITATION(palmgaulois @ 20/03/2007 à 20:40 ) *
Vraiment trop fort cet Eric !!


Bon, ce n'est qu'un UC... wink.gif

Alors, chose promise, chose due!
Donc tu peux télécharger l'exemple complet ici: Exemple ucGridExHeader

L'ucGridExHeader implémente les fonctions essentielles, je n'y ai pas intégré les propriétés pour la couleur du texte, du fond, etc...

Dans le LOAD event de la form, tu définis la référence de ton GridEx, à partir de là, l'UC peux en extraire toutes les données dont il a besoin.

Pour ajouter un titre, utilises la méthode AddCaption qui prend 3 arguments:
- Le titre (String)
- L'indice de la colonne de début du titre
- L'indice de la colonne de fin du titre

Ainsi
CODE
ucGridExHeader1.AddCaption "Mon titre",0,1

insére un titre commençant au début de la colonne 0 et s'étendant à la fin de la colonne 1

CODE
ucGridExHeader1.AddCaption "Mon titre",2,2

insére un titre commençant au début de la colonne 2 et s'étendant à la fin de la colonne 2

Le text est automatiquement tronqué et l'ensemble est dessiné en utilisant un double buffer.

Bref, un coup d'oeil sur le code et tu verras qu'il n'y a rien de sorcier.

Je vais en faire une version plus avancée et la mettre dans les UC, sur mon site. La version postée ici en download sera par la suite détruite et j'ajouterais le lien sur la nouvelle version.

Si tu as un problème, fais moi signe.

A+
Eric.
palmgaulois
je vais tester ça, merci.
quagliozzi
CITATION(palmgaulois @ 22/03/2007 à 11:29 ) *
je vais tester ça, merci.


Bonjour,

As-tu rencontré des soucis?
Veux-tu que j'y ajoute des fonctions supplémentaires?

A+
Eric
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.