5/5 (12 avis)
Vue 12 631 fois - Téléchargée 2 216 fois
' COMMENT UTILISER LE COMPOSANT Option Explicit Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long Private Sub Command1_Click() If CInt(Text1.Text) < 1 Then Text1.Text = "1" If CInt(Text1.Text) > PrinterPreview1.Count Then Text1.Text = CStr(PrinterPreview1.Count) ' on va à la page désirée PrinterPreview1.GoPage CInt(Text1.Text) End Sub Private Sub Command2_Click() ' on sélectionne toutes les pages PrinterPreview1.SelAll End Sub Private Sub Command3_Click() ' on déselectionne toutes les pages PrinterPreview1.UnSelAll End Sub Private Sub Command4_Click() ' on lance l'impression PrinterPreview1.StartPrint End Sub Private Sub Command5_Click() PrinterPreview1.PrintProperties End Sub Private Sub Command6_Click() PrinterPreview1.About End Sub Private Sub Form_Load() Label1.Caption = "Nombre de page: " & CStr(PrinterPreview1.Count) ' on prépare l'aperçu avant impression PrinterPreview1.Border3D = True PrinterPreview1.PageWidth = Printer.Width ' toujours en Twips les coordonnées PrinterPreview1.PageHeight = Printer.Height ' toujours en Twips les coordonnées PrinterPreview1.MarginLeft = 400 ' toujours en Twips les coordonnées PrinterPreview1.MarginTop = 400 ' toujours en Twips les coordonnées PrinterPreview1.DrawPageNum = True PrinterPreview1.ShowDatetime = True PrinterPreview1.PrintQuality = qHIGH PrinterPreview1.DocumentName = "Essai d'impression" Dim Page As Integer Dim P As IPictureDisp Dim W As Long, H As Long, R As Double ' on charge une image Set P = LoadPicture(App.Path & "\family tux.jpg") ' on ajoute une nouvelle page Page = PrinterPreview1.Add("PaintPicture Mode : mDEFAULT et 2 x mUSER") ' on définit sa couleur de fond PrinterPreview1.SetBackColor Page, RGB(255, 255, 255), False ' on dessine l'image chargée PrinterPreview1.PaintPicture Page, P, mDEFAULT, 0, 0 ' on charge une image Set P = LoadPicture(App.Path & "\Kuantum2 1024-768.jpg") ' on calcule sa taille suivant son ratio R = P.Height / P.Width W = 5000 H = W * R ' on dessine cette image PrinterPreview1.PaintPicture Page, P, mUSER, 2000, 3000, W, H, pmINVERT ' on charge une image Set P = LoadPicture(App.Path & "\usual suspect.jpg") ' on calcule sa taille suivant son ratio R = P.Height / P.Width W = 8000 H = W * R ' on dessine cette image PrinterPreview1.PaintPicture Page, P, mUSER, 5000, 6000, W, H ' on charge une image Set P = LoadPicture(App.Path & "\Big Tux 1280-1024.jpg") ' on ajoute une nouvelle page Page = PrinterPreview1.Add("PaintPicture Mode : mAUTO, SetBackColor avec Bordure, 2 x DrawString, 3 x DrawLine") ' on définit sa couleur de fond PrinterPreview1.SetBackColor Page, RGB(230, 233, 236), True, RGB(115, 133, 153), 1 ' on dessine l'image chargée PrinterPreview1.PaintPicture Page, P, mAUTO ' on dessine une chaine de caractère PrinterPreview1.DrawString Page, "Essai 1", "Tahoma", 14, True, 1000, 1000, 5000, 3000, fLEFT, 0, 0, False, False, False, FW_BOLD, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, vbBlue ' on dessine une chaine de caractère PrinterPreview1.DrawString Page, "Essai 2" & vbCrLf & "de bob", "Tahoma", 21, True, 3000, 3000, 5000, 3000, fLEFT, 0, 0, True, True, True, FW_THIN, DEFAULT_CHARSET, OUT_DEVICE_PRECIS, CLIP_STROKE_PRECIS, PROOF_QUALITY, VARIABLE_PITCH, vbRed ' on dessine une ligne PrinterPreview1.DrawLine Page, 1500, 1500, 7000, 7000, vbMagenta, 3 ' on dessine une ligne PrinterPreview1.DrawLine Page, 7000, 7000, 2000, 7000, vbMagenta, 3 ' on dessine une ligne PrinterPreview1.DrawLine Page, 2000, 7000, 2000, 4000, vbMagenta, 3 ' on ajoute une page Page = PrinterPreview1.Add("3 x DrawRectangle, DrawRectangle : Rounded, DrawEllipse") ' on définit sa couleur de fond PrinterPreview1.SetBackColor Page, RGB(255, 255, 255), False ' on dessine un rectangle PrinterPreview1.DrawRectangle Page, 2000, 3000, 5000, 5000, True, vbYellow, vbBlack, 1 ' on dessine un rectangle PrinterPreview1.DrawRectangle Page, 5000, 6000, 10000, 5000, False, vbBlue ' on dessine un rectangle PrinterPreview1.DrawRectangle Page, 3500, 4500, 5000, 20000, True, vbGreen, vbWhite, 3 ' on dessine un rectangle PrinterPreview1.DrawRectangle Page, 1000, 1000, 4000, 1800, True, vbMagenta, vbBlack, 1, True, 50 ' on dessine une ellipse PrinterPreview1.DrawEllipse Page, 1500, 1500, 6000, 6000, True, vbCyan, vbRed, 1, pmAND Picture1.Cls Picture1.Width = Screen.Width Picture1.Height = Screen.Height StretchBlt Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, GetDC(0), 0, 0, Screen.Width, Screen.Height, vbSrcCopy Picture1.Refresh Page = PrinterPreview1.Add("Capture d'écran") PrinterPreview1.SetBackColor Page, RGB(250, 250, 250), True, RGB(100, 100, 100), 1 PrinterPreview1.PaintPicture Page, Picture1.Image, mAUTO, , , , , pmCOPY PrinterPreview1.DrawString Page, "Capture d'écran 1", "Tahoma", 10, True, PrinterPreview1.MarginLeft, PrinterPreview1.MarginTop + PrinterPreview1.PixelsToTwipsY(200), PrinterPreview1.PageWidth, PrinterPreview1.TextHeight(Page, "Tahoma", 10, "Capture d'écran 1"), fCENTER, 0, 0, False, False, False, FW_BLACK, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH, RGB(0, 100, 100) Me.Show DoEvents End Sub Private Sub Form_Resize() PrinterPreview1.Left = 0 PrinterPreview1.Top = Command1.Top + Command1.Height + Command1.Top PrinterPreview1.Width = Me.ScaleWidth PrinterPreview1.Height = Me.ScaleHeight - PrinterPreview1.Top End Sub Private Sub PrinterPreview1_Added() Label1.Caption = "Nombre de page: " & CStr(PrinterPreview1.Count) End Sub
7 sept. 2005 à 14:19
Petite question : peux t'on imprimer un texte avec un FOND blanc (genre on a definit le setbackcolor et on souhaite ecrire un texte mais sans le fond (comme un formulaire par ex.)
6 mai 2005 à 11:22
J'ai crée moi aussi un état d'impression moins complet que celui-ci mais suffisant pour mon utilisation personnel, au vu des premiers commentaires j'ai noté apparement qu'il est préférable d'envoyer directement une image à l'impression plutot que tout dessiner ce que je fais habituellement car plus simple pour moi à gérer.
Mais lorsque cette image est le résultat du contenu d'un picturebox dans lequel j'ai tout dessiné (police, rectangle, image de fond etc...) je me rend très vite compte lors de l'impression que la police est pixelisée à mort et que le résultat n'est pas toujours celui espéré.
J'en viens donc à ma question est-il possible d'appliquer un effet de lissage sur une image que l'on souhaite imprimer au moyen de strechblt ou de tout autre méthode ??
Dernière chose, qui sait comment gérer ces foutus marges d'impression car bien que l'imprimante en ai besoin, il existe quand même des formats de papier (genre étiquettes) dont les dimensions sont nettement supérieures aux marges de toutes ces imprimantes ??
Sinon j'allais oublié le plus important 10/10 à cette source quand même :-)
@plus
20 nov. 2004 à 16:46
Je tâcherai donc d'éplucher le code plus en avant.
Bonne continuation...
20 nov. 2004 à 12:51
20 nov. 2004 à 12:49
l' OCX (dessine) tout ce qui bouge.
Donc pour le texte il prend tout aussi bien les Tabulation que le CRLF. Bien sur il ne gere pas le wordwrap ( ce n'est pas un editeur de texte ) mais tu peux le traiter avant dans ton code.
Pour l'orientation, il gere le portrait et le paysage.
Pour le placement des objets, tu as toutes les coordonées et les marges a ta disposition (sachant que tu les renseignes a l'initialisation).
Pour ta derniere question, comme tu le dis, tu dois tracer des lignes et dessiner du texte donc oui le code a des fonctions rapide pour faire ca.
J'ai noter dans mes idees d'ameliorations, la possibilité de faire des tablos mais ca reste plutot complexe et j'ai quelque peu du mal a negocier une technique relativement simple a utiliser et assez puissante pour faire qqc de sympa (la gestion des cellules c le merdier).
Deplus si ton "tableau" tu le dessine sur ton picture box, il sera tres tres simple de l'imprimer !!
OCX.PaintPicture Page, LaPicDeTonTablo.image, .. ... .....
et ca tu le fait dans le sens que tu veux et tu met le mode mAuto pour que l'ocx le redimmenssionne tout seul au format de la page (format de page directement renseigné a linitialisation du code - dans mon exemple j'ai pris le format de la page actuel de l'imprimante par defaut)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.