Paintpicture et coordonées??? help

pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 - 18 déc. 2003 à 15:07
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 - 18 déc. 2003 à 18:27
Slt j'ai un petit probléme avec le code qui suit, je vais essayer d'étre clair, mais c'est pas évident a expliquer!

J'utilise une picturebox tmp pour afficher l'affiche a sa taille réel.
Je calcule ensuite le ratio afin de faire un paintpicture de l'image dans la picturebox aff (l'affiche se trouve alors non deformée, mais il manque le bas de l'affiche)!! normal on peu pas mettre une rectangle dans un carré!!

Le probléme arrive ensuite je voudrais pourvoir en deplacant a la souris aff, voir l'affiche monter ou descendre, pour pouvoir ajuster l'affichage selon la taille aff!!!!

-----------------------------------------------------------------
Dim Ratio As Double

Private Sub Form_Load()
aff.ScaleMode = 6
tmp.ScaleMode = 6
tmp.AutoRedraw = True
aff.AutoRedraw = True
tmp.BorderStyle = 0
aff.BorderStyle = 0
tmp.AutoSize = True
aff.Width = 2400 'Soit 2 fois 12cm taille d'une boite cd
aff.Height = 2400
'affiche dans aff sans deformation
Ratio = tmp.ScaleWidth / aff.ScaleWidth
aff.PaintPicture tmp, 0, 0, aff.ScaleWidth, aff.ScaleHeight, 0, 0, tmp.ScaleWidth, aff.ScaleHeight * Ratio
End Sub

Private Sub aff_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
aff.Cls
aff.PaintPicture tmp, aff.ScaleLeft, Y, aff.ScaleWidth, aff.ScaleHeight - Y, 0, -Y, tmp.ScaleWidth, tmp.ScaleHeight - (Y * Ratio)
End If
End Sub
----------------------------------------------------------------

Le code merdouille au niveau du paintpicture dans aff_mouve, ca se deplace bien comme je veu , mais l'image est deformé, le ratio n'est plus conservé. Je cherche depuis plusieurs jours a resoudre ce probléme qui est simplement au niveau des coodonné, du paintpicture!!!!!!

Ce code est destiné a une appli d'impression d'affiche dans ma bdd de film, d'ou mon intéret d'utiliser paintpicture pour ensuite envoyer les coordonées de l'image vers l'imprimante

PS: G bien éssayer avec 2 pb mais le porbléme ensuite est la résolution de l'image envoyer a l'imprimante!!! mes picture box sont trop petite et donc l'impression est vraiment moche!!!!

Voila si qq veu m'aider a resoudre ce bléme ou alors a une autre solution je suis preneur!!!

13 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
18 déc. 2003 à 15:43
Il faut que tu te base toujours sur la même images pour la déplacer : base toi sur ton image temporaire. Si tu y arrive au moins une fois à l'afficher sans déformation, tu devrais facilement y arriver pendant le déplacement en retracant à chaque fois !

Note : il vaut mieux utiliser la fonction API StretchBlt plutôt que la fonction VB PaintPicture pour ce genre de manipulation car elle est plus rapide !

DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
18 déc. 2003 à 15:50
DARKSIDIOUS ---->je sais pour stretchblt mais la g besoin des coordo pour l envoyer a l imprimante donc je verai plus tard pour optimiser mon code!!

Oui j'y arrive pour l'afficher sans deformation, mais lors du deplacement j'y arrive pas. J'ai pas dit que c'etait impossible!!
Simplement que je n'y arrive pas!!! (mon cerveau bug)

Donc je cherche quelqu'un pour me donner la solution, pas pour me dire d'utiliser une autre fonction qui ne résoudra pas mon probléme!!!
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
18 déc. 2003 à 15:53
Bon ok, je m'y attarde un peu plus alors et je te donne le code que j'aurais trouvé d'ici quelques minutes/heures ;-)

DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
18 déc. 2003 à 16:05
Voilà la code comme promis ;-)

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

Const Ratio = 1 / 2

Private Sub Picture2_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)

    Picture2.Cls
    Call StretchBlt(Picture2.hdc, x, y, Picture1.ScaleWidth, Picture1.ScaleHeight, Picture1.hdc, 0, 0, Picture1.ScaleWidth * Ratio, Picture1.ScaleHeight * Ratio, vbSrcCopy)
    Picture2.Refresh

    DoEvents
    
End Sub


Note : J'utilise le picture2 comme picturebox d'affichage, le picture1 comme picturebox temporaire, et j'utilise la fonction StretchBlt ;-)

DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
0

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

Posez votre question
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
18 déc. 2003 à 17:33
d'abord merci de te pencher sur mon probléme car j'y perd vraiment mon latin!!!

Mais je suis Dsl mais ton code ne renvoie rien!!! le stretchblt ne sefait pas j'éssaie de voir pourquoi. mais je vais plutot chercher au niveau de mon code car c'est vraiment pas loin c juste les coordo!!! en plus je ne joue pas avec le x1 et x2 ni le width car il doivent rester pareils c juste le haut et bas qui change!!!!

Enfin ton code ne me renvoie rien!!!! picture2 reste vide, malgres autoredraw = true au pb et pas de bord, etc...
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
18 déc. 2003 à 17:47
De plus je vien d'essayer les coodonées de ton stretchblt avec un paintpicture ca copie simplement l'image au coordonées du pointeur dans la picture box en modifiant sa taille selon le ratio!!!!!

C'est pas du tous le propos de ma question, essaie ma src pour voir ce que j'attend, car a mon avis tu as pas du comprendre la question!!!!!!

je vais essayer d'expliquer mais il y a que la src qui peu faire comprendre, j'affiche dans ma picturebox l'image de la picture box temp, mais sur la largeur de la picture box d'affichage et donc il manque le bas pour respecter le ratio de l'image, je veu a la souris deplacer l'image soit vers le haut ou le bas sans deformation donc en n'affichant que la partie de mon picturebox d'affichage!!

arf c du charabiat lol!!!
Voir la src c plus simple a comprendre
c pour que l'utilisateur puisse prendre la partie de l'affiche qu'il l'intersse en la montant (sans deformation)!!! pour par ex prendre le titre du film qui se trouve en bas et en otant la partie haute de l'affiche!!!!
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
18 déc. 2003 à 18:01
Pour que ma source marche, il faut absolument passer des pixels à la fonction StretchBlt !

Bon je regarde ta source pour voir ce que tu veux exactement.

DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
18 déc. 2003 à 18:05
ok merci j'attend!!! si tu veu faire ca en live..
messenger : pcpunch59@hotmail.com
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
18 déc. 2003 à 18:09
Voilà ton code légérement modifié, mais je ne sais toujours pas si c'est ce que tu cherche !

Dim Ratio As Double

Private Sub Form_Load()
aff.ScaleMode = 6
tmp.ScaleMode = 6
tmp.AutoRedraw = True
aff.AutoRedraw = True
tmp.BorderStyle = 0
aff.BorderStyle = 0
tmp.AutoSize = True
aff.Width = 2400 'Soit 2 fois 12cm taille d'une boite cd
aff.Height = 2400
'affiche dans aff sans deformation
Ratio = tmp.ScaleWidth / aff.ScaleWidth
aff.PaintPicture tmp, 0, 0, aff.ScaleWidth, aff.ScaleHeight, 0, 0, tmp.ScaleWidth, aff.ScaleHeight * Ratio
End Sub

Private Sub aff_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
aff.Cls
aff.PaintPicture tmp, 0, Y, aff.ScaleWidth, aff.ScaleHeight, 0, -Y, tmp.ScaleWidth, aff.ScaleHeight * Ratio
End If
End Sub


DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
18 déc. 2003 à 18:19
Dsl DaKSidious, mais ton code coupe le bas de l'affiche si on la deplace vers le haut hors la il faut le voir , sinon le code n'a aucun interet!!!!

Mais aprés qq heures de recherche car je suis pas a l'aide avec les coordo de paintpicture, j'ai enfin trouvé!!!! si tu veu essaye remplace par cette ligne dans la sub mousemove et tu verra le resultat que je chercher!!!!

aff.PaintPicture tmp, 0, Y, aff.ScaleWidth, aff.ScaleHeight - Y, 0, -Y * Ratio, tmp.ScaleWidth, (aff.ScaleHeight * Ratio) - (Y * Ratio)
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
18 déc. 2003 à 18:23
Ton problème est résolu ? Car chez moi ca bugge : l'image se déplace bien plus vite que la souris ! Mais peut-être c'est ce que tu voulais.

DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
18 déc. 2003 à 18:24
J'ai encore un leger soucis c'est que le haut de l affiche se déssine pas exactement sur y, et l'ecart grandit si on descent!!!

Mais bon c'est acceptable mais j'aimerai bien aussi réglé se bléme vien certainement du fait que mes PB sont scalemode 6 et pas Y!!!
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
18 déc. 2003 à 18:27
oui le bug vien lorsque le debut de l'affiche est hors de la picture box, un simple on error resume next regle le bleme, mais c a cause de Y je cherche !!!!!
mais ce que je voulais c simplement deplacer l'image vers le bas ou vers le haut en respectant le ratio!!!! donc c ca!!!!
0
Rejoignez-nous