CREER UN CALENDRIER DE POCHE

Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 - 9 déc. 2011 à 08:21
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 12 déc. 2011 à 17:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/53838-creer-un-calendrier-de-poche

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
12 déc. 2011 à 17:25
ADN56, j'ai suivi ta suggestion. Faire cela sans Word.Cela n'a pas été facile, il fallait redimensionner les images. Ce que faisait Word. ensuite créer un bitmap pour insérer 2 images dans la PictureBox. Un petit hic que je n'ai pas résolu. Avec cette méthode on ne peut pas supprimer les images à la fermeture. Je l'ai fait à l'ouverture. Avec Word cela ne posait pas de problème.J'ai tout essayé Picture Nothing, mettre une autre image, rien n'y fait cela bug!
@+ en attendant de te relire
Le Pivert
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
10 déc. 2011 à 19:15
bien les commentaires ne s'affichent plus, mais j'ai vu que tu avais modifié ta source. C'est presque nickel ^^ et oui regarde ça :
If PictureBox1.Image Is Nothing Then Exit Sub puis
If PictureBox2.Image Is Nothing Then Exit Sub !
namého un petit OR quoi ! lol

If PictureBox1.Image Is Nothing _
Or PictureBox2.Image Is Nothing _
Then Exit Sub

;) bon boulot pivert, il te reste plus qu'a charger ton calendrier sur une 3iéme image et de tout imprimer via ton soft ;) bon courage et au plaisir de te relire (si les comms s'affichent bien sur ^^)

kenavo
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
10 déc. 2011 à 17:30
Merci ADN56 cela fonctione à merveille. Je vais poster la maj, car j'ai une réponse de Jack qui m'a dit que l'on pouvez fermer le document cela n'empêchait pes l'impression. C'est exact.
Bonne fin d'année
@+ Le Pivert
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
10 déc. 2011 à 09:48
re, en effet j'avais pas vu que les images tournent chacune dans un sens, mais encore une fois cette fonction est mieux dans la function OPEN, il te suffit de passer un paramétre à cette function pour pivoter l'image dans le bon sens :
function open (byval seconde_image as boolean) as image
[...]
'Affiche et attend la fermeture de la boite de dialogue
If .ShowDialog() = DialogResult.OK And _
Not (.FileName Is Nothing) Then 'si clic sur OK et nom de fichier <> nothing attribu l'image
monImage = Image.FromFile(openFD.FileName)
if not second_image then
If monImage.Width > monImage.Height Then monImage.RotateFlip(RotateFlipType.Rotate90FlipX)
else
If monImage.Width > monImage.Height Then monImage.RotateFlip(RotateFlipType.Rotate270FlipX)
end if

fin de la function....
puis enfin comme tu l'imagine déja dans l'appel de la function :
Private Sub cmdopen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdopen.Click
' revenons à nos fonctions ^^
PictureBox1.Image = open(false) 'ouvrir 1ère image
PictureBox2.Image = open(true) 'ouvrir seconde image
et voila le tour est joué ;)
kenavo et @++
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
10 déc. 2011 à 07:57
Bravo ADN56, c'est parfait. J'ai fait juste une petite correction. Tu avais mis la rotation de l'image dans la fonction.Mais les images tournent à l'inverse l'une de l'autre.
Voici le code:
#Region "Déclarations"
Dim hauteur As Integer
Dim largeur As Integer
Dim monChemin1 As String = Application.StartupPath & "\Configuration\image_1.jpg"
Dim monChemin2 As String = Application.StartupPath & "\Configuration\image_2.jpg"
Dim shape As Integer
Dim oWord As Object
#End Region
#Region "Ouverture et fermeture"
Private Sub cmdopen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdopen.Click
' revenons à nos fonctions ^^
PictureBox1.Image = open() 'ouvrir 1ère image
If hauteur < largeur Then
PictureBox1.Image.RotateFlip(RotateFlipType.Rotate270FlipXY) 'position de l'image dans la PictureBox
End If
PictureBox2.Image = open() 'ouvrir seconde image
If hauteur < largeur Then
PictureBox2.Image.RotateFlip(RotateFlipType.Rotate90FlipXY) 'position de l'image dans la PictureBox
End If
save(PictureBox1.Image, monChemin1) 'enregistrer 1ère image
save(PictureBox2.Image, monChemin2) 'enregistrer seconde image
print_image()
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
'supprime les fichier images à la fermeture
File.Delete(monChemin1)
File.Delete(monChemin2)
MessageBox.Show("N'oubliez pas de fermer les documents Word: Recto et Verso.", "Creer calendrier", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
Private Function open() As Image
'Mise en place d'un objet OpenFileDialog pour ouvrir un fichier image
Dim monImage As Image
Dim openFD As New OpenFileDialog
With openFD
.Filter = "JPeg Files (*.jpg,*.jpeg)|*.jpg;*.jpeg|Bitmap Files (*.bmp)|*.bmp|Gif Files (*.gif)|*.gif|Icon Files (*.ico)|*.ico|Png Files (*.png)|*.png"
.FilterIndex = 1
.Title = "Sélectionnez le fichier image que vous souhaitez ouvrir."

'Affiche et attend la fermeture de la boite de dialogue
If .ShowDialog() = DialogResult.OK And _
Not (.FileName Is Nothing) Then 'si clic sur OK et nom de fichier <> nothing attribu l'image
monImage = Image.FromFile(openFD.FileName)
' test largeur/hauteur
largeur = monImage.Width
hauteur = monImage.Height
Else
MessageBox.Show("ouverture impossible", "Echec", MessageBoxButtons.OK, MessageBoxIcon.Information)
Return Nothing
Exit Function
End If
End With
openFD.Dispose()
Return monImage
End Function
#End Region
#Region "Enregistrements des images dans la bonne position"
Private Sub save(ByVal cetteImage As Image, ByVal chemin As String)
' Recevez un Bitmap.
Dim bm As Image = cetteImage
' Sauvez l'image comme un JPEG
bm.Save(chemin, System.Drawing.Imaging.ImageFormat.Jpeg)
End Sub
#End Region
Je ne poste pas encore la maj, je voudrais régler le problème de la fermeture du doc Word à la fin de l'impression. Je vais faire appel au Forum, car je n'ai rien trouvé à part PrintDocument, mais je ne l'utilise pas.
Je te tiens au courant et encore merci pour l'optmisation du code
Bon WE @+ Le Pivert
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
9 déc. 2011 à 19:31
Voila à quoi je pensais plutot ;) bon décodage poto . @+++

Option Explicit On
Option Strict On
Imports System.IO
'Imports System.Drawing.Imaging
Public Class Form1
#Region "Déclarations"
Dim hauteur As Integer
Dim largeur As Integer
Dim monChemin1 As String = Application.StartupPath & "\Configuration\image_1.jpg"
Dim monChemin2 As String = Application.StartupPath & "\Configuration\image_2.jpg"
#End Region
#Region "Ouverture et fermeture"
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'dans le form load :
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
PictureBox2.SizeMode = PictureBoxSizeMode.Zoom
End Sub
Private Sub cmdopen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdopen.Click
' revenons à nos fonctions ^^
PictureBox1.Image = open() 'ouvrir 1ère image
PictureBox2.Image = open() 'ouvrir seconde image
save(PictureBox1.Image, monChemin1) 'enregistrer 1ère image
save(PictureBox2.Image, monChemin2) 'enregistrer seconde image
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
'supprime les fichier images à la fermeture
File.Delete(monChemin1)
File.Delete(monChemin2)
MessageBox.Show("N'oubliez pas de fermer les documents Word: Recto et Verso.", "Creer calendrier", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
Private Function open() As Image
'Mise en place d'un objet OpenFileDialog pour ouvrir un fichier image
Dim monImage As Image
Dim openFD As New OpenFileDialog
With openFD
.Filter = "JPeg Files (*.jpg,*.jpeg)|*.jpg;*.jpeg|Bitmap Files (*.bmp)|*.bmp|Gif Files (*.gif)|*.gif|Icon Files (*.ico)|*.ico|Png Files (*.png)|*.png"
.FilterIndex = 1
.Title = "Sélectionnez le fichier image que vous souhaitez ouvrir."

'Affiche et attend la fermeture de la boite de dialogue
If .ShowDialog() = DialogResult.OK And _
Not (.FileName Is Nothing) Then 'si clic sur OK et nom de fichier <> nothing attribu l'image
monImage = Image.FromFile(openFD.FileName)
' test largeur/hauteur
If monImage.Width > monImage.Height Then
monImage.RotateFlip(RotateFlipType.Rotate90FlipX)
End If
Else
'MessageBox.Show("ouverture impossible", "Echec", MessageBoxButtons.OK, MessageBoxIcon.Information)
'Return Nothing
Exit Function
End If
End With
openFD.Dispose()
Return monImage
End Function
#End Region
#Region "Enregistrements des images dans la bonne position"
Private Sub save(ByVal cetteImage As Image, ByVal chemin As String)
' Recevez un Bitmap.
Dim bm As Image = cetteImage
' Sauvez l'image comme un JPEG
bm.Save(chemin, System.Drawing.Imaging.ImageFormat.Jpeg)
End Sub
#End Region
#Region "Inserer images dans documents Word"
'impression des images
'impression du calendrier
#End Region

End Class
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
9 déc. 2011 à 18:57
Alors mes premières constations :
Option Strict On !
tu verra qu'une fonction DOIT retourner un truc, sinon c'est d'une SUB, donc open et save à revoir ^^
je bosse dessus et te post ma version, a toute de suite ^^
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
9 déc. 2011 à 18:01
Oui pour les commentaires invisibles j'ai eu le cas aussi (firefox8 et IE) à surveiller donc.
Pour ton code l'idéale serait carrément de dessiner directement le calendrier par dessus de l'image dans le picturebox et de l'imprimer via VB.NET (plus besoin du lourd pack office donc ^^)
Sinon je look tes fonctions et j'avoue que je n'aurais pas passé en paramètre picturebox (qui est un control au fait, c'est mieux qu'un objet ;) ). je vois aussi que tu l'utilises ainsi dans un autre sub, ByVal PictureBox As Bitmap, c'est pas trés cohérent non ? à voir ;)
Pour finir ton test :
If PictureBox1.Image Is Nothing Then
MessageBox.Show("Il n'y a pas d'image!", "Ouverture image 1", MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Sub
End If
Il serait bien mieux dans la fonction open(), encore un peu d'optimisation pour un plaisir de lecture (:
bon travail, cela fait plaisir d'aider et de partager nos connaissances avec des gens comme toi. Je me penche de suite sur tes fonctions pour voir en détails, @ trés vite M. Le Pivert
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
9 déc. 2011 à 11:06
Merci ADN56, tu es toujours de bon conseil. J'ai donc corrigé ma source. Je ne suis pas très doué pour les fonctions, mais cela fonctionne. Pour ce qui est de quitter Word, je l'ai fait sciemment. Car il faut attendre la fin de l'impression pour quitter le document. J'ai essayé avec PrintEnd, mais cela ne fonctionnait pas. J'ai donc ajouté un message à la fermeture. Je vais chercher un peu plus.
Au plaisir de te relire
@+ Le Pivert
PS il y a des problèmes de mise à jour sur le site les commentaires ne s'affichent pas toujours
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
9 déc. 2011 à 08:21
Salut le pivert, idée sympa et code propre. Un détail cependant, j'aurais pas du tout codé comme ça. Je serais plutôt parti sur des sub/fonction pour ouvrir une image et les enregistrer. Je trouve par exemple que save1 et save2, open1 et open2 sont bien trop redondant.
En gros dans la sub cmb principal j'aurais eu un truc de ce style
dim image1 as bitmap = open()
dim image2 as bitmap = open()
if not image1 is nothing then save(image1)
if not image2 is nothing then save(image2)
print_form, etc.... tu vois l'idée ?
PS : j'ai pas vu si tu détruisais bien le processus de word ?

Trés bonne continuation et bonne prog à toi Sieur (:
Rejoignez-nous