Aide - Recherche - Membres - Calendrier
Version complète : [how to do] une fenetre volante
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS > Développement HB++
palmgaulois
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.php
et 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
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
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 ...
D2P
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
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
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"...
D2P
Il me semble (après un petit test) que le PenUp est effectivement renvoyé dans la form active, donc on peut le gérer anim_wink.gif
palmgaulois
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.
D2P
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 anim_wink.gif
Patrice
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 anim_wink.gif
palmgaulois
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é.
D2P
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 anim_wink.gif

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 anim_wink.gif
Payalba
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
Merci,
je vais tester et l'intégrer dans le soft.
palmgaulois
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 sad.gif
j'ai vu que tu jongle avec "TransparencyColor" mais aussi les copyarea, elle est là l'astuce ?

merci.
Payalba
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 sad.gif

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 sleep.gif
Payalba
J'ai modifié mon petit projet pour redessiner les éléments.
palmgaulois
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.
Invision Power Board © 2001-2008 Invision Power Services, Inc.