vbnino
Messages postés218Date d'inscriptionjeudi 13 juillet 2006StatutMembreDernière intervention11 juillet 2010
-
21 mai 2007 à 18:46
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 2011
-
22 mai 2007 à 19:24
Salut!
-J'ai un probléme avec ce code, comment puis-je faire pour qu'il dessin tous les points rapidement
Private Sub Command1_Click()
If Text3 > 10 Then
p.Line (p.ScaleLeft, 0)-(p.ScaleWidth, 0), RGB(0, 0, 255)
p.Line (0, p.ScaleTop)-(0, p.ScaleHeight), RGB(0, 0, 255)
Text3 = -10
p.Cls
End If
p.Line (p.ScaleLeft, 0)-(p.ScaleWidth, 0), RGB(0, 0, 255)
p.Line (0, p.ScaleTop)-(0, p.ScaleHeight), RGB(0, 0, 255)
For i = 0 To 200
Text4 = Text1
Text3 = Text3 + 0 + 0.1 ' Quand (0.1) rapide mais manque de point. Quand (0.01) tous les points mais long
DoEvents
Call go
Next i
End Sub
Public Sub go()
On Error Resume Next
Text4 = Replace(Text4, "x", Text3)
Text4 = Replace(Text4, ",", ".")
DoEvents
Dim MyScript As New ScriptControl
Dim StrFonction As String
Dim Resultat
StrFonction = "Function Calcul(Fin): Fin=" & Text4.Text & ":End Function"
With MyScript
'Langage du script
.Language = "VBScript"
'Reset Eventuel
Call .Reset
Call .AddCode(StrFonction)
Call .Run("Calcul", Resultat)
End With
p.PaintPicture p2.Picture, Text3, -Resultat * 2, 0.11, 0.11
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 21 mai 2007 à 18:54
Bonjour,
Je n'aime pas trop (pas du tout, en fait) , déjà :
For i = 0 To 200
Text4 = Text1
Text3 = Text3 + 0 + 0.1 'Quand (0.1) rapide mais manque de point. Quand (0.01) tous les points mais long DoEvents
Call go
Next i
La liste de mes récriminations est longue :
qu'est cette boucle sur i qui n'utilise pas i, déjà ????
que sont ces Textx ? (qui sont des noms de contrôles et non leur contenu (même si VB comprend, mais, dans ce cas comme string !!!))
Quel est l'intérêt d'additionner 0 à quoi que ce soit ?
Reviens avec du propre, s'il te plait...
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 21 mai 2007 à 19:00
Salut
Difficile de te répondre puisqu'il faut qu'on crée une forme avec des boutons, des TextBox ... pas assez de détails.
Je dirais que :
- Entre 0.1 et 0.01, il y a une infinité de valeur intermédiaire.
Si tu trouves que 0.1 n'est pas assez ceci et que 0.01 est trop celà, choisis une valeur intermédiaire, 0.05 par exemple.
- Essaye de respecter un minimum la syntaxe de VB : On n'additionne pas du texte avec des chiffres.
Le résultat peut être catastrophique : Dans ton exemple, je n'ai pas compris si Text3 affichera le texte "0" suivi de "0.1" ou si tu veux que cela donne la somme mathématique de ces chiffres.
Si c'est une concaténation de chaine de caractères, il faut utiliser un & et pas un + (d'où le risque d'erreur de VB)
Exemple : Text3.Text = Text3.Text & "0" & "0.1"
Si c'est du calcul, il faut convertir Text3 en chiffre, faire ton calcul, puis remettre ton résultat dans Text3.
Exemple : Text3.Text = CStr(Val(Text3.Text) + 0 + 0.1)
PS : la prochaine fois, essaye de mettre un titre plus parlant à ta question (genre "problème de vitesse graphique") : Ca pourra aider ceux qui feraient des recherches sur le même sujet. Merci pour eux.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 21 mai 2007 à 19:02
lol, tu as raison JMFM, je n'avais pas fait gaffe que la boucle ne servait à rien !
Il suffit donc de supprimer le FOR et le NEXT et ça ira beaucoup plus vite, résultat garanti !
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 21 mai 2007 à 19:21
Bonsoir, Jack
Ce n'est pas tellement qu'elle ne sert à rien (il finit par appeler 201 fois Go)
On peut simplement se demander le pourquoi de toute cette acrobatie : je pars de là pour aller là ( à Go) d'où je vais encore partir pour passer par un autre tremplin , etc... 201 fois !
Je crois qu'il ferait mieux de nous exposer ce qu'il veut faire avec tout ce bastringue afin que l'on puisse le guider vers du plus orthodoxe
Vous n’avez pas trouvé la réponse que vous recherchez ?
vbnino
Messages postés218Date d'inscriptionjeudi 13 juillet 2006StatutMembreDernière intervention11 juillet 2010 22 mai 2007 à 13:27
salut!
voici le code plus proprement, sais vous ne comprenez pas ,je peux poser la source?
Private Sub tracer_Click()
If Text3.Text > 10 Then 'text3= (-10) picture1.Line (p.ScaleLeft, 0)-(p.ScaleWidth, 0), RGB(0, 0, 255)
picture1.Line (0, p.ScaleTop)-(0, p.ScaleHeight), RGB(0, 0, 255)
Text3.Text = -10
picture1.Cls
End If
picture1.Line (p.ScaleLeft, 0)-(p.ScaleWidth, 0), RGB(0, 0, 255)
picture1.Line (0, p.ScaleTop)-(0, p.ScaleHeight), RGB(0, 0, 255)
For i = 0 To 2005
Text4.Text = Text1 'text4=text1 pour que (go) remplace x par text 3
Text3.Text = Text3.Text + 0 + 0.01 'text3 change de valeur jusqu'a 10 DoEvents
Call go
Next i
Public Sub go()
On Error Resume Next
Text4 = Replace(Text4, "x", Text3) ' remplace x dans text4 par la valeur de text3
Text4 = Replace(Text4, ",", ".") 'remplace "," par le "." ,je sais pas comment faire avec un code d'où j'ai crée une textbox DoEvents
Dim MyScript As New ScriptControl
Dim StrFonction As String
Dim Resultat
StrFonction = "Function Calcul(Fin): Fin=" & Text4.Text & ":End Function"
With MyScript
'Langage du script
.Language = "VBScript"
'Reset Eventuel
Call .Reset
Call .AddCode(StrFonction)
Call .Run("Calcul", Resultat)
End With
picture1.PaintPicture p2.Picture, Text3, -Resultat * 2, 0.11, 0.11 'text3 est x , resultat et le resultat du calcule
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 22 mai 2007 à 13:31
Salut,
Un vieux cinglé de mes connaissances a écrit :
"Je crois qu'il ferait mieux de nous exposer ce qu'il veut faire avec tout ce bastringue afin que l'on puisse le guider vers du plus orthodoxe "
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 22 mai 2007 à 13:42
Et un autre cinglé (salut Jack et amitiés...) a appelé son attention sur un fait indubitable :
un point n'a pas de dimensions
je cite l'allusion à ce fait on ne peut plus clair :
"- Entre 0.1 et 0.01, il y a une infinité de valeur intermédiaire."
Si tu tiens à ta méthode (qui nous échappe ) et que ton seul problème (jugeant ta méthode excellente) est celui du dessin de points juxtaposés : il est très clair que du peux les juxtaposer de sorte à ce que le point suivant soit très éloigné du point précédent (et tout ira alors très vite) ou, au contraire, que le point suivant se trouve à une distance infiniment petite du point précédent (et là,... ma foi... il y aura une infinité de points à traiter...).
Voilà ! aucune "baguette magique" ne viendra changer cet aspect là (plus de points à dessiner = plus de temps à les dessiner).
Restent les autres aspects, où des améliorations sont vraisembleblement possibles (encore faudrait-il savoir avec précision ce que tu "fabriques" avec cette usine à gaz)