Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS3
AS3 Questions relatives à la programmation ActionScript 3 (Cours AS3)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/03/2011, 16h58   #1
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 0
Points : 0
Par défaut Scroll TextField toujours en bas

Bonjour,

J'essai désespérément de garder la scrollBar d'un textField vers bas sur un petit chat.

Voila mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
function Vrecharge(e:Event) {
 
	var urLLoader:URLLoader = new URLLoader();
	var urLRequest:URLRequest=new URLRequest("recharge.php");
	var urLVariable:URLVariables = new URLVariables();
	urLVariable.dest = dest ;
	urLRequest.data = urLVariable ;
	urLRequest.method=URLRequestMethod.POST;
	urLLoader.load(urLRequest);
	urLLoader.addEventListener(Event.COMPLETE, charge);
 
	function charge(e:Event):void {
 
		if ((e.target as URLLoader).data == "1") {
			canal = conteneurSon.play();
			recharge();
		}
	}
}
 
// Gestion du scroll
function scrol() {
	lescroll.scrollTarget=discussion;
	discussion.scrollV = discussion.maxScrollV;
}
 
// XML rechargement
function recharge(e:Event=null) {
 
	var chargement:URLLoader = new URLLoader();
	var fichier:URLRequest=new URLRequest("convers/"+IDs+".xml?nocache=" + new Date().getTime());
	fichier.requestHeaders.push( new URLRequestHeader("pragma", "no-cache") );
	chargement.addEventListener(Event.COMPLETE, chargementComplet);
	chargement.load(fichier);
 
	function chargementComplet(e:Event):void {
		var messages:XML=new XML(e.target.data);
		var NbMessage:XMLList=messages.elements();
		discussion.text="";
		var Nb:int = NbMessage.length() ;
		var i:Number = 1 ;
		for each (var DiscussionM:XML in NbMessage) {
			discussion.htmlText+="<b>"+DiscussionM.@pseudo+" dit :</b>\n";
			discussion.appendText(DiscussionM +"\n\n");
		    discussionDate.text = "Date et heure du dernier message : "+DiscussionM.@date ;
			if(i == Nb){ scrol(); i = 1 ; } else { i++ ; }
		}
	}
}
 
function envoi() {
	if (mess.text!="") {
		if (discussion.text!="") {
			discussion.htmlText+="<b>"+pseudo+" dit :</b>\n";
			discussion.appendText(mess.text+"\n\n");
			var urlLoader:URLLoader = new URLLoader();
			var urlRequest:URLRequest=new URLRequest("conver.php5");
			var urlVariables:URLVariables = new URLVariables();
			urlVariables.fichier = IDs ;
			urlVariables.pseudo = pseudo ;
			urlVariables.dest = dest ;
			urlVariables.messages = mess.text ;
			urlRequest.data = urlVariables ;
			urlRequest.method=URLRequestMethod.POST;
			urlLoader.load(urlRequest);
		} else {
			discussion.text=mess.text;
		}
		mess.text="";
	}
	scrol();
}
 
function envoiE(evt:KeyboardEvent):void {
	if (evt.keyCode==Keyboard.ENTER) {
		envoi();
	}
}
function envoiC(e:Event):void {
	envoi();
}
 
recharge();
 
bt_envoi.addEventListener(MouseEvent.CLICK, envoiC);
mess.addEventListener(KeyboardEvent.KEY_DOWN, envoiE);
Sa fonctionne très bien avec la fonction envoi(); mais par contre rien avec recharge(); ...

Quelqu'un aurait une idée d'ou vient l'erreur ?
titan66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 17h28   #2
Membre régulier
 
Avatar de SnowStyle
 
Homme
Développeur Web
Inscription : octobre 2005
Messages : 68
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2005
Messages : 68
Points : 73
Points : 73
Salut, vu comme ça je ne vois pas non plus désolé

apparemment c'est scrol() qui fait baisser ta barre et si recharge() ne le fait pas c'est tout simplement qu'il ne call pas scrol().
alors tu peux essayer de trouver pourquoi scrol() n'est pas call, sinon essaye de rajouter un scrol() à la fin de recharge() pour être sur qu'il baisse la scrollbar à chaque fois.
SnowStyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 17h43   #3
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 0
Points : 0
Merci pour ta réponse.

Je viens d'essayer avec scrol(); à la fin de la function recharge malheureusement rien sa reste en haut.

La fonction scrol() et pourtant bien lancé je viens de faire un trace pour vérifier.

Je ne comprend pas du tout la
titan66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 17h48   #4
Membre régulier
 
Avatar de SnowStyle
 
Homme
Développeur Web
Inscription : octobre 2005
Messages : 68
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2005
Messages : 68
Points : 73
Points : 73
Hmm, essaye aussi de la mettre à la fin de chargementComplet dans recharge pour vérifier

cette partie me trouble personnellement je cerne pas l'utilité :
Code :
if(i == Nb){ scrol(); i = 1 ; } else { i++ ; }
quel est l'objectif ?
SnowStyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 17h53   #5
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 0
Points : 0
toujours le même résultat
titan66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 20h23   #6
Membre régulier
 
Avatar de SnowStyle
 
Homme
Développeur Web
Inscription : octobre 2005
Messages : 68
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2005
Messages : 68
Points : 73
Points : 73
Ah dommage, ça aurait été plus simple comme ça lol

Je ne sais pas trop alors désolé..

J'aurai peut être une idée farfelue, ça viendrait peut être alors de la fonction scrol, même si ça fonctionne avec envoi(), on peux imaginer que pour recharge() le maxScrollV est égal à rien.
essaye de faire un trace sur le discussion.maxScrollV pour voir si il est vide à la première utilisation.
Si c'est le cas, peut être que set lescroll.scrollTarget=discussion en dehors de la fonction scrol() et avant le recharge() pourrait résoudre le souci.
Toute façon je pense pas que tu es besoin de re-set le scrollTarget à chaque fois.
SnowStyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 21h03   #7
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 0
Points : 0
Pareil sa me retourne 70 mais la scrollBar est en haut --'

J'ai essayé une technique un peu plus barbare qui est de mettre un timer qui lance en continu la fonction scrol() et la sa marche ( sa me rassure lol )

Tu trouve barbare aussi ? Ou sa se fait souvent de mettre des timer a 0 ms sans limite ?

EDIT : Je suis idiot, la scroll est en bas mais les utilisateurs ne peuvent plus la remonter a moins de rester cliqué dessus ... Pas génial
titan66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 21h27   #8
Membre régulier
 
Avatar de SnowStyle
 
Homme
Développeur Web
Inscription : octobre 2005
Messages : 68
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2005
Messages : 68
Points : 73
Points : 73
Y'a surement un truc plus simple mais bon, si le timer passe, autant s'en servir en attendant peut être de trouver le vrai problème.
Au lieu de le repeter en boucle, tu peux peut être le lancer une seule fois décalé par rapport à la fonction recharge()
Peut être même plusieurs fois mais pas à l'infini, mais bon ouai ça fait un peu barbare quand même c'est sûr mais parfois quand on arrive pas a faire une incision au scalpel faut savoir trancher à la hache, sinon on pête un câble
SnowStyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 21h33   #9
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 0
Points : 0
lol voila on se comprend bien. Le temps de trouver mieux sa fera l'affaire

Donc voila le nouveau code, j'ai juste ajouté le timer et un écouteur de manière que l'on puisse quand même scroller vers le haut
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// timer rechargement
var timerR:Timer=new Timer(3000);
timerR.addEventListener(TimerEvent.TIMER, Vrecharge);
 
var timer:Timer=new Timer(0);
timer.addEventListener(TimerEvent.TIMER, scrol);
 
timerR.start();
timer.start();
 
function Vrecharge(e:Event) {
 
	var urLLoader:URLLoader = new URLLoader();
	var urLRequest:URLRequest=new URLRequest("recharge.php");
	var urLVariable:URLVariables = new URLVariables();
	urLVariable.dest = dest ;
	urLRequest.data = urLVariable ;
	urLRequest.method=URLRequestMethod.POST;
	urLLoader.load(urLRequest);
	urLLoader.addEventListener(Event.COMPLETE, charge);
 
	function charge(e:Event):void {
 
		if ((e.target as URLLoader).data == "1") {
			canal = conteneurSon.play();
			recharge();
		}
	}
}
 
// Gestion du scroll
function scrol(e:Event=null) {
	lescroll.scrollTarget=discussion;
	discussion.scrollV = discussion.maxScrollV;
}
 
// XML rechargement
function recharge(e:Event=null) {
 
	var chargement:URLLoader = new URLLoader();
	var fichier:URLRequest=new URLRequest("convers/"+IDs+".xml?nocache=" + new Date().getTime());
	fichier.requestHeaders.push( new URLRequestHeader("pragma", "no-cache") );
	chargement.addEventListener(Event.COMPLETE, chargementComplet);
	chargement.load(fichier);
 
	function chargementComplet(e:Event):void {
		timer.start();
		var messages:XML=new XML(e.target.data);
		var NbMessage:XMLList=messages.elements();
		discussion.text="";
		var Nb:int = NbMessage.length() ;
		var i:Number = 1 ;
 
		for each (var DiscussionM:XML in NbMessage) {
			discussion.htmlText+="<b>"+DiscussionM.@pseudo+" dit :</b>\n";
			discussion.appendText(DiscussionM +"\n\n");
		    discussionDate.text = "Date et heure du dernier message : "+DiscussionM.@date ;
		}
	}
}
 
function envoi() {
	if (mess.text!="") {
		if (discussion.text!="") {
			discussion.htmlText+="<b>"+pseudo+" dit :</b>\n";
			discussion.appendText(mess.text+"\n\n");
			var urlLoader:URLLoader = new URLLoader();
			var urlRequest:URLRequest=new URLRequest("conver.php5");
			var urlVariables:URLVariables = new URLVariables();
			urlVariables.fichier = IDs ;
			urlVariables.pseudo = pseudo ;
			urlVariables.dest = dest ;
			urlVariables.messages = mess.text ;
			urlRequest.data = urlVariables ;
			urlRequest.method=URLRequestMethod.POST;
			urlLoader.load(urlRequest);
		} else {
			discussion.text=mess.text;
		}
		mess.text="";
	}
	timer.start();
}
 
function envoiE(evt:KeyboardEvent):void {
	if (evt.keyCode==Keyboard.ENTER) {
		envoi();
	}
}
function envoiC(e:Event):void {
	envoi();
}
 
// XML
recharge();
 
function stopScroll(e:Event){
	timer.stop();
}
 
bt_envoi.addEventListener(MouseEvent.CLICK, envoiC);
mess.addEventListener(KeyboardEvent.KEY_DOWN, envoiE);
lescroll.addEventListener(MouseEvent.MOUSE_DOWN, stopScroll);
Merci pour tes réponses !
titan66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 13h16   #10
Membre régulier
 
Avatar de SnowStyle
 
Homme
Développeur Web
Inscription : octobre 2005
Messages : 68
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2005
Messages : 68
Points : 73
Points : 73
Lol, t'es un vrai bourreau
Bien joué, tant que ça fonctionne, ça calme les nerfs
tu peux aussi utiliser l'event EnterFrame pour refresh le scroll à chaque nouvel image par seconde, au cas ou le Timer te pose un souci un de ces 4, puis c'est probablement moins brutal qu'un timer 0ms.

Navré de n'avoir pu cerner le problème en tout cas, bon courage pour la suite
SnowStyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h32.


 
 
 
 
Partenaires

Hébergement Web