PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Obliger l'utilisateur à lire un texte
Obliger l'utilisateur à lire un texte
Iniciado por yves.piot.83, 12,oct. 2004 13:45 - 15 respuestas
Publicado el 12,octubre 2004 - 13:45
Bonjour à toutes et à tous,

Je veux obliger l'utilisateur à "lire" un texte important
un peu à la façon de la licence Windev, où il faut aller
tout en bas du texte par l'ascenseur pour pouvoir continuer.

Je sais que cela existe, dans un exemple ?, un assistant ?
je n'arrive plus à retrouver.

Merci de votre aide
Yves
Publicado el 12,octubre 2004 - 17:10
Yves.83 avait prétendu :
Bonjour à toutes et à tous,

Je veux obliger l'utilisateur à "lire" un texte important
un peu à la façon de la licence Windev, où il faut aller
tout en bas du texte par l'ascenseur pour pouvoir continuer.

Je sais que cela existe, dans un exemple ?, un assistant ?
je n'arrive plus à retrouver.

Merci de votre aide
Yves


utilise le même principe alors.....

par exemple :

- crée une table dans laquelle le texte à lire sera affiché, donc pas
de trait de séparation entre les lignes, même couleur pour les lignes
impaires et paires
- crée un champ texte invisible contenant ton texte à faire lire

- dans l'init de la table, tu remplis celle-ci à partir du champ texte
caché
du style

NbCaractère est un entier = x // nb de caractère par ligne que tu veux
ligne est une chaine
pos est un entier = 1
tantque vrai
ligne = milieu(CHAMPTEXTE,pos,NBcaractère)
si ligne = "" alors sortir
tableajoute(MATABLE,ligne)
pos += NbCaractère
fin


- dans le traitement "affichage d'une ligne" de la table

si MATABLE = tableoccurence(MATABLE) alors
// on a affiché la derniere ligne
// donc ici on met le traitement rendant actif ce qu'on veut
fin


pas testé, mais ça doit être un truc du genre
Publicado el 12,octubre 2004 - 17:26
Merci Bertrand pour cette réponse très détaillée,

Je pense que c'est tout à fait adaptable, néanmoins
j'ai oublié de préciser que j'utilisais un champ RTF
pour bien attirer l'attention de l'utilisateur.
Cela reste possible mais ça complique ...

Sinon je pensais qu'il existait une fonction, une propriété
ou une façon de gérer l'ascenseur pour savoir si on
l'avait descendu entièrement.

Merci encore
Yves
Publicado el 12,octubre 2004 - 18:16
Bonjour cher Ami !

Voici la procédure à suivre pour resoudre ton problème.
1- Cré un document Word contenant le texte à lire et enregistre le en format RTF.
2- Dans ton projet, cré une fenêtre sur laquelle tu ajoute un champ texte de type RTF.
Nomme ce champ "SAIS_DESCRIPTION"
3- A l'initialisation de la fenêtre que tu viens de créer, insert le code ci-dessous

// chargement du fichier RTF de description
SI PAS RTFCharge(SAIS_DESCRIPTION,"LettreAlire.rtf") ALORS
Erreur("Impossible d'ouvrir le fichier de description.",ErreurInfo())
FIN

NB: Le document RTF doit être dans le repertoire par default du projet.
Publicado el 12,octubre 2004 - 18:55
Merci pour cette réponse
mais le champ contient le texte dans l'onglet 'Contenu'
le problème n'est pas là mais dans le sujet de mon premier post
à savoir comment être sûr que l'utilisateur ai tout lu.
Salutations
Yves


"GNADJE BI YOUAN ANDRE" <youanandre@yahoo.fr> a écrit dans le message de
news: 416bddd7@news.pcsoft.fr...



Bonjour cher Ami !

Voici la procédure à suivre pour resoudre ton problème.
1- Cré un document Word contenant le texte à lire et enregistre le en

format RTF.
> 2- Dans ton projet, cré une fenêtre sur laquelle tu ajoute un champ texte
de type RTF.
Nomme ce champ "SAIS_DESCRIPTION"
3- A l'initialisation de la fenêtre que tu viens de créer, insert le code

ci-dessous

// chargement du fichier RTF de description
SI PAS RTFCharge(SAIS_DESCRIPTION,"LettreAlire.rtf") ALORS
Erreur("Impossible d'ouvrir le fichier de description.",ErreurInfo())
FIN

NB: Le document RTF doit être dans le repertoire par default du projet.

Publicado el 12,octubre 2004 - 20:59
Yves.83 a écrit :
Bonjour à toutes et à tous,

Je veux obliger l'utilisateur à "lire" un texte important
un peu à la façon de la licence Windev, où il faut aller
tout en bas du texte par l'ascenseur pour pouvoir continuer.

Je sais que cela existe, dans un exemple ?, un assistant ?
je n'arrive plus à retrouver.

Merci de votre aide
Yves


De tete je n'en suis pas sure , mais il te faut verifier si
l'ascenseur a une variable qui detecte quand il est en bas du texte
a voir avec l'aide en ligne , si c'est le cas quand tu ouvre ta
fenetre tu met ton bouton fermer ou suivant en grise et tu test
si ton utilisateur fait fonctionner l'ascenceur , si c'est le cas
ton test positionne ton boutton fermer ou suivant a Actif est le
tour est joué.

Bon dev et a +
Publicado el 12,octubre 2004 - 22:13
Tjrs dans la logique du couriel que je t'ai fais parvenir. Tu initialise le bouton de fermeture de la fenêtre à "INACTIF" puis dans le code du champ d'affichage du texte, zone de code "ENTREE DE..." tu rends de nouveau ACTIF le bouton dès que l'utilisateur click dans ce champ pour poursuivre sa lecture.

Espérant t'avoir aidé !
Publicado el 13,octubre 2004 - 02:43
La notion de bouton grisé ou inactif rendu actif : pas de problème

Par contre un clic dans l'ascenseur ne déclanche pas le code d'entrée du
champ
mais cela m'a poussé à chercher dans les codes supplémentaires à ajouter
à un champ et derrière les 3 points 'plus de traitements' j'ai trouvé
"Ascenseur vertical"
Evènement WM_VSCROLL je me suis dis Sauvé !!

Pas tout à fait parce que je n'ai pas le moyen de savoir si on est arrivé
au bout du texte, simplement, je vais me dépanner pour l'instant en comptant
2 à 3 clic sur l'ascenseur, mais c'est quand même énervant de ne pas
pouvoir le gérer plus finement.

Merci encore pour vos contributions
Yves

"GBADJE BI YOUAN ANDRE" <youanandre@yahoo.fr> a écrit dans le message de
news: 416c1571$1@news.pcsoft.fr...


Tjrs dans la logique du couriel que je t'ai fais parvenir. Tu initialise

le bouton de fermeture de la fenêtre à "INACTIF" puis dans le code du champ
d'affichage du texte, zone de code "ENTREE DE..." tu rends de nouveau ACTIF
le bouton dès que l'utilisateur click dans ce champ pour poursuivre sa
lecture.

Espérant t'avoir aidé !
Publicado el 13,octubre 2004 - 10:53
Aide : Manipuler un ascenseur par programmetion:

Récupérer la position d'un ascenseur utilisez la syntaxe suivante :

<Position> = <Nom Ascenseur>

Dans l'ascenseur "A chaque modification" mettre le code suivant :

_lnPosition est un entier = <Nom Ascenseur> //Récupére la valeur

si _lnPosition = <Val Max Ascenseur> alors
Bouton..visible vrai
fin
Publicado el 13,octubre 2004 - 11:33
D'accord pour la manipulation d'un ascenseur, j'avais bien
exploré l'aide avant, mais un ascenseur de champ texte multiligne
n'est pas manipulable de cette manière ( à ma connaissance).

D'autre part si je place un ascenseur externe, comment faire
défiler le texte dans le champ à partir de cet ascenseur.
Sans que cela devienne une usine à gaz.

Merci pour la réponse
Yves


"E. Rossi" <er@belsoft.be> a écrit dans le message de news:
416cc7b8$1@news.pcsoft.fr...

Aide : Manipuler un ascenseur par programmetion:

Récupérer la position d'un ascenseur utilisez la syntaxe suivante :

<Position> = <Nom Ascenseur>

Dans l'ascenseur "A chaque modification" mettre le code suivant :

_lnPosition est un entier = <Nom Ascenseur> //Récupére la valeur

si _lnPosition = <Val Max Ascenseur> alors
Bouton..visible vrai
fin



Publicado el 13,octubre 2004 - 17:12
Bonjour,
Un exemple complet a été livré avec la LST N°40 page 23. L'exemple reprend
l'affichage d'une licence dans une fenêtre avec l'activation du bouton
Valider quand tout le texte a été lu.
La programmation est plus compliquée qu'il n'y paraît: dans l'exemple il est
fait appel aux API GetScrollingPos (position en cours) et GetScrollingRange
(position maximum)
AE


"Yves.83" <yves.piot.83@wanadoo.fr> a écrit dans le message de
news:416b9ef2$1@news.pcsoft.fr...

Bonjour à toutes et à tous,

Je veux obliger l'utilisateur à "lire" un texte important
un peu à la façon de la licence Windev, où il faut aller
tout en bas du texte par l'ascenseur pour pouvoir continuer.

Je sais que cela existe, dans un exemple ?, un assistant ?
je n'arrive plus à retrouver.

Merci de votre aide
Yves

Publicado el 13,octubre 2004 - 18:12
Merci Alain

Je savais bien que j'avais déjà lu quelque chose comme cela
mais je ne suis pas remonté aussi loin, 1er trim 2000
ça nous rajeunit pas tout ça, on venait juste d'échapper
au BUG de l'an 2000.

Je vais appliquer ça en espèrant qu'il n'y ait pas
d'incompatibilité avec WD8 et XP

Merci encore
Yves


"Alain E" <ae_NOSPAM_@crefia.com> a écrit dans le message de news:
416d2121$1@news.pcsoft.fr...

Bonjour,
Un exemple complet a été livré avec la LST N°40 page 23. L'exemple reprend
l'affichage d'une licence dans une fenêtre avec l'activation du bouton
Valider quand tout le texte a été lu.
La programmation est plus compliquée qu'il n'y paraît: dans l'exemple il

est
> fait appel aux API GetScrollingPos (position en cours) et
GetScrollingRange
(position maximum)
AE

Publicado el 13,octubre 2004 - 18:53
Décidemment j'ai pas de chance sur ce coup là !

J'ai le CD de la LST 40 sensé me sauver !!
et impossible d'ouvrir le projet exemple WDLicence
ni avec WD5.5 ni WD8
ça me répond que ce n'est pas une fenêtre Windev en 5.5 et
en 8 il n'ouvre rien.

Est-ce que ce serait du WD4 ? Non !!!!

Donc est-ce que quelqu'un pourrait me documenter sur les
fonctions suivantes :
AppelDLL32("user32", "GetScrollInfo" , hWnd, n, &lpScrollInfo)
AppelDLL32("user32", "GetScrollPos" , hwnd, nBar)
AppelDLL32("user32", "GetScrollRange" , hwnd, nBar, &lpMinPos, &lpMaxPos)

hwnd -> Handle de l'objet
mais le reste ?!?!?

Merci d'avance
yves


"Yves.83" <yves.piot.83@wanadoo.fr> a écrit dans le message de news:
416d2f23$1@news.pcsoft.fr...

Merci Alain

Je savais bien que j'avais déjà lu quelque chose comme cela
mais je ne suis pas remonté aussi loin, 1er trim 2000
ça nous rajeunit pas tout ça, on venait juste d'échapper
au BUG de l'an 2000.

Je vais appliquer ça en espèrant qu'il n'y ait pas
d'incompatibilité avec WD8 et XP

Merci encore
Yves


"Alain E" <ae_NOSPAM_@crefia.com> a écrit dans le message de news:
416d2121$1@news.pcsoft.fr...

Bonjour,
Un exemple complet a été livré avec la LST N°40 page 23. L'exemple

reprend
l'affichage d'une licence dans une fenêtre avec l'activation du bouton
Valider quand tout le texte a été lu.
La programmation est plus compliquée qu'il n'y paraît: dans l'exemple il
est

fait appel aux API GetScrollingPos (position en cours) et
GetScrollingRange

(position maximum)
AE



Publicado el 13,octubre 2004 - 21:50
Rebonjour,
Pour ton information j'ai ouvert le projet avec Windev 7.5 et j'ai accepté
la migration 5.5 vers 7.5
Tout s'est passé sans aucun problème. Il y a eu simplement 2 warnings
m'indiquant qu'il "risquait" y avoir des problèmes avec les dll version 16
bits mais tout s'est bien passé en lançant le test.
Arrès il a suffi de recompiler sous Windev 8.
Je suis sous Win XP Pro.
Essaie de faire comme moi. Si ça ne marche pas je pourrai éventuellement
t'envoyer le projet recompilé sous Windev 8 (pas sur le forum bien sûr)
Alain

"Yves.83" <yves.piot.83@wanadoo.fr> a écrit dans le message de
news:416d38bc@news.pcsoft.fr...

Décidemment j'ai pas de chance sur ce coup là !

J'ai le CD de la LST 40 sensé me sauver !!
et impossible d'ouvrir le projet exemple WDLicence
ni avec WD5.5 ni WD8
ça me répond que ce n'est pas une fenêtre Windev en 5.5 et
en 8 il n'ouvre rien.

Est-ce que ce serait du WD4 ? Non !!!!

Donc est-ce que quelqu'un pourrait me documenter sur les
fonctions suivantes :
AppelDLL32("user32", "GetScrollInfo" , hWnd, n, &lpScrollInfo)
AppelDLL32("user32", "GetScrollPos" , hwnd, nBar)
AppelDLL32("user32", "GetScrollRange" , hwnd, nBar, &lpMinPos, &lpMaxPos)

hwnd -> Handle de l'objet
mais le reste ?!?!?

Merci d'avance
yves


"Yves.83" <yves.piot.83@wanadoo.fr> a écrit dans le message de news:
416d2f23$1@news.pcsoft.fr...

Merci Alain

Je savais bien que j'avais déjà lu quelque chose comme cela
mais je ne suis pas remonté aussi loin, 1er trim 2000
ça nous rajeunit pas tout ça, on venait juste d'échapper
au BUG de l'an 2000.

Je vais appliquer ça en espèrant qu'il n'y ait pas
d'incompatibilité avec WD8 et XP

Merci encore
Yves


"Alain E" <ae_NOSPAM_@crefia.com> a écrit dans le message de news:
416d2121$1@news.pcsoft.fr...

Bonjour,
Un exemple complet a été livré avec la LST N°40 page 23. L'exemple
reprend

l'affichage d'une licence dans une fenêtre avec l'activation du bouton
Valider quand tout le texte a été lu.
La programmation est plus compliquée qu'il n'y paraît: dans l'exemple

il
est
fait appel aux API GetScrollingPos (position en cours) et
GetScrollingRange

(position maximum)
AE





Publicado el 14,octubre 2004 - 01:01
Je n'avais pas installer l'exemple de la LST40 mais simplement copié
ceci explique cela.
J'ai enfin mon code pour gérer l'ascenseur de manière précise,
il me reste maintenant à l'adapter à l'utilisation de la roulette souris
et aux flèches bas et PageDown

Merci encore Alain de m'avoir fait ouvrir les yeux
Yves


"Alain E" <ae_NOSPAM_@crefia.com> a écrit dans le message de news:
416d622e@news.pcsoft.fr...
Rebonjour,
Pour ton information j'ai ouvert le projet avec Windev 7.5 et j'ai accepté
la migration 5.5 vers 7.5
Tout s'est passé sans aucun problème. Il y a eu simplement 2 warnings
m'indiquant qu'il "risquait" y avoir des problèmes avec les dll version 16
bits mais tout s'est bien passé en lançant le test.
Arrès il a suffi de recompiler sous Windev 8.
Je suis sous Win XP Pro.
Essaie de faire comme moi. Si ça ne marche pas je pourrai éventuellement
t'envoyer le projet recompilé sous Windev 8 (pas sur le forum bien sûr)
Alain
Publicado el 14,octubre 2004 - 01:33
Pour ceux que cela intéresse voilà la solution mise en place

Créer la procedure locale CaptureAscenseur()

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><
PROCEDURE CaptureAscenseur()
nPos, pnMin, pnMax, SB_VERT32 sont des entiers
SB_VERT32 = 1

// récupère la position courante
nPos = AppelDLL32("USER32","GetScrollPos",_EVE.hwnd,SB_VERT32)
// récupère le nombre de ligne maximale
AppelDLL32("USER32","GetScrollRange",_EVE.hwnd,SB_VERT32,&pnMin,&pnMax)

// On décompte la taille de la première page
pnMax -= 325 // Taille à rechercher par tatonnement sur champ RTF
SI nPos >= pnMax ALORS Info("ca y est")
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Dans le code du texte à lire ajouter les traitements supplémentaires
suivants :
Roulette souris
Touche enfoncée
Ascenseur vertical
Dans chacun d'eux appeler la fonction CaptureAscenseur() et le tour est
joué
reste seulement à affiner la taille de la première page en plaçant une trace
sur nPos et pnMax