Probléme

Signaler
Messages postés
218
Date d'inscription
jeudi 13 juillet 2006
Statut
Membre
Dernière intervention
11 juillet 2010
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
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
        
End Sub

-Merci

8 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
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...
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
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 !
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
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
Messages postés
218
Date d'inscription
jeudi 13 juillet 2006
Statut
Membre
Dernière intervention
11 juillet 2010

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
        
End Sub
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
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 "

Il persiste et signe
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
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)
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
je me permets, vis-à-vis de Jacques et Jack (lol, 2 Jack-ques ) :
http://www.vbfrance.com/codes/TRACEUR-COURBE_42793.aspx

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~