Print dans une picturebox

astvt Messages postés 45 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 2 août 2018 - 7 févr. 2007 à 16:26
astvt Messages postés 45 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 2 août 2018 - 9 févr. 2007 à 19:51
Bonjour, j'ai besoin dans mon programme de simulation de microprocesseur, d'afficher du texte dans une feuille qui contient une zone picturebox.
Avec la fonction picturebox.print je peux afficher mon texte en plusieur fois.
Chaque ligne imprimée dans ma picturebox s'affiche les unes en dessous des autres.
Au bout de quelques lignes, ma zone est pleine et je ne vois plus les nouvelles lignes de texte.
Ce que je voudrais faire c'est que chaque nouvelle ligne s'affiche en haut de la zone et que les lignes
déjà affichées se décalent d'un rang vers le bas. Là je coince.
J'ai bien essayé de définir les coordonnées X et Y à 0 mais toutes les lignes s'affiches les unes sur les autres. J'ai cherché un control qui puisse faire ce que je souhaite mais je n'en ai pas trouvé.
Si quelqu'un peut m'aider, j'aimerai aussi faire la même chose mais cette fois en Visual Studio 2005.
Merci pour votre aide.

7 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
7 févr. 2007 à 17:00
Tu ne peux y parvenir qu'en faisant "dérouler" (par la méthode Move) de la hauteur d'une ligne ta pictureBox à l'intérieur d'un container (pictureBox ou Frame), chaque fois que ton CurrentX a atteint une limite.
Rien ne devrait d'ailleurs tempêcher d'obtenir ce déroulement en te servant de ta Form elle-même comme container.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
7 févr. 2007 à 18:02
Tiens !
Je t'ai bâclé quelquechose en vitesse.

Il te faudra remplacer les "200" par la valeur nécessaire, en fonction de ta Police, bien évidemment.

Une Form avec une pictureBox Picture1 et un bouton de commande Command1

Code :

Private Sub Command1_Click()
 Static nb As Integer
 nb = nb + 1
 If Picture1.CurrentY >= Picture1.ScaleHeight - 200 Then
    Picture1.Height = Picture1.Height + 200
    Picture1.Top = Picture1.Top - 200
  End If
  Picture1.Print "toto " & nb
End Sub


Private Sub Form_Activate()
  Picture1.AutoRedraw = True
  Me.Move 0, 0, 4000, 2000
  Picture1.Move 0, 0, 1500, 1500
  Command1.Move 1800, 200, 1000, 400
End Sub

Lance, clique plusieurs fois sur Command1, observe... et inspire-t'en
0
astvt Messages postés 45 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 2 août 2018
8 févr. 2007 à 15:48
Bonjour,
j'ai utilisé votre petit morceau de code. Cela fonctionne bien avec une picturebox.
Si je reporte ce même code sur une form alors la forme s'agrandie à l'infinie. Ce n'est pas ce que je désir faire.

Je suis donc revenu avec une form + un picturebox (la picturebox aussi augmente à l'infinie).

Dans la configuration de ma sourie, j'ai définis la fonction d'activation de la fenêtre lorsque le curseur passe sur la barre de fenêtre.

Lorsque celle-ci passe sur ma form avec la picturebox, la form prend le focus et est réécrite. Tout ce qui était affiché est éffacé et les nouvelles lignes n'apparaissent pas.
Ma question est : comment empèche que la fenêtre prenne le focus et soit réécrite? Evidemment si je déactive la fonction de ma sourie le problème ne se pose plus sauf si je clique sur la fenêtre. 

Merci pour votre aide.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
8 févr. 2007 à 16:00
Je n'ai rien compris au mécanisme décrit.

Peu importe, toutefois :
Si la propriété auroredraw de la picturebox est bien féninie = True, ce qui y est écrit ne peut s'effacee que si on le demande expressément (par Picture1.cls, ou par LoadPicture(), ...)
Explique avec précision !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
astvt Messages postés 45 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 2 août 2018
9 févr. 2007 à 11:12
Bonjour,
J'ai résolue mon problème d'effacement et de redimentionnement de la fenêtre.


J'ai supprimé ce code:
Private Sub Form_Activate()
  Picture1.AutoRedraw = True
  Me.Move 0, 0, 4000, 2000
  Picture1.Move 0, 0, 1500, 1500
  Command1.Move 1800, 200, 1000, 400
End Sub
Lorsque ma sourie passe sur la fenêtre, la fenêtre prend le focus mais elle n'est plus modifié.
Parcontre je viens de trouver un nouveau problème, au bout d'un certain nombre de lignes, le bas de la picturebox et de la fenêtre remonte vers le haut et fini par disparaître. La taille de la picturebox à ce moment atteind environ 250000 picture1.Height = environ 250000.


Est-il possible de limiter la taille sans perdre le fonctionnement de décalage vers le haut des lignes inscrites?


Merci de votre aide.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 févr. 2007 à 11:23
Je ne comprends toujours rien à ce que tu cherches à dire sans y parvenir totalement...
je ne compreends en particulier pas à quoi correspond ce mécanisme :
"Lorsque ma sourie passe sur la fenêtre, la fenêtre prend le focus mais elle n'est plus modifié"

Pour le reste, limitation de la taille : Mais... rien ne t'empêche d'ajouter une condition !
genre :
If Picture1.height >= ......... then exit sub

Mais il est alors clair que tu ne pourras rien rajouter au delà de cette limite ! Il est en général utopique de vouloir le tout et son contraire !
Que cherches-tu donc à faire, en fait ? Une textbox "maison" ?
0
astvt Messages postés 45 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 2 août 2018
9 févr. 2007 à 19:51
Ce que je cherche à faire c'est d'imprimer un texte avec la fonction print qui me permet d'imprimer une ligne en plusieurs fois. Exemple :


picture1.print spc(1); toto;


picture1.print titi, tutu


sur la ligne suivante picture1.print ...... etc.


mon problème est que si ma zone picturebox permet d'afficher 15 lignes par exemple, la 16ème lignes n'est pas visible.


Avec le petit bout de code que tu ma fourni, le problème est réglé, toutes les lignes se décalent vers le haut et la picturebox s'allonge au fure et à mesure de l'insertion de nouvelles lignes.
Ce que je voudrais faire, c'est que les lignes montent ou descendent et quelles soient perdue si elles dépassent la zone de la picturebox. en fait ne visualiser que la ligne que l'on vient d'imprimer et les 14 dernières par exemple.
Je ne sais pas si cela est possible avec une picturebox ou avec une textbox.
Je pense que cela doit être possible ou qu'il existe un composant ocx qui le permet. Je n'en ai pas trouvé.
Merci encore pour ton aide.


 
0
Rejoignez-nous