palmgaulois
20/02/2007 à 17:15
Hi,
Je cherche comment faire une fenetre popup qui apparait (avec 2-3 lignes d'infos) quand je laisse le stylet sur un objet, et disparaisse dés le stylet relevé.
je pars de l'exemple calendar ici
http://www.handheld-basic.com/su_samples.phpet voudrais faire apparaitre les caractéristique d'un enregistrement associé à une date.
pour l'instant mes infos apparaissent dans un field.text mais ça mange de la place sur l'écran.
Merci.
Patrice
20/02/2007 à 17:33
Solution à 2 balles qu'il m'arrive d'utiliser (les APIs sont celles du SDK, ça doit être transposable en HB++) :
- Sur l'événement penDownEvent, ouvrir une form (avec les caractéristiques souhaitées) avec un FrmPopupForm
- Dans le handler de cette form, gérer les événements penMoveEvent et penUpEvent
- A l'arrivée d'un de ces événements, fermer la form, revenir à la form principale et ré-insérer l'événement dans la pile
palmgaulois
20/02/2007 à 18:39
je viens de faire ce que tu proposes mais comme ma fenetre popup est plus petite pour ce placer en dessous du calendrier, je ne peux pas mettre de penUPevent sur le vide,
je vais devoir y placer un timer et fermer après un lasp de temps.
je creuse ...
Le PenUp n'est pas appelé si il a lieu en dehors de ta 2ème fenêtre, c'est ce que tu veux dire ?
Une idéé comme ça... Tu insères une image dans laquelle tu écris et que tu affiches ensuite, puis tu la rends invisible au PenUp.
Payalba
20/02/2007 à 18:56
Avec HB j'aurai fait un UC que j'aurai fait glisser en desous ou au dessus du stylet (en fonction de la position du stylet)
Patrice
20/02/2007 à 19:09
CITATION(palmgaulois @ 20/02/2007 à 18:39 )

je viens de faire ce que tu proposes mais comme ma fenetre popup est plus petite pour ce placer en dessous du calendrier, je ne peux pas mettre de penUPevent sur le vide,
je vais devoir y placer un timer et fermer après un lasp de temps.
je creuse ...
Je ne comprend pas le problème ? Quelle que soit la fenêtre où l'événement intervient il est routé sur la form active ! Qu'est-ce que tu veux dire par "sur le vide" ? Si c'est en dehors de ta popup, cela n'a aucune importance (enfin, dans mes cas d'utilisation, je n'ai pas de problème, c'est peut-être HB++ qui ruse...).
L'alternative serait de constuire, afficher et activer la fenêtre toi-même et de gérer une boucle d'événement "dedans"...
Il me semble (après un petit test) que le PenUp est effectivement renvoyé dans la form active, donc on peut le gérer
palmgaulois
20/02/2007 à 21:29
Patrice,
j'ai une form qui occupe tout l'espace de l'écran, la partie supérieure de la form affiche un calendrier, ma seconde form, popup celle-ci n'occupe que la partie inférieur où le calendrier ne s'affiche pas.
quand je fais un penDown sur la form principale, elle appel la popup mais reste affichée en "arriere plan", comme mon stylet est dans une case qui réprésente un jour du mois, je ne peux pas glisser-appuyé vers la popup pour qu'il prenne le focus et lui assigner un PenUP pour l'effacer.
voila.
CITATION(palmgaulois @ 20/02/2007 à 21:29 )

Patrice,
j'ai une form qui occupe tout l'espace de l'écran, la partie supérieure de la form affiche un calendrier, ma seconde form, popup celle-ci n'occupe que la partie inférieur où le calendrier ne s'affiche pas.
quand je fais un penDown sur la form principale, elle appel la popup mais reste affichée en "arriere plan", comme mon stylet est dans une case qui réprésente un jour du mois, je ne peux pas glisser-appuyé vers la popup pour qu'il prenne le focus et lui assigner un PenUP pour l'effacer.
voila.
Mais sans glisser, si tu relèves le stylet de la form principale, alors a priori un PenUp sera envoyé vers la form active, c'est à dire ta form popup
Patrice
20/02/2007 à 21:43
CITATION(palmgaulois @ 20/02/2007 à 21:29 )

quand je fais un penDown sur la form principale, elle appel la popup mais reste affichée en "arriere plan", comme mon stylet est dans une case qui réprésente un jour du mois, je ne peux pas glisser-appuyé vers la popup pour qu'il prenne le focus et lui assigner un PenUP pour l'effacer.
Dans mon cas, je fais un penDown, j'affiche ma popup "ailleurs", je lève le stylet (toujours en dehors du popup), j'ai toujours le penUp dans le handler de ma popup.
Ce qui doit être différent dans ton cas, c'est la notification au système de traitement de l'événement : le système n'envoie le penUp que si tu "avertis" que tu gères le penDown (en C, il faut renvoyer "true" après traitement de l'événement).
Explication approximative et hésitante, je suis fatigué ce soir... Mais je te garantis que j'utilise ça et que ça fonctionne
palmgaulois
20/02/2007 à 21:48
effectivement, j'étais convaincu que comme le stylet n'était pas dans la surface du popup qu'il ne pouvait capter l'event penUp du calendrier.
bon reste à gérer les détails ...
merci.
Payalba, si à un bout de code avec l'uc je suis interessé.
CITATION(Patrice @ 20/02/2007 à 21:43 )

Dans mon cas, je fais un penDown, j'affiche ma popup "ailleurs", je lève le stylet (toujours en dehors du popup), j'ai toujours le penUp dans le handler de ma popup.
Ce qui doit être différent dans ton cas, c'est la notification au système de traitement de l'événement : le système n'envoie le penUp que si tu "avertis" que tu gères le penDown (en C, il faut renvoyer "true" après traitement de l'événement).
Explication approximative et hésitante, je suis fatigué ce soir... Mais je te garantis que j'utilise ça et que ça fonctionne
Dans le petit test que j'ai fait ce midi, je ne gère pas le PenDown dans la form principal, et le PenUp a bien été appelé dans la fenêtre popup
Payalba
21/02/2007 à 06:35
CITATION(Patrice @ 20/02/2007 à 21:43 )

Dans mon cas, je fais un penDown, j'affiche ma popup "ailleurs", je lève le stylet (toujours en dehors du popup), j'ai toujours le penUp dans le handler de ma popup.
Ca doit être pareil en HB meme le stylet en dehors des popup on recoit les event
J'ai regardé ce que cela pouvait donner avec les UC.
Le code est joint.
C'est le usercontrol2 qui apparait.
xpen et ypen sont les coordonnées du stylo en cours
t est le timer qui gère le temps avant l'affichage.
C'est du rudimentaire mais ca a l'air de fonctionner sur l'émulateur du IIIxe.
palmgaulois
21/02/2007 à 07:56
Merci,
je vais tester et l'intégrer dans le soft.
palmgaulois
21/02/2007 à 09:37
J'ai implanté la methode avec un uc bidouillé pour avoir 3 lignes d'infos,
penDown l'uc s'affiche
penUP l'uc s'efface mais il efface ce qu'il a recouvert: l'arriere plan également

j'ai vu que tu jongle avec "TransparencyColor" mais aussi les copyarea, elle est là l'astuce ?
merci.
Payalba
21/02/2007 à 12:41
CITATION(palmgaulois @ 21/02/2007 à 09:37 )

J'ai implanté la methode avec un uc bidouillé pour avoir 3 lignes d'infos,
penDown l'uc s'affiche
penUP l'uc s'efface mais il efface ce qu'il a recouvert: l'arriere plan également

Relance un paint sur la fenêtre avec le visible = false ca devrait redessiner les elements recouvert.
CITATION(palmgaulois @ 21/02/2007 à 09:37 )

j'ai vu que tu jongle avec "TransparencyColor" mais aussi les copyarea, elle est là l'astuce ?
Non, c'est du code que j'avais écrit pour aider une autre personne
Payalba
21/02/2007 à 14:01
J'ai modifié mon petit projet pour redessiner les éléments.
palmgaulois
21/02/2007 à 14:02
CITATION(Payalba @ 21/02/2007 à 12:41 )

Relance un paint sur la fenêtre avec le visible = false ca devrait redessiner les elements recouvert.
oui c'était aussi simple que ça, j'avais trouvé entre-temps.
merci.
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.