Imprimer un tableau MSFlexgrid1

Résolu/Fermé
Louwest59 Messages postés 13 Date d'inscription dimanche 30 mars 2014 Statut Membre Dernière intervention 26 mai 2016 - 26 mai 2016 à 10:58
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 28 mai 2016 à 17:08
Bonjour,

Je viens vers vous sujet d'un problème que je rencontre en ce moment.
Voici le sujet:

J'ai un form2
un tableau MSflexgrid1
un bouton imprimer

j'aimerai imprimer mon tableau mais qui contient 4 chaînes caractères et je bloque dessus...

Si vous avez le code ou de l'aide à m'apporter je vous en serais reconnaisant.

J'aimerai que le font soit en comic sans ms et en gras.

Je vous remercie d'avance de votre aide.

Cordialement

Lou

15 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 26/05/2016 à 12:31
Bonjour,
- tu développes finalement sous quoi ? Tu as ouvert cette discussion dans le forum général Visual Basic !)
- quel code, que tu ne montres pas, as-tu pour l'instant tenté ?
(tu te contentes ici de dire ce que tu voudrais ...) !
- on attend toujours la suite donnée à cette discussion :
http://codes-sources.commentcamarche.net/forum/affich-10053753-tri-par-ordre-alphabetique-dans-une-combobox

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Louwest59 Messages postés 13 Date d'inscription dimanche 30 mars 2014 Statut Membre Dernière intervention 26 mai 2016
Modifié par NHenry le 26/05/2016 à 13:35
Bonjour UCFoutu, désolé pour le précédent message. J'ai résolu le tri par ordre alpha, je viens de classer le sujet, dsl de ne pas l'avoir fait avant.

Pour information je code sous Visual Basic studio 6.0...

Le code que j'applique pour imprimer le MSflexgrid ne fonctionne visiblement pas, voici ce que j'écris:

For i = 0 To MSFlexGrid1.Cols - 1 
    If i = 0 Then
        Printer.FontBold = True 
    Else
        Printer.FontBold = False 
    End If
    For j = 1 To MSFlexGrid1.Rows - 1 
        gauche = 500 + ((j - 1) * (Printer.Width / (MSFlexGrid1.Cols - 1))) 
        haut = 3000 + (i * 200) 
        Printer.CurrentX = gauche
        Printer.CurrentY = haut
        Printer.Print MSFlexGrid1.TextMatrix(i, j) 
        Printer.Line ((gauche - 50), 3000)-((gauche - 50), (haut + 200)), RGB(29, 66, 132)
    Next j
    Printer.Line ((Printer.Width - 450), 3000)-((Printer.Width - 450), (haut + 200)), RGB(29, 66, 132)
    Printer.Line (450, (haut - 10))-((Printer.Width - 450), (haut - 10)), RGB(29, 132, 66)
    If i = 30 Then
        Printer.NewPage
    End If
Next i
Printer.Line (450, (haut + 200))-((Printer.Width - 450), (haut + 200)), RGB(29, 132, 66) 
Printer.EndDoc
End sub


Il doit probablement avoir un autre moyen plus optimisé d'imprimer ce control...

Merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 26/05/2016 à 16:57
Bonjour,
L'objet Printer se manipule exactement de la même manière qu'un objet PictureBox (je te conseille d'ailleurs à ce propos de t'exercer d'abord sur une picturebox pour éviter un gaspillage de papier et d'encre, puis d'utiliser l'objet Printer à la place de la picturebox lorsque tu auras maîtrisé).
Que sont ces multiplications dans ton code ?
- Ton objet printer (comme une picturebox) doit être d'abord défini (taille du papier, scalemode, Police, etc ...)
- tous les positionnements et toutes les dimensions doivent être calculées en unités de cette échelle (le scalemode).
- les méthodes Scalex et Scaley permettent de transposer au besoin d'une échelle (celle de ton form) à l'autre (celle de ton objet Printer)
- tu connais (en unités logiques de ton Form) les largeurs de colonnes (ne les détermine qu'une seule fois, puisque toujours les mêmes)
- il te faut par contre déterminer la hauteur de tes lignes. Cela dépend tant du scalemode que de la police de caractères utilisée. Sers-toi à cette fin de la méthode TextHeight
A partir de là, tout n'est qu'application de calculs arithmétiques

Ouvre ton aide VB6 sur chacun des mots que j'ai mis en gras.

NB : tu ne dis pas comment est alimentée cette grille. Si résultat d'une requête sur une table de données, tu aurais également la possibilité d'utiliser le jeu d'enregistrements résultant de cette requête avec Crystal Report.


EDIT : il te serait par ailleurs plus facile de concaténer le contenu des cellules de chaque ligne, puis d'imprimer de ligne en ligne ces contenus.
Regarde ce que fait par exemple ceci :
MsgBox Format("aaa", "@@@@@@@@@@@@@") & Format("b", "@@@@@@@@@@@@@@@@@@")

ou ceci :
MsgBox "aaa" & String(10 - Len("aaa"), " ") & "bbbbbb" & String(15 - Len("bbbbbb"), " ")

(si cela peut te donner des idées ...)
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Louwest59 Messages postés 13 Date d'inscription dimanche 30 mars 2014 Statut Membre Dernière intervention 26 mai 2016
Modifié par Louwest59 le 26/05/2016 à 17:17
Je te remercie UCFoutu. Alors pour t'en dire +, mon tableau est alimenté via des informations sorties d'un textbox suite à un calcul général servant à avoir des intérêts à payer sur X durée, le coût d'un assurance global et le capital restant dû d'un crédit.

Par contre UCFOUTU, mon aide vb6 je l'ai en *.rar sur mon bureau mais je ne sais pas dans quel dossier mettre MSDN... Pourrais tu m'indiquer s'il te plaît dans quel répertoire précisément je dois le déposer?

Merci d'avance.
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 mai 2016 à 17:19
Je t'ai alors déjà répondu (ma première partie).
Je vais t'aider un peu plus :
Regarde ce que fait ceci (par exemple) avec une picturebox Picture1 et un bouton de commande:
Private Sub Command1_Click()
Font = "Tahoma"
FontSize = 12
With Picture1
.Font = "Tahoma"
.FontSize = 12
.ScaleMode = 6 ' échelle en millimètres
.ScaleWidth = 30
hautligne = ScaleY(.TextHeight("N'importe quoi"))
.CurrentY = 2
For i = 1 To 10
Picture1.Print Format("aaa", "@@@@@@@@@@@@@") & Format("b", "@@@@@@@@@@@@@@@@@@")
.CurrentY = .CurrentY + hautligne
Next
End With
End Sub

Tu devrais commencer à comprendre mieux.
0
Louwest59 Messages postés 13 Date d'inscription dimanche 30 mars 2014 Statut Membre Dernière intervention 26 mai 2016
26 mai 2016 à 17:27
J'ai très bien compris ton code UCfoutu et je t'en remercie. Cependant je comprends pas trop bien le pictureBox... Comment faire de mon tableau un picture Box?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 mai 2016 à 17:52
Ben ...
Dans la boucle for to next : tu remplaces les "aaa" & "b" (etc ... au besoin) par le contenu des cellules d'une même ligne de ta grille !
Et lorsque tu auras maîtrisé (facile), tu remplace la picturebox par l'objet Printer.
Je ne vois pas où est le problème, là-dedans ...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 mai 2016 à 18:09
Enfin quoi :
Simulation avec une flexgrid à 2 colonnes, un bouton de commande et une picturebox :
Private Sub Command1_Click()
Font = "Tahoma"
FontSize = 14
With Picture1
.Font = "Tahoma"
.FontSize = 14
.ScaleMode = 6 ' échelle en millimètres
.ScaleWidth = 30
hautligne = ScaleY(.TextHeight("N'importe quoi"))
.CurrentY = 2
For i = 0 To MSFlexGrid1.Rows - 1
Picture1.Print Format(MSFlexGrid1.TextMatrix(i, 0), "@@@@@@@@@@@@@@@@") & Format(MSFlexGrid1.TextMatrix(i, 1), "@@@@@@@@@@@@@@@@@@")
.CurrentY = .CurrentY + hautligne
Next
End With
End Sub

Private Sub Form_Activate()
MSFlexGrid1.Height = 735
MSFlexGrid1.TextMatrix(0, 0) = "coucou"
MSFlexGrid1.TextMatrix(0, 1) = "couic"
MSFlexGrid1.TextMatrix(1, 0) = "voilà"
MSFlexGrid1.TextMatrix(1, 1) = "hé bé"
MSFlexGrid1.TextMatrix(2, 0) = "et hop"
MSFlexGrid1.TextMatrix(2, 1) = "titi"
MSFlexGrid1.TextMatrix(3, 0) = "bonjour"
MSFlexGrid1.TextMatrix(3, 1) = "toto"
MSFlexGrid1.TextMatrix(4, 0) = "au revoir"
MSFlexGrid1.TextMatrix(4, 1) = "tata"
End Sub

Que te faut-il de plus, sinon de décider, pour chaque colonne le nombre de "@@@@@@..." du format, en fonction de ce que tu as.
0
Ahhhh :) Voicla un superbe exemple UCfoutu!! C'est tellement plus clair. Je te remercie bcp pour ton intervention. Je vais désormais gérer au mieux ce que j'aimerai faire. Encore Merci!
0
sinon UCfoutu, as tu la moindre idée d'où je peux mettre mon dossier MSDN? Dans quel répertoire de VB dois-je l'inclure?
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
26 mai 2016 à 20:12
Bonjour
tu dis : "mon aide vb6 je l'ai en *.rar sur mon bureau
Si c'est l'aide MSDN officielle de VB 6 tu dois décompresser ce fichier .rar et exécuter le Setup inclus dans le dossier de décompression
Ceci t'installera automatiquement l'aide VB 6 et celle-ci sera accessible directement dans ton IDE
un salut à Ucfoutu
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 mai 2016 à 20:27
Bonjour, VB95,
On répond à qui, en fait ?
1) le demandeur (et donc Louwest59), membre inscrit depuis deux ans ?
ou
2) un certain "ben hate" inconnu au bataillon ?

Et les deux (aussi bien l'un que l'autre) semblent être en possession d'une appli VB6.exe "tombée du camion" ou non installée complètement.

Pas très sérieux, tout cela.

0
Euh, tu as un sacré culot quand même... Ma version de VB6 est pas installé entièrement et louwest59 était un programmeur que je connaissais qui est plus sur ce site. Quoi qu'il en soit, je trouve tes propos largement déplacés. Merci ton aide et bonne soirée.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 mai 2016 à 20:42
louwest59 était un programmeur que je connaissais qui est plus sur ce site

Et comment a-t-il alors ouvert cette discussion (sans être sur ce site) ????
Tu lui aurais chipé sen pseudo et son mot de passe, alors ?
Il est par ailleurs techniquement impossible à un autre que lui de cliquer (ce qui a été fait) sur le tag RESOLU !!!
Tu prétends te moquer de qui, ici ?
Explique-toi vite et clairement !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 26/05/2016 à 21:52
Un échange de messages privés avec Louwest59, qui me dit qu'il est bien également "Ben Hate" (et se contredit donc), me conduit à fermer la présente discussion.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 mai 2016 à 17:08
Discussion ouverte à nouveau un instant, juste pour signaler que j'ai déposé un snippet assez complet et détaillé, ici :
http://codes-sources.commentcamarche.net/source/101499-impression-d-une-msflexgrid-vb6
On verra bien, à sa lecture, qu'il est impensable de coder la chose sans lecture (attentive, en plus) de l'aide VB6. Le composant MsFlexGrid n'a pas été conçu dans les normes habituelles en ce qui concerne la définition des dimensions (non dépendantes de l'échelle du container).
Je referme, maintenant.
0
Rejoignez-nous